Ir ao conteúdo
  • Cadastre-se
Main.cpp

Java Javafx - de decimal para romanos II

Recommended Posts

Há poucos dias passados postei por aqui
um link de um programa que havíamos criado
para converter de decimal para romanos,
e o programa foi bem recebido pela comunidade.
Mas para iniciantes o código se tornou complicado,
a classe criada é difícil de se entender, então usando
nossa habilidade, editei o programa:
"Javafx - de decimal para cardinais",
criado por mim mesmo e transformei num
conversor de decimal para romanos,
e ficou bem mais simples de entender.
O textfielde está configurado para receber
números menores que 10000, e caracteres e strings
ele jamais aceita, e esta cadeia de ifs usados
de propósito por mim podem ser substituída de uma
forma elegante pelo operador ternário do java,
mas os iniciantes não o entendem tão rápido,
então, preferi fazê-lo assim, aproveitem
o código, para estudos, copiem cole e compile.

 

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

 

decrom.PNG.0629fe74b4d5ea50021c7510d1c1382f.PNG

 

Veja abaixo o código do programa:

 

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.Pane;
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 {
	static StringBuilder Card = new StringBuilder ( );
	static Pane root = new Pane ( );
	static Canvas canvas = new Canvas ( 620, 350 );
	static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
	static Scene scene = new Scene ( root, 620, 350, Color.WHITE );
	static TextField textField_1 = new TextField ( );
	static HBox hbox_1 = new HBox ( textField_1 );
	public static int n = 0, un, de, ce, mi;
	////////////////////////////////////////////////////////////////////////////    
	public static void Informe ( ) {
		ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
		ctx.setFill ( Color.RED );
		ctx.fillText ( "Por: ", 250, 305 );
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "Samuel Lima", 280, 305 );
		ctx.setFill ( Color.BLACK );
		ctx.fillText ( "MUITO OBRIGADO", 250, 320 );
	}
	// /////////////////////////////////////////////////////////////////////////
	public static void FuncUnidade ( ) {
		if ( un == 1 ) {      
			Card.append ( "I" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 2 ) {
			Card.append ( "II" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 3 ) {
			Card.append ( "III" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 4 ) {
			Card.append ( "IV" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 5 ) {
			Card.append ( "V" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 6 ) {
			Card.append ( "VI" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 7 ) {
			Card.append ( "VII" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 8 ) {
			Card.append ( "VIII" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( un == 9 ) {
			Card.append ( "IX" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
	}
	///////////////////////////////////////////////////////////////////////////   
	public static void Cardinais ( String args ) {
		ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
		// Coluna, linha, comprimento, altura
		ctx.clearRect ( 170, 70, 400, 250 );
		Card = new StringBuilder ( );
		mi = ( n / 1000 );
		//separa centenas
		ce = ( ( n - ( mi * 1000 ) ) / 100 );
		//separa dezenas
		de = ( ( n - ( ( mi * 1000 ) + ( ce * 100 ) ) ) / 10 );
		//separa unidades
		un = ( n - ( ( mi * 1000 ) + ( ce * 100 ) + ( de * 10 ) ) );
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "voce digitou: ", 180, 80 );
		ctx.setFill ( Color.RED );
		ctx.fillText ( mi + " " + ce + " " +  de + " " +  un + "", 270, 80 );
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "Separando por grupo temos: ", 180, 110 );
		mi = mi * 1000;
		ce = ce * 100;
		de = de * 10;
		un = un * 1;
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "Milhar", 180, 140 );
		ctx.setFill ( Color.RED );
		ctx.fillText ( mi / 1000 + " ", 260, 140 );
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "Centenas", 180, 160 );
		ctx.setFill ( Color.RED );
		ctx.fillText ( ce / 100 + " ", 260, 160 );
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "Dezenas", 180, 180 );
		ctx.setFill ( Color.RED );
		ctx.fillText ( de / 10 + " ", 260, 180 );
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "Unidades", 180, 200 );
		ctx.setFill ( Color.RED );
		ctx.fillText ( un / 1 + " ", 260, 200 );
		ctx.setFill ( Color.BLUE );
		ctx.fillText ( "Em romanos: ", 180, 230 );   
		Informe ( );
		ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 16 ) );
		ctx.setFill ( Color.BLACK );
		if ( mi == 9000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MMMMMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MMMMMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 8000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MMMMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MMMMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 7000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MMMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MMMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 6000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MMMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 5000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MMMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 4000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MMMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 3000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MMM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 2000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "MM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {
				Card.append ( "MM" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( mi == 1000 ) {
			if ( ce == 0 && de == 0 && un == 0 ) {
				Card.append ( "M" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else {          
				Card.append ( "M" );
				ctx.fillText ( " " + Card, 180, 250 );
			}
		}
		if ( ce == 900 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "CM" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "CM" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 800 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "DCCC" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "DCCC" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 700 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "DCC" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "DCC" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 600 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "DC" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "DC" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 500 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "D" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "D" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 400 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "CD" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "CD" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 300 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "CCC" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "CCC" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 200 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "CC" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "CC" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( ce == 100 ) {
			if ( de == 0 && un == 0 ) {
				Card.append ( "C" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "C" );
			ctx.fillText ( " " + Card, 180, 250 );
		}
		if ( de == 20 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "XX" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "XX" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( de == 30 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "XXX" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "XXX" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( de == 40 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "XL" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "XL" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( de == 50 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "L" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "L" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( de == 60 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "LX" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "LX" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( de == 70 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "LXX" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "LXX" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( de == 80 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "LXXX" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "LXXX" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( de == 90 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "XC" );
				ctx.fillText ( " " + Card, 180, 250 );
			} else
				Card.append ( "XC" );
			ctx.fillText ( " " + Card, 180, 250 );
			FuncUnidade ( );
			main ( args );
		}
		if ( un == 1 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "I" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XI" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 2 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "II" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XII" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 3 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "III" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XIII" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 4 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "IV" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XIV" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 5 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "V" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XV" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 6 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "VI" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XVI" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 7 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "VII" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XVII" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 8 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "VIII    " );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XVIII " );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( un == 9 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "IX" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			} else
				Card.append ( "XIX" );
			ctx.fillText ( " " + Card, 180, 250 );
			main ( args );
		}
		if ( de == 10 ) {
			if ( de == 0 || un == 0 ) {
				Card.append ( "X" );
				ctx.fillText ( " " + Card, 180, 250 );
				main ( args );
			}
		}
	}
	// /////////////////////////////////////////////////////////////////////////
	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 ( String args ) {
		hbox_1.setPadding ( new Insets ( 290, 0, 10, 170 ) );
		// Abaixo ajustamos o total de colunas do TextField
		textField_1.setPrefColumnCount ( 4 );
		textField_1.setPromptText ( "pesq" );
		ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 12 ) );
		ctx.setFill ( Color.BLACK );
		ctx.fillText ( "Número", 170, 280 );
		textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
			@Override
			public void handle ( KeyEvent event ) {
				limitTextField ( textField_1, 4 );
				if ( event.getCode ( ) == KeyCode.ENTER ) {
					ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
					ctx.setFill ( Color.BLUE );
					// convertendo string para inteiro
					n = Integer.parseInt ( textField_1.getText ( ) );
					if ( Integer.parseInt ( textField_1.getText ( ) ) >= 0
							&& Integer.parseInt ( textField_1.getText ( ) ) < 10000 ) {
						Cardinais ( args );
					}
				}
			}
		} );
		root.getChildren ( ).add ( hbox_1 );
		return 0;
	}
	// ////////////////////////////////////////////////////////////////////////
	public void start ( Stage stage ) {
		String args = "";
		ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
		stage.setTitle ( "JAVAFX - DE DECIMAL PARA ROMANOS II" );
		//Criando moldura e dando efeitos
		root.setStyle ( "-fx-padding: 5;"
				+ "-fx-border-style: solid inside;"
				+ "-fx-border-width: 15;"
				+ "-fx-border-insets: 5;"
				+ "-fx-border-radius: 5;"
				+ "-fx-border-color: black;"
				+ "-fx-background: pink;");
		ctx.setFill ( Color.RED );
		ctx.fillText ( "JAVAFX - DE DECIMAL PARA ROMANOS II", 180, 50 );
		ctx.setFill ( Color.BLACK );
		ctx.fillText ( "Digite um número decimal", 180, 80 );

		Pesquisa ( args  );
		stage.setScene ( scene );
		root.getChildren ( ).addAll ( canvas );
		stage.show ( );
	}
	// /////////////////////////////////////////////////////////////////////////
	public static void main ( String args ) {
		launch ( args );
	}
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×