domingo, 18 de novembro de 2018

Javafx - leitura em arquivo de texto

Ler um arquivo de texto em javafx
desde que não seja muito longo,
podemos fazê-lo na própria janela.
Neste exemplo, o programa lê um arquivo
de quase 500 linhas.
mas para uma leitura de milhares de linhas,
no máximo 10000, Para não ficar muito pesado,
a leitura deve ser feita num TextArea.
O arquivo de nome "Poesias famosas",
possui 448 linhas, e para visualizá-las
por completo basta manipular o Scroll
com o mouse para baixo ou para cima.

Veja abaixo uma imagem do programa em execução:


Veja abaixo o código do programa:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.ScrollPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class PROJETO extends Application {
     static String str = "";
     static int a = 0;
     static Group root = new Group ( );
     static Scene scene = new Scene ( root, 600, 300, Color.BLACK );
     static Canvas canvas = new Canvas ( 600, 8000 );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     static ScrollPane s1 = new ScrollPane ( );
     // /////////////////////////////////////////////////////////////////////////
     private static final void Ler_Arquivo ( ) throws IOException {
         Path wiki_path = Paths.get ( "H:\\eclipse luna_two\\"
                   + "PROJETO\\PROJETO\\src\\Poesias famosas.txt" );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.NORMAL,
                   FontPosture.ITALIC, 13 ) );
         try ( BufferedReader reader = Files.newBufferedReader ( wiki_path ) ) {
              String line = "";
              String num = "";
              while ( ( line = reader.readLine ( ) ) != null ) {
                   a++;
                   num += a + "\n";
                   // System.out.println ( a + "  " + line );
                   str += line + "\n";
              }
              ctx.setFill ( Color.RED );
              ctx.fillText ( num, 10, 80 );
              ctx.setFill ( Color.BLACK );
              ctx.fillText ( str, 50, 80 );
         }
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) throws IOException {
         stage.setTitle ( "LENDO ARQUIVO DE TEXTO EM JAVAFX" );
         //Este retângulo forma uma moldura em torno da janela
         Rectangle rect = new Rectangle ( 600, 300 );
         rect.setLayoutX ( 5 );
         rect.setLayoutY ( 5 );
         //Arredondamento dos cantos do retângulo
         rect.setArcHeight ( 35 );
         rect.setArcWidth ( 35 );
         rect.setFill ( Color.CHARTREUSE );
         // Criando moldura em torno do ScrollPane
         s1.setStyle ( "-fx-padding: 5;"
                   + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 4;"
                   + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;"
                   + "-fx-border-color: black;" );
         stage.setResizable ( false );
         s1.setPannable ( true );
         s1.setLayoutX ( 20 );
         s1.setLayoutY ( 20 );
         s1.setPrefSize ( 570, 270 );
         s1.setContent ( canvas );
         ctx.setFill ( Color.RED );
         //Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 16 ) );
         ctx.fillText ( "LENDO ARQUIVO DE TEXTO EM JAVAFX", 120, 15 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 15 ) );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Imprimindo abaixo o arquivo aberto", 140, 40 );
         Ler_Arquivo ( );
         root.getChildren ( ).addAll ( rect, s1 );
         stage.setScene ( scene );
         stage.show ( );       
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         launch ( args );
     }

}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.