sexta-feira, 23 de novembro de 2018

JavaFX - lendo arquivo e pesquisando

Com este programa podemos fazer
leitura e pesquisa num arquivo  de texto.
A leitura é feita na janela do programa,
que conta com um ScrollPane para rolagem
das linhas.
Num textfield inserimos a palavra à procurar,
e se for encontrada, o programa conta quantas
linhas possuem a palavra inserida,
e marca o texto da linha inteira com fonte
em outra cor para destaque.

Veja abaixo um vídeo do programa em execução:


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



Veja abaixo o código do programa:


//Programa pesquisa em arquivo
//23/11/2018 - 20:02
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.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javafx.geometry.Insets;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.BorderPane;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextField;

public class PROJETO extends Application {
     static StringBuilder st = new StringBuilder ( );
     static StringBuilder st1 = new StringBuilder ( );
     static String str1  = "";
     static String str_2 = "";
     static String str_3 = "";
     static String str_4 = "";
     static int a = 0, c = 0, i = 1, k = 0;
     static Boolean x = false;
     static Group root = new Group ( );
     static VBox vbox = new VBox ( );
     static Scene scene = new Scene ( vbox, 600, 300, Color.BLACK );
     static Canvas canvas = new Canvas ( 600, 1530 );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     static ScrollPane s1 = new ScrollPane ( );
     static BorderPane bord = new BorderPane ( );
     private static File file = new File ( "H:\\eclipse luna_two\\"
              + "PROJETO\\PROJETO\\src\\380.txt" );
     private static int SIZE = 71;
     static String [ ] str = new String [ SIZE ];
     static String [ ] oc = new String [ str.length ];
     static String [ ] str_0 = new String [ str.length ];
     static MenuBar menuBar = new MenuBar ( );
     static Menu arq = new Menu ( "Arq" );
     static MenuItem pesq = new MenuItem ( "Pesquisa" );
     static MenuItem sair = new MenuItem ( "Sair" );
     // /////////////////////////////////////////////////////////////////////////
     public static void Menu ( Stage stage ) {
         pesq.setOnAction ( new EventHandler < ActionEvent > ( ) {
              @Override
              public void handle ( ActionEvent e ) {
                   // Coluna, linha, comprimento, altura
                   // Apagando uma linha ou partes
                   if ( x == true )
                        ctx.clearRect ( 10, 50, 400, 40 );
                   str_2 = "";
                   str_3 = "";
                   str_4 = "";
                   i = 0;
                   a = 0; c = 0; k = 0;                 
                   textFieldArr ( );
              }
         } );
         /////////////////////////////////////////////////////////
         sair.setOnAction ( new EventHandler < ActionEvent > ( ) {
              @Override
              public void handle ( ActionEvent e ) {
                   System.exit ( 0 );
              }
         } );
         /////////////////////////////////////////////////////////
         pesq.setAccelerator ( new KeyCodeCombination ( KeyCode.E,
                   KeyCombination.CONTROL_DOWN ) );
         sair.setAccelerator ( new KeyCodeCombination ( KeyCode.C,
                   KeyCombination.CONTROL_DOWN ) );
         arq.getItems ( ).addAll ( pesq, sair );
         menuBar.getMenus ( ).add ( arq );
     }
     // /////////////////////////////////////////////////////////////////////////
     private final static void Leitura ( ) throws IOException {
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.NORMAL,
                   FontPosture.ITALIC, 15 ) );
         BufferedReader f = new BufferedReader ( new FileReader ( file ) );
         int a = 0;
         while ( ( str [ i ] = f.readLine ( ) ) != null ) {
              a++;
              st.append ( str [ i ] + "\n" );
              st1.append ( a + "\n" );
         }
         f.close ( );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "" + st1, 10, 110 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "" + st, 50, 110 );
     }
     // /////////////////////////////////////////////////////////////////////////
     private final static void Ler_Linha_Arquivo ( ) throws IOException {
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.NORMAL,
                   FontPosture.ITALIC, 15 ) );
         BufferedReader f = new BufferedReader ( new FileReader ( file ) );
         int a = 0;
         boolean achou = false;
         while ( ( str [ i ] = f.readLine ( ) ) != null ) {
              a++;
              str_0 [ c ] = str [ i ] + "\n";
              c++;
              st1.append ( c + "\n" );
         }
         f.close ( );
         for ( i = 0; i < str_0.length; i++ ) {
              // toLowerCase() ignora fontes maiúscula e menúscula
              if ( str_0 [ i ].toLowerCase ( ).contains ( str_3.toLowerCase ( ) ) ) {
                   achou = true;
                   oc [ k ] = str_0 [ i ];
                   k++;
                   str_2 = str_2 + str_0 [ i ];
              } else {
                   oc [ k ] = "\n";
                   str_2 = str_2 + oc [ k ];
              }
         }
         str_4 += k;
         if ( k == 1 &&  achou == true ){
              ctx.setFill ( Color.BLACK );
              ctx.fillText ( "Só uma linha possui a palavra  ", 50, 70 );
              ctx.setFill ( Color.RED );
              ctx.fillText ( str_3, 250, 70 );
              ctx.setFill ( Color.RED );
              ctx.fillText ( str_2, 50, 110 );
              x = true;
         }
         else if ( k > 1 && achou == true ) {
              ctx.setFill ( Color.RED );
              ctx.fillText ( str_4, 50, 70 );
              ctx.setFill ( Color.BLACK );
              ctx.fillText ( "linhas possuem a palavra  ", 80, 70 );
              ctx.setFill ( Color.RED );
              ctx.fillText ( str_3, 255, 70 );
              ctx.setFill ( Color.RED );
              ctx.fillText ( str_2, 50, 110 );         
              x = true;
         } else {
              Toolkit.getDefaultToolkit ( ).beep ( );
              ctx.fillText ( "Nenhuma ocorrência da palavra ", 50, 70 );
              ctx.setFill ( Color.RED );
              ctx.fillText ( str_3, 300, 70 );
              x = true;
         }
     }
     // /////////////////////////////////////////////////////////////////////////
     public static VBox textFieldArr ( ) {
         TextField textField_1 = new TextField ( );
         HBox hbox_1 = new HBox ( textField_1 );
         // Posiciona o textfield no local escolhido
         hbox_1.setPadding ( new Insets ( -295, 0, 0, 65 ) );
         // Limita o textfield para no máximo trinta colunas
         textField_1.setPrefColumnCount ( 30 );
         // Insere uma pequena mensagem ao usuário
         textField_1.setPromptText ( "Digite uma palavra" );
         textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
              @Override
              public void handle ( KeyEvent event ) {
                   // convertendo string para inteiro
                   if ( event.getCode ( ) == KeyCode.ENTER ) {
                        //Copia o conteúdo do TextField em String
                        str_3 += textField_1.getText ( ).toString ( );
                        try {
                            Ler_Linha_Arquivo ( );
                        } catch ( IOException e ) {
                        }
                        // Oculta o textfield
                        textField_1.setVisible ( false );
                   }
              }
         } );
         vbox.getChildren ( ).addAll ( hbox_1 );
         return vbox;
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) throws IOException {
         stage.setTitle ( "JAVAFX - LENDO ARQUIVO E PESQUISANDO" );
         // 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;" );
         // Adicionando o canvas no Scroll
         s1.setContent ( canvas );
         ctx.setFill ( Color.RED );
         // Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 16 ) );
         ctx.fillText ( "JAVAFX - LENDO ARQUIVO E PESQUISANDO", 120, 15 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 15 ) );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Imprimindo abaixo o arquivo aberto", 160, 40 );
         // Posiciona o local exato da barra de menu
         bord.setPadding ( new Insets ( 5, 0, 0, 5 ) );
         bord.setTop ( menuBar );
         Menu ( stage );
         Leitura ( );
         vbox.getChildren ( ).addAll ( bord, 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.