sábado, 20 de janeiro de 2018

Javafx - removendo elementos com Iterator

Quando começamos nossa formação básica de java
usávamos muito o Iterator para percorrer uma lista,
mas engana-se quem acha que o Iterator perdeu o seu
uso com a chegada do foreach do java 5 em diante.
Os dois métodos mais importantes e usados do Interator
são: hasNext() ( retorna um boolean ), enquanto existir um
objeto a ser percorrido, e next(), retorna o próximo objeto
até que todos terminem de ser percorridos.
Neste programa geramos 100 números de forma aleatória
através do método Math.random ( ) e inserimos numa lista
de ArrayList e imprimimos.
Dois textfields sendo o primeiro chamando o segundo,
serve como entrada de dados para o teclado, nestes textfields
colocamos os parâmetros de início e fim que são usados
pelo método remove do Iterator, assim removeremos com
muita facilidade a quantidade de elementos dentro desta
faixa de valores informado nos textfields.

Veja abaixo imagens do programa em execução:



Veja abaixo o código do programa:


import java.util.ArrayList;
import java.util.Iterator;
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;
class Newclass {
     static int 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 ( "Sair" );
     public void Informe ( ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "Por: ", 200, 242 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Samuel Lima", 240, 242 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "sa_sp10@hotmail.com", 200, 260 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " MUITO OBRIGADO", 240, 290 );
     }
///////////////////////////////////////////////////////////////////////////
     public static Node But_ton_2 ( Stage stage ) {
         btn_1.setPrefWidth ( 80 );// 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 remove ( ArrayList < Integer > arr ){
         int i, tot = 0;   
         String str1 = " ";    
         Iterator < Integer > iterator = arr.iterator ( );     
         while ( iterator.hasNext ( ) ) {
              Integer temp = iterator.next ( );            
              //Removendo os elementos a partir de PROJETO.inicio
              //Até PROJETO.fim, preenchidas pelos textfields
              if ( temp < PROJETO.inicio || temp > PROJETO.fim ) {
                   iterator.remove ( );
              }
         }
         tot = PROJETO.TAM - 1 - arr.size ( );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Removemos ", 210, 80 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " " + tot, 300, 80 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "elementos da lista ", 330, 80 );  
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Abaixo os ", 210, 110 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " " + arr.size ( ), 280, 110 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "que restaram ", 310, 110 );
         for ( i = 0; i < arr.size ( ); i++ ) {
              if ( i % 10 == 0 ) {
                   str1 += "\n";
              }
              if ( arr.get ( i ) >= 0 && arr.get ( i ) <= 9 ){
                   str1 +=  "0";
              }
              str1 += arr.get ( i ) + "   ";
         }
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( str1, 180, 130 );
     }
     // ////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage, ArrayList < Integer > arr ) {
         stage.setTitle ( "ITERATOR - REMOVENDO VALORES NUMA LISTA" );
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "ITERATOR - REMOVENDO VALORES NUMA LISTA", 140, 50 );
         // Criando moldura e dando efeitos
         ro_ot.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 12;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: blue;" );
         But_ton_2 ( stage );
         remove ( arr );
         Informe ( );
         stage.setScene ( sce_ne );
         ro_ot.getChildren ( ).addAll ( canvas, btn_1 );
         stage.show ( );
     }
}
////////////////////////////////////////////////////////////////////////////////
public class PROJETO extends Application {
     public static int inicio, fim, TAM = 101;
     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 ( "ENTER" );
     static Newclass nova = new Newclass ( );
     static TextField textField_1 = new TextField ( );
     static TextField textField_2 = new TextField ( );
     static HBox hbox_1 = new HBox ( textField_1 );
     static HBox hbox_2 = new HBox ( textField_2 );
     // ////////////////////////////////////////////////////////////////////////
     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 remove_1 ( Stage stage, ArrayList < Integer > arr ) {
         hbox_1.setPadding ( new Insets ( 290, 0, 10, 180 ) );
         // Abaixo ajustamos o total de colunas do TextField
         textField_1.setPrefColumnCount ( 2 );
         textField_1.setPromptText ( "ini" );
         ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 12 ) );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Início", 180, 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
                        inicio = Integer.parseInt ( textField_1.getText ( ) );
                        if ( Integer.parseInt ( textField_1.getText ( ) ) >= 0
                                 && Integer.parseInt ( textField_1.getText ( ) ) < 100 ) {
                            remove_2 ( stage, arr );
                        }
                   }
              }
         } );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     public static int remove_2 ( Stage stage, ArrayList < Integer > arr ) {
         hbox_2.setPadding ( new Insets ( 290, 0, 10, 410 ) );
         // Abaixo ajustamos o total de colunas do TextField
         textField_2.setPrefColumnCount ( 2 );
         textField_2.setPromptText ( "fim" );
         ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 12 ) );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Fim", 420, 280 );
         textField_2.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
              @Override
              public void handle ( KeyEvent event ) {
                   limitTextField ( textField_2, 2 );
                   if ( event.getCode ( ) == KeyCode.ENTER ) {
                        ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
                        ctx.setFill ( Color.BLUE );
                        // convertendo string para inteiro
                        fim = Integer.parseInt ( textField_2.getText ( ) );
                        if ( Integer.parseInt ( textField_2.getText ( ) ) >= 0
                                 && Integer.parseInt ( textField_2.getText ( ) ) < 100 ) {
                            nova.start ( stage, arr );
                        }
                   }
              }
         } );
         ro_ot.getChildren ( ).add ( hbox_2 );
         return 0;
     }
     // ////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         stage.setTitle ( "ITERATOR - REMOVENDO VALORES NUMA LISTA" );
         // Criando moldura e dando efeitos
         ro_ot.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 12;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: green;" );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "ITERATOR - REMOVENDO VALORES NUMA LISTA", 140, 50 );
         // Declarando ArrayList com valor pré-determinado
         ArrayList < Integer > arr = new ArrayList < > ( 100 );
         int i;
         String str = " ";
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Abaixo os ", 190, 80 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " " + 100, 260, 80 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "elementos gerados", 300, 80 );
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 14 ) );
         // Preenchendo o ArrayList com laço for
         for ( i = 1; i < TAM; i++ ) {
              arr.add ( ( int ) ( Math.random ( ) * TAM - 1 ) );
         }
         for ( i = 0; i < arr.size ( ); i++ ) {
              if ( i % 10 == 0 ) {
                   str += "\n";
              }
              if ( arr.get ( i ) >= 0 && arr.get ( i ) <= 9 ){
                   str +=  "0";
              }
              str += arr.get ( i ) + "   ";
         }
         ctx.setFill ( Color.RED );
         ctx.fillText ( str, 180, 100 );
         //Textfiel_1
         remove_1 ( stage, arr );
         ro_ot.getChildren ( ).addAll ( canvas, hbox_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.