sexta-feira, 19 de janeiro de 2018

Javafx - marcando ocorrências aleatórias

Neste exemplo estamos preenchendo
um Array bidimensional do tipo primitivo
int com valores aleatórios na faixa de 1 a 100.
Feito isto introduzimos um número na entrada
de um textfield, que passa se o número existe
no array, e se existe o programa marca todas
as ocorrências daquele número no próprio array
em cor diferente dos demais elementos.


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


 Veja abaixo o código do programa:



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.awt.Toolkit;
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;
     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 ( int Vet [ ] [ ] ) {
         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 ( Vet );
                        }
                   }
              }
         } );
         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 ( int Vet [ ] [ ] ) {
         int i, j = 0;
         StringBuilder str = 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 ) );
         for ( i = 0; i < TAM; i++ ) {
              str.append ( "\n" );
              for ( j = 0; j < TAM; j++ ) {            
                   str.append ( "\t" );
                   if ( Vet [ i ] [ j ] == pesq ) {
                        if ( Vet [ i ] [ j ] >= 0 && Vet [ i ] [ j ] <= 9 )
                            str.append ( "0" );
                    Toolkit.getDefaultToolkit ( ).beep ( );
                        str.append ( Vet [ i ] [ j ] );
                   }
              }
         }
         if ( x == true ) {
              ctx.setFill ( Color.BLACK );
              ctx.fillText ( " " + str, 138, 100 );
         }
     }
     // ////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         stage.setTitle ( "JAVAFX - MARCANDO OCORRÊNCIAS ALEATÓRIAS" );
         // 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 ( "JAVAFX - MARCANDO OCORRÊNCIAS ALEATÓRIAS", 130, 50 );
         int [ ] [ ] Vet = new int [ TAM  ] [ TAM ];  
         int i, j = 0;
         StringBuilder str1 = new StringBuilder ( );
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 14 ) );
         for ( i = 0; i < TAM; i++ ) {
              str1.append ( "\n" );
              for ( j = 0; j < TAM; j++ ) {
                   Vet [ i ] [ j ] = ( int ) ( Math.random ( ) * 100 );
                   if ( Vet [ i ] [ j ] >= 0 && Vet [ i ] [ j ] <= 9 )
                        str1.append ( "0" );
                   str1.append ( Vet [ i ] [ j ] + "\t" );
              }
         }
         if ( x == false ) {
              ctx.setFill ( Color.MAGENTA );
              ctx.fillText ( " " + str1, 170, 100 );
              x = true;
              pesq = 0;
         }
         Arr ( Vet );
         Pesquisa ( Vet );
         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.