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:
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 );
}
}