quarta-feira, 26 de abril de 2017

JavaFX - pesquisando string III (mais avançado)


 Apresento aqui este bom programa criado com os recursos
da biblioteca javafx.
O programa é para pesquisa de palavras num array de string
e tem a capacidade de marcar as ocorrências das palavras
encontradas numa cor diferente da impressão normal.
Temos ainda um menu de três opções, botão e scroll vertical.

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


Veja abaixo mo código do programa:


import java.awt.Toolkit;
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.FontWeight;
import javafx.stage.Stage;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextInputDialog;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.control.Button;
import javafx.geometry.Insets;

public class PROJETO extends Application {
    static        String [ ] texto = {
        "                                            \n",
        "Debaixo dumas mui formosas tamareiras,      \n",
        "Estando já Berseba na escuridão.            \n",
        "As aves escutando, entre as roseiras,       \n",
        "Se vê andar o patriarca Abraão.             \n",
        "Seu coração perante Deus está aflito,       \n",
        "Pois quer que O sirvamos sem murmuração;    \n",
        "E por amor pergunta ao Senhor bendito:      \n",
        "O meu amado filho queres Tu, então?         \n",
        "                                            \n",
        "A voz de Jeová potente é ouvida:            \n",
        "O teu Isaque oferece para Mim,              \n",
        "Embora fiques com tu'alma dolorida,         \n",
        "Pois te abençoo se fizeres tu assim.        \n",
        "De abatido Abraão se torna forte            \n",
        "E Canta hinos, pois com fé medita já:       \n",
        "Deus pode o meu filho libertar da morte!    \n",
        "E não temendo, segue para Moriá.            \n",
        "                                            \n",
        "Ao pé do monte do supremo sacrifício,       \n",
        "Profunda duvida entrou em Abraão:           \n",
        "Irei perder da minha vida o beneficio?      \n",
        "E triste começou subir com lentidão,        \n",
        "Pois ia dar, do coração a esperança         \n",
        "- No seu outono, sacrifício duma flor,     \n",
        "Assim levou o seu cordeiro à matança,       \n",
        "Em obediência ao mandato do Senhor.         \n",
        "                                            \n",
        "Isaque com a lenha, presto vai na frente,   \n",
        "Oh! Quanto é formoso para Abraão!           \n",
        "Mas eis que volta p'ra seu pai suavemente   \n",
        "E lhe dirige esta interrogação:             \n",
        "O fogo e a lenha estou vendo que trouxemos, \n",
        "Mas o cordeiro d'holocausto onde está?      \n",
         "E a resposta de Abraão na Bíblia temos:     \n",
        "Meu filho, Deus pra Si, Cordeiro proverá    \n",
        "                                            \n",
        "Chegando Abraão aonde Deus mandara,         \n",
        "Fez um altar e nele a lenha arrumou:        \n",
        "E a seu filho, que já dantes amarrara,      \n",
        "Tomando nos seus braços sobre o altar deitou\n",
        "Mas quando Abraão foi para imolá-lo,        \n",
        "O Anjo do Senhor bradou-lhe desde os céus:  \n",
        "A tua mão, ó não estendas p'ra matá-lo;     \n",
        "Porquanto eu agora sei que temes Deus.      \n",
        "                                            \n",
        "Erguendo Abraão seus olhos de repente,      \n",
        "Vê um cordeiro, que no mato preso está,     \n",
        "E o tomando, oferece-o alegremente;         \n",
        "Assim No monte do Senhor se proverá.        \n",
        "A voz do Anjo é ouvida novamente;           \n",
        "Diz o Senhor: Porque fizeste esta ação,     \n",
        "Deveras, Eu abençoarei a tua semente,       \n",
        "E nela, as nações benditas se farão.        \n",
        "                                            \n",
        "O nosso Isaque oferecemos com firmeza       \n",
        "No Moriá onde finda o ideal,                \n",
        "Pois foi ali que alcançaram fortaleza,      \n",
        "Os vencedores, sob canto angelical;         \n",
        "Ali, o nosso Deus jurou fidelidade,         \n",
        "Também os santos se encheram de valor,      \n",
        "E só teremos a perfeita santidade,          \n",
        "Depois que formos para o monte do Senhor    \n"};
    static String [ ]      oc            = new String [ texto.length ];
    static Stage           stage;
    static String          pesq;
    private static String  str           = "";
    static String          str_1         = "";
    static String          str_2         = "";
    static String          str_3         = "";
    static String          str_4         = "";
    static String      str_6             = "";
    static int                  i             = 0, k = 0;
    static Group           root      = new Group ( );
    static Pane                 ro_ot         = new Pane ( );
    static Scene           scene         = new Scene ( root, 790, 350 );
    static Canvas          canvas    = new Canvas ( 1000, 2000 );
    static GraphicsContext ctx       = canvas.getGraphicsContext2D ( );
     static Canvas          can_vas   = new Canvas ( 1000, 2000 );
     static GraphicsContext ct_x      = can_vas.getGraphicsContext2D ( );
    static ScrollPane      s1        = new ScrollPane ( );
    static BorderPane      borderPane    = new BorderPane ( );
    static MenuBar              menuBar       = new MenuBar ( );
    // ///////////////////////////////////////////////////////////////////
     static class Temp {
         // Chamando uma função depois de um certo tempo
         public void Tempo_4 ( ) {
              ct_x.setFont ( Font.font ( "Tahoma", FontWeight.BOLD, 25 ) );
              ct_x.setStroke  ( Color.BLACK );
              ct_x.setFill ( Color.BLUE );
              ct_x.fillText ( "MUITO OBRIGADO", 470, 300 );
              ct_x.strokeText ( "MUITO OBRIGADO", 470, 300 );
         }
         public void Tempo_3 ( ) {
              ct_x.setFill ( Color.BLACK );
              ct_x.fillText ( "Programador em C/C++ e java", 470, 140 );
         }
         public void Tempo_2 ( ) {
              ct_x.setFill ( Color.RED );
              ct_x.fillText ( "Samuel Lima", 470, 120 );
         }
         public void Tempo_1 ( ) {
              ct_x.setFont ( Font.font ( "Tahoma", FontWeight.BOLD, 15 ) );
              ct_x.setFill ( Color.BLACK );
              ct_x.fillText ( "Programa criado por: ", 470, 100 );
         }
         // /////////////////////////////////////////////////////////////////
         public int Sleep ( int x, int k ) {
              Task < Integer > close = new Task < Integer > ( ) {
                   @Override
                   protected Integer call ( ) throws Exception {
                        Thread.sleep ( x );
                        return null;
                   }
              };
              close.setOnSucceeded ( c -> {
                   if ( k == 1 )
                        Tempo_1 ( );
                   if ( k == 2 )
                        Tempo_2 ( );
                   if ( k == 3 )
                        Tempo_3 ( );
                   if ( k == 4 )
                        Tempo_4 ( );
              } );
              new Thread ( close ).start ( );
              return 0;
         }
     }
     // /////////////////////////////////////////////////////////////////
     public static int But_ton_2 ( ) {
         // Botão declarado local
         Button btn_2 = new Button ( "cls" );
         btn_2.setPrefWidth ( 40 );// Largura do botão
         btn_2.setLayoutX ( 740 );// Posição do botão
         btn_2.setPrefHeight ( 24 );// altura do botão
         btn_2.setLayoutY ( 335 );// //Posição do botão
         btn_2.setOnAction ( new EventHandler < ActionEvent > ( ) {
              @Override
              public void handle ( ActionEvent event ) {
                   // Coluna, linha, comprimento, altura
                   // Apagando uma linha ou partes
                   ct_x.clearRect ( 380, 50, 400, 1020 );
              }
         } );
         // personalização do botão com css
         btn_2.setStyle ( "-fx-font: 10 arial; -fx-base: #00ffff;" );
         btn_2.setStyle ( "-fx-background-color: blue" );
         btn_2.addEventHandler ( MouseEvent.MOUSE_ENTERED,
                   new EventHandler < MouseEvent > ( ) {
              @Override
              public void handle ( MouseEvent e ) {
                   btn_2.setStyle ( "-fx-font: 10 arial; -fx-base: #00ffff;" );
                   btn_2.setStyle ( "-fx-background-color: red" );
              }
         } );
         btn_2.addEventHandler ( MouseEvent.MOUSE_EXITED,
                   new EventHandler < MouseEvent > ( ) {
              @Override
              public void handle ( MouseEvent e ) {
                   btn_2.setStyle ( "-fx-font: 10 arial; -fx-base: #00ffff;" );
                   btn_2.setStyle ( "-fx-background-color: blue" );  
              }
         } );
         root.getChildren ( ).add ( btn_2 );
         return 0;
     }
     // ///////////////////////////////////////////////////////////////////
     public static int Menu_Bar ( ) {
         EventHandler < ActionEvent > action = changeTabPlacement ( );
         Menu menu = new Menu ( "Arq" );
         MenuItem pesq = new MenuItem ( "Pesq" );
         pesq.setOnAction ( action );
         menu.getItems ( ).add ( pesq );
         MenuItem sobre = new MenuItem ( "Sobre" );
         sobre.setOnAction ( action );
         menu.getItems ( ).add ( sobre );
         MenuItem sair = new MenuItem ( "Sair" );
         sair.setOnAction ( action );
         menu.getItems ( ).add ( sair );
         menuBar.getMenus ( ).add ( menu );
         ro_ot.prefHeightProperty ( ).bind ( scene.heightProperty ( ) );
         ro_ot.prefWidthProperty ( ).bind ( scene.widthProperty ( ) );
         // personalização do menubar com css
         borderPane.setStyle ( "-fx-font: 10 arial; -fx-base: #00ffff;");
         borderPane.setTop ( menuBar );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////
    private static int Imprime ( ) {
    ct_x.setFont ( Font.font ( "Times New Roman", FontWeight.NORMAL, 20 ) );
        for ( i = 1; i < texto.length; i++ ) {
             str = str + texto [ i ];
             str_1 += i + "\n";
        }
    ct_x.setFill ( Color.BLACK );
         ct_x.fillText ( str, 35, 120 );
         ct_x.setFill ( Color.RED );
         ct_x.fillText ( str_1, 10, 120 );
         root.getChildren ( ).add ( canvas );
        return 0;
    }
    // ///////////////////////////////////////////////////////////////////////
    private static int Pesquisa ( ) {
        ctx.setFont ( Font.font ( "Times New Roman", FontWeight.NORMAL, 20 ) );
        TextInputDialog dialogoNome = new TextInputDialog ( );
        dialogoNome.setTitle ( "Pesquisando palavras" );
        dialogoNome.setHeaderText ( "Digite uma palavra " );
        dialogoNome.setContentText ( "Palavra: " );
        dialogoNome.showAndWait ( ).ifPresent ( v -> pesq = v );
        Alert alert = new Alert ( AlertType.INFORMATION );
        alert.setTitle ( "Atenção" );
        alert.setHeaderText ( null );
        boolean achou = false;
        for ( i = 1; i < texto.length; i++ ) {
             str_6 = str_6 + texto [ i ];
             //toLowerCase() ignora fontes maiúscula e menúscula
             if ( texto [ i ].toLowerCase().contains ( pesq.toLowerCase ( ) ) ){
                  achou = true;
                  oc [ k ] = texto [ i ];
                  k++;
                  str_2 = str_2 + texto [ i ];
             }else{
                  oc [ k ] = "\n";
                  str_2 = str_2 + oc [ k ];
             }
             str_3 += i + "\n";
        }
        str_4 += k;
        if ( k == 1 &&  achou == true ){
             // Coluna, linha, comprimento, altura
             // Apagando uma linha ou partes
             ct_x.clearRect ( 10, 40, 400, 2000 );
             ct_x.setFill ( Color.BLUE );
             ct_x.fillText ( "Resultados das pesquisas", 50, 60 );
             ct_x.setFill ( Color.BLACK );
             ct_x.fillText ( "Uma única linha possui a palavra  ", 35, 90 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( pesq, 310, 90 );
             ct_x.setFill ( Color.BLACK );
             ct_x.fillText ( str_6, 35, 120 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( str_2, 35, 120 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( str_3, 10, 120 );
        }
        else if ( k > 1 && achou == true ) {
             // Coluna, linha, comprimento, altura
             // Apagando uma linha ou partes
             ct_x.clearRect ( 10, 40, 400, 2000 );
             ct_x.setFill ( Color.BLUE );
             ct_x.fillText ( "Resultados das pesquisas", 50, 60 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( str_4, 35, 90 );
             ct_x.setFill ( Color.BLACK );
             ct_x.fillText ( "linhas possuem a palavra  ", 60, 90 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( pesq, 265, 90 );
             ct_x.setFill ( Color.BLACK );
             ct_x.fillText ( str_6, 35, 120 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( str_2, 35, 120 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( str_3, 10, 120 );
        } else {
             ct_x.clearRect ( 10, 40, 400, 60 );
             Toolkit.getDefaultToolkit ( ).beep ( );
             ct_x.setFill ( Color.BLUE );
             ct_x.fillText ( "Resultados das pesquisas", 50, 60 );
             ct_x.setFill ( Color.MAGENTA );
             ct_x.fillText ( "Nenhuma ocorrência da palavra ", 35, 90 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( pesq, 300, 90 );
             ct_x.setFill ( Color.BLACK );
             ct_x.fillText ( str_6, 35, 120 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( str_2, 35, 120 );
             ct_x.setFill ( Color.RED );
             ct_x.fillText ( str_3, 10, 120 );
        }
        return 0;
    }
    // /////////////////////////////////////////////////////////////////
     private static EventHandler < ActionEvent > changeTabPlacement ( ) {
         return new EventHandler < ActionEvent > ( ) {
              public void handle ( ActionEvent event ) {
                   Temp Tem_po = new Temp ( );
                   MenuItem mItem = ( MenuItem ) event.getSource ( );
                   String side = mItem.getText ( );
                   if ( "Sobre".equalsIgnoreCase ( side ) ) {
                        int b = 0;
                        b = 1;
                        Tem_po.Sleep ( 800, b );
                        b = 2;
                        Tem_po.Sleep ( 1800, b );
                        b = 3;
                        Tem_po.Sleep ( 2800, b );
                        b = 4;
                        Tem_po.Sleep ( 3800, b );
                        But_ton_2 ( );
                   } else if ( "Pesq".equalsIgnoreCase ( side ) ) {
                        str = "";
                        str_1 = "";
                        str_2 = "";
                        str_3 = "";
                        str_4 = "";
                        str_6 = "";
                        pesq = "";
                        k = 0;
                        Pesquisa ( );
                   }
                   if ( "Sair".equalsIgnoreCase ( side ) ) {
                        System.exit ( 0 );
                   }
              }
         };
     }
     // /////////////////////////////////////////////////////////////////
     public static int Scrool_Pane_3 ( ) {
         s1.setLayoutX ( 0 );
         s1.setLayoutY ( 60 );
         s1.setPrefSize ( 800, 2000 );
         s1.setPrefHeight ( 360 );
         s1.setContent ( can_vas );
         //personalização do scroll
         s1.setStyle ( "-fx-font-style: normal;"
                            + " -fx-font-weight: bolder;"
                            +  " -fx-font-size: 15px;"
                            +  "-fx-alignment: center;");
         root.getChildren ( ).add ( s1 );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) {
         stage.setTitle ( "PESQUISANDO STRING EM JAVAFX - AVANÇADO II" );
         stage.setScene ( scene );
         //personalização da interface
         root.setStyle (
                   "-fx-font-style: normal;"
                            + " -fx-font-weight: bolder;"
                            +  "-fx-alignment: center;"
                            +  "-fx-background: white;"
                        +  "-fx-base: #00ffff;" );
         stage.setResizable ( false );
         ctx.setStroke ( Color.RED );
         ctx.setFont ( Font.font ( "Times New Roman", FontWeight.NORMAL, 20 ) );
         ctx.strokeText ( "PESQUISANDO STRING EM JAVAFX - AVANÇADO III", 150, 30 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "PESQUISANDO STRING EM JAVAFX - AVANÇADO III", 150, 30 );
         Menu_Bar ( );
         Imprime ( );
         s1.setVisible ( true );
         Scrool_Pane_3 ( );
         borderPane.setPadding ( new Insets ( 1, 0, 10, 1 ) );
         root.getChildren ( ).add ( borderPane );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////
     public static int main ( String args ) {
         Toolkit.getDefaultToolkit ( ).beep ( );
         launch ( args );
         return 0;
     }
}

Nenhum comentário:

Postar um comentário

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