quarta-feira, 17 de janeiro de 2018

Javafx - pesquisando inteiros e marcando as ocorrências

Mesmo não tendo muito tempo para programar
resolvi criar este programa em javafx,
que no final me surpreendeu os resultados,
cumprindo fielmente o propósito para o qual
foi programado.
Um ArrayList é carregado com os 100 primeiros
números naturais, e em seguida estes números são
descarregados num array bidimensional de 

inteiros previamente declarado para este fim.
No campo de pesquisa temos um textfield que
trava o seu uso em parâmetros rígidos e adequados
ao Array, não é permitido digitar mais de dois
dígitos, como também não se permite números acima
de 99, muito menos caracteres são aceitos na entrada
deste textfielde que também só aceita duas colunas
para os dígitos.
Se um número pesquisado pertence ao Array, ele é
com certeza marcado no próprio Array, numa cor
destacada da cor dos demais números pertencentes.
Sem querer acrescentar mais textos no tópico,
lhe convido agora mesmo a testar meu programa
que foi criado especialmente para os admiradores de javafx.


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


Veja abaixo o código do programa:


import java.awt.Toolkit;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.geometry.Insets;
import javafx.scene.layout.HBox;
import javafx.scene.input.KeyEvent;
import java.util.function.UnaryOperator;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
////////////////////////////////////////////////////////////////////////////////
public class PROJETO extends Application {
     public static int TAM = 10, pesq = 100;
     static Canvas canvas = new Canvas ( 620, 350 );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     static Pane ro_ot = new Pane ( );
     static Scene sce_ne = new Scene ( ro_ot, 620, 350 );
     static Button btn_1 = new Button ( "FECHAR" );
     static TextField textField_1 = new TextField ( );
     static HBox hbox_1 = new HBox ( textField_1 );
     static Boolean x = false;
     // ////////////////////////////////////////////////////////////////////////
     public static void limitTextField ( TextField textField, int limit ) {
         UnaryOperator < Change > textLimitFilter = change -> {
              if ( change.isContentChange ( ) ) {
                   int newLength = change.getControlNewText ( ).length ( );
                   if ( newLength > limit ) {
                        String trimmedText = change.getControlNewText ( )
                                 .substring ( 0, limit );
                        change.setText ( trimmedText );
                        int oldLength = change.getControlText ( ).length ( );
                        change.setRange ( 0, oldLength );
                   }
              }
              return change;
         };
         textField.setTextFormatter ( new TextFormatter < Object > (
                   textLimitFilter ) );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static int Pesquisa ( ) {
         hbox_1.setPadding ( new Insets ( 290, 0, 10, 170 ) );
         // Abaixo ajustamos o total de colunas do TextField
         textField_1.setPrefColumnCount ( 2 );
         textField_1.setPromptText ( "pesq" );
         ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 12 ) );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Pesquisa", 170, 280 );
         textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
              @Override
              public void handle ( KeyEvent event ) {
                   limitTextField ( textField_1, 2 );
                   if ( event.getCode ( ) == KeyCode.ENTER ) {
                        ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
                        ctx.setFill ( Color.BLUE );
                        // convertendo string para inteiro
                        pesq = Integer.parseInt ( textField_1.getText ( ) );
                        if ( Integer.parseInt ( textField_1.getText ( ) ) >= 0
                                 && Integer.parseInt ( textField_1.getText ( ) ) < 100 ) {
                            Arr ( );
                        }
                   }
              }
         } );
         ro_ot.getChildren ( ).add ( hbox_1 );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     public static Node But_ton_3 ( ) {
         btn_1.setPrefWidth ( 100 );// Largura do botão
         btn_1.setLayoutX ( 267 );// Posição do botão coluna
         btn_1.setPrefHeight ( 20 );// altura do botão
         btn_1.setLayoutY ( 300 );// //Posição do botão linha
         btn_1.setStyle ( "-fx-padding: 1;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 2;" + "-fx-border-insets: 1;"
                   + "-fx-border-radius: 1;" + "-fx-border-color: blue;"
                   + "-fx-font-style: italic;" + "-fx-font-family: Consolas;" );
         btn_1.setOnKeyPressed ( e -> {
              if ( e.getCode ( ) == KeyCode.ENTER ) {
                   System.exit ( 0 );
              }
         } );
         return btn_1;
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void Arr ( ) {
         // Declarando abaixo o ArrayList
         ArrayList < Integer > arrlist = new ArrayList < Integer > ( );
         int a = 0, l = 0, i, j = 0;
         StringBuilder str = new StringBuilder ( );
         StringBuilder str1 = new StringBuilder ( );
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Imprimindo abaixo o array de inteiros", 190, 80 );
         ctx.setFont ( Font.font ( "Arial", FontWeight.BOLD, 14 ) );
         ctx.setFill ( Color.BLACK );
         // Preenchendo o ArrayList com laço for
         for ( i = 0; i < 101; i++ ) {
              arrlist.add ( i );
         }
         // Iniciando o processo de conversão
         int [ ] [ ] Vet = new int [ arrlist.size ( ) ] [ TAM * TAM ];
         for ( i = 0; i < TAM; i++ ) {
              for ( j = 0; j < TAM; j++ ) {
                   int y = TAM * i;
                   Vet [ i ] [ j ] = arrlist.get ( y + j );
                   if ( Vet [ i ] [ j ] % TAM == 0 )
                        str.append ( "\n" );
                   str.append ( "\t" );
                   if ( Vet [ i ] [ j ] == pesq ) {
                        if ( Vet [ i ] [ j ] >= 0 && Vet [ i ] [ j ] <= 9 )
                            str.append ( "0" );
                        str.append ( Vet [ i ] [ j ] + "\t" );
                   }
              }
         }
         if ( x == true ) {
              ctx.setFill ( Color.BLACK );
              ctx.fillText ( " " + str, 140, 100 );
         }
         // /////////////////////////////////////////////////////////////////////
         for ( i = 0; i < TAM; i++ ) {
              for ( j = 0; j < TAM; j++ ) {
                   int y = TAM * i;
                   // Os valores do ArrayList são copiados
                   // nas linhas e colunas do Array bidimensional
                   Vet [ i ] [ j ] = arrlist.get ( y + j );
                   if ( Vet [ i ] [ j ] % TAM == 0 )
                        str1.append ( "\n" );
                   if ( Vet [ i ] [ j ] >= 0 && Vet [ i ] [ j ] <= 9 )
                        str1.append ( "0" );
                   str1.append ( Vet [ i ] [ j ] + "\t" );
                   if ( Vet [ i ] [ j ] == pesq ) {
                        Toolkit.getDefaultToolkit ( ).beep ( );
                        l = pesq * 3 + i + 1;
                        a = str1.length ( );
                        str1.delete ( l, a - 1 );
                   }
              }
         }
         if ( x == false ) {
              ctx.setFill ( Color.MAGENTA );
              ctx.fillText ( " " + str1, 170, 100 );
              x = true;
              l = 0;
              pesq = 0;
         }
     }
     // ////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         stage.setTitle ( "JAVAFX - PESQUISANDO INTEIROS E MARCANDO AS OCORRÊNCIAS" );
         // Criando moldura e dando efeitos
         ro_ot.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 18;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: red;" );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "PESQUISANDO INTEIROS E MARCANDO AS OCORRÊNCIAS", 100, 50 );
         Arr ( );
         Pesquisa ( );
         But_ton_3 ( );
         ro_ot.getChildren ( ).addAll ( canvas, btn_1 );
         stage.setScene ( sce_ne );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         Application.launch ( args );
     }
}


Nenhum comentário:

Postar um comentário

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