segunda-feira, 19 de fevereiro de 2018

Javafx - de decimal para romanos

Criamos uma classe que é capaz de converter
números decimais em romanos, numa faixa entre
0 e 10000, estes números são gerados por um
contador e inseridos num ArrayList de inteiros.
"Assista o vídeo com o programa em execução".
Sendo o ArrayList todo percorrido pelo for each,
cada elemento dele é convertido de decimal
para romano pela classe DecRoman.
Agora os números romanos são copiados numa
String para que possam ser imprimidos pelo
método setText do TextArea do javafx.
Um estudante de java deve aproveitar este bom
exemplo de conversão de decimal para romano,
sabendo que dificilmente encontrará outro parecido,
Ainda mais fazendo uso de uma janela gráfica javafx.


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


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


Veja abaixo o código do programa:


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.layout.BorderPane;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;
import javafx.event.ActionEvent;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.event.EventHandler;
import javafx.scene.paint.Color;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.concurrent.Task;

class DecRoman {
     public static int decimal, dec_1 = 1,
              dec_2 = 10, dec_3 = 100, dec_4 = 1000;
     public int dec_mal ( int a, int b ) {
         return ( int ) ( ( decimal % a ) / b );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void setNumdecimal ( int decimal ) {
         DecRoman.decimal= decimal;
     }
     // /////////////////////////////////////////////////////////////////////////
     public DecRoman ( int decimal ) {
         DecRoman.decimal = decimal;
     }
     // /////////////////////////////////////////////////////////////////////////
     public String milhar ( ) {
         return "MMMMMMMMMM".substring ( 0, ( int ) ( decimal / dec_4 ) );
     }
     // /////////////////////////////////////////////////////////////////////////
     public String centenas ( ) {
         int num = dec_mal ( dec_4, dec_3 );
         if ( num == 9  ) {
              return "CM";
         }
         if ( num > 4  ) {
              return "DCCC".substring ( 0, num - 4 );
         }
         if ( num == 4  ) {
              return "CD";
         }   
         if ( num > 1  ) {
              return "CCC".substring ( 0, num );
         }
         if ( num == 1  ) {
              return "C";
         }
         return "";   
     }
     // /////////////////////////////////////////////////////////////////////////
     public String dezenas ( ) {
         int num = dec_mal ( dec_3, dec_2 );
         if ( num == 9  ) {
              return "XC";
         }
         if ( num > 4  ) {
              return "LXXX".substring ( 0, num - 4 );
         }
         if ( num == 4  ) {
              return "XL";
         }   
         if ( num > 1  ) {
              return "XXX".substring ( 0, num );
         }
         if ( num == 1  ) {
              return "X";
         }
         return "";   
     }
     // /////////////////////////////////////////////////////////////////////////
     public String unidades ( ) {
         int num = dec_mal ( dec_2, dec_1 );
         if ( num == 9  ) {
              return "IX";
         }
         if ( num > 4  ) {
              return "VIII".substring ( 0, num - 4 );
         }
         if ( num == 4  ) {
              return "IV";
         }   
         if ( num > 1  ) {
              return "III".substring ( 0, num );
         }
         if ( num == 1  ) {
              return "I";
         }
         return "";
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public String toString ( ) {
         return new StringBuilder ( )
         .append ( milhar ( ) )
         .append ( centenas ( ) )
         .append ( dezenas  ( ) )
         .append ( unidades ( ) ).toString ( );       
     }
}
// /////////////////////////////////////////////////////////////////////////////
public class PROJETO extends Application {
     static String str_2        = "MUITO OBRIGADO";
     static String str_1        = "Por: Samuel Lima";
     static Button btn_1        = new Button ( "Inf" );
     static Button btn_2        = new Button ( "Cls" );
     static Text t_1            = new Text ( );
     static Text t_2            = new Text ( );
     static Text t_3            = new Text ( );
     static Canvas canvas       = new Canvas (  );
     static TextArea    text    = new TextArea ( ); 
     static VBox vbox           = new VBox ( );
     static GridPane grid       = new GridPane ( );
     static MenuBar menuBar     = new MenuBar ( );
     static Pane ro_ot          = new Pane ( );
     static BorderPane root     = new BorderPane ( );
     static Scene scene         = new Scene ( vbox, 700, 500 );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
///////////////////////////////////////////////////////////////////////////
     public static void TextString ( ) {
         t_1.setFont ( Font.font ( null, FontWeight.BOLD, 15 ) );
         t_2.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 25 ) );
         t_3.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 25 ) );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static Node But_ton_1 ( ) {
         btn_1.setPrefWidth ( 50 );// Largura do botão
         btn_1.setLayoutX ( 29 );// Posição do botão coluna
         btn_1.setPrefHeight ( 20 );// altura do botão
         btn_1.setLayoutY ( 60 );// //Posição do botão linha
         btn_1.setOnAction ( new EventHandler < ActionEvent > ( ) {
              @Override
              public void handle ( ActionEvent event ) {
                   int b = 0;
                   b = 1;
                   Sleep ( 1800, b );
                   b = 2;
                   Sleep ( 2800, b );
              }
         } );
         ro_ot.getChildren ( ).add ( btn_1 );
         return btn_1;
     }
////////////////////////////////////////////////////////////////////////////
     private static Node But_ton_2 ( ) {
         btn_2 .setPrefWidth ( 50 );// Largura do botão
         btn_2.setLayoutX ( 597 );// Posição do botão coluna
         btn_2 .setPrefHeight ( 20 );// altura do botão
         btn_2 .setLayoutY ( 60 );// //Posição do botão linha
         btn_2.setOnAction ( new EventHandler < ActionEvent > ( ) {
              @Override
              public void handle ( ActionEvent event ) {
                   // Coluna, linha, comprimento, altura
                   // Apagando uma linha ou partes
                   ctx.clearRect ( 80, 120, 180, 80 );
                   t_2.setVisible( false );
                   t_3.setVisible( false );
                   btn_1.setVisible ( false );
                   btn_2.setVisible ( false );
              }
         } );
         ro_ot.getChildren ( ).add ( btn_2 );
         return btn_2;
     }
     // /////////////////////////////////////////////////////////////////////////
     // Chamando uma função depois de um certo tempo
     public static void Tempo_2 ( ) {
         t_3.setFont ( Font.font ( null, FontWeight.BOLD, 15 ) );
         t_3.setX ( 270 );
         t_3.setY ( 130 );
         t_3.setFill ( Color.BLUE );
         t_3.setText ( str_2 );
         root.getChildren ( ).add ( t_3 );
     }
     public static void Tempo_1 ( ) {
         t_2.setFont ( Font.font ( null, FontWeight.BOLD, 15 ) );
         t_2.setX ( 270 );
         t_2.setY ( 110 );
         t_2.setFill ( Color.RED );
         t_2.setText ( str_1 );
         root.getChildren ( ).add ( t_2 );
     }
     public static 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 ( );
         } );
         new Thread ( close ).start ( );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     public static int Menu_Bar ( ) {
         EventHandler < ActionEvent > action = changeTabPlacement ( );
         Menu menu = new Menu ( "Arq" );
         MenuItem top = new MenuItem ( "Exit" );
         top.setOnAction ( action );
         menu.getItems ( ).add ( top );
         MenuItem bottom = new MenuItem ( "Inf" );
         bottom.setOnAction ( action );
         menu.getItems ( ).add ( bottom );
         menuBar.getMenus ( ).add ( menu );
         root.setTop ( menuBar );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     private static EventHandler < ActionEvent > changeTabPlacement ( ) {
         return new EventHandler < ActionEvent > ( ) {
              public void handle ( ActionEvent event ) {
                   MenuItem mItem = ( MenuItem ) event.getSource ( );
                   String side = mItem.getText ( );
                   if ( "Exit".equalsIgnoreCase ( side ) ) {
                        System.exit ( 0 );
                   } else if ( "Inf".equalsIgnoreCase ( side ) ) {
                        But_ton_1 ( );
                        But_ton_2 ( );
                   }
              }
         };
     }
     // /////////////////////////////////////////////////////////////////////////
     public static int Text_Area ( ) {
         List < Integer > arr = new ArrayList <> ( Arrays.asList ( ) );
         TextString ( );
         t_1.setX ( 160 );
         t_1.setY ( 50 );
         t_1.setFill ( Color.RED );
         t_1.setText ( "JAVAFX - DE DECIMAL PARA ROMANOS" );
         String str = "";
         int i;
         // Preenchendo o ArrayList com laço for
         for ( i = 0; i < 10000; i++ ) {
              arr.add ( i );
         }
         // for each percorre todos elementos do ArrayList 
         // e passa como parâmetro para a classe DecRoman
         for ( int num : arr ) {
              // String str recebe a cópia de todos elementos
              // já convertidos de decimal para romanos
              str += new DecRoman ( num ) + "\t\t";
         } 
         // Posiciona o TextArea na janela na horizontal
         grid.setHgap ( 4 );
         // Posiciona o TextArea na janela na vertical
         grid.setVgap ( 4 ); 
         // Ajusta o total de linhas do TextArea
         text.setPrefRowCount ( 100 );
         // Ajusta o total de colunas do TextArea
         text.setPrefColumnCount ( 50 );
         // Permite que o texto continue abaixo
         // iniciando um scroll quando
         // atinge o tamanho do TextArea
         // O Scroll é chamado quando se atinge o total
         // de linhas estabelecido por setPrefRowCount ( 50 );
         text.setWrapText ( true );
         // Largura máxima do TextArea
         text.setPrefWidth ( 680 );
         // Comprimento máximo do TextArea
         text.setPrefHeight ( 300 );
         // Adiciona o TextArea na vertical e horizontal
         grid.add ( text, 4, 10 );
         // Inicia um texto opcionalmente no TextArea
         // No nosso caso estamos iniciando a string
         // carregada com os números romanos que
         // foram convertidos dos inteiros
         text.setText ( str );
         // Dando alguns efeitos nos textos do Textarea com css
         text.setStyle ( "-fx-font-style: italic;"
                   + " -fx-font-weight: normal;"
                   +  " -fx-font-size: 15px;"
                   +  "-fx-alignment: center;"
                   + "-fx-text-fill: black" );
         root.getChildren ( ).addAll ( grid, t_1 );
         return 0;
     }
////////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) throws Exception {
         stage.setTitle ( "JAVAFX - DE DECIMAL PARA ROMANOS" );
         Menu_Bar ( );
         // Criando moldura e dando efeitos com css
         vbox.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 18;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: blue;" );
         Text_Area ( );
         vbox.getChildren ( ).addAll ( canvas, root, ro_ot, grid );
         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.