Skip to content

Instantly share code, notes, and snippets.

@joaquinmartinezrod
Last active April 8, 2021 23:40
Show Gist options
  • Save joaquinmartinezrod/05d453e3ae659bbb9cf3f0e033f2041b to your computer and use it in GitHub Desktop.
Save joaquinmartinezrod/05d453e3ae659bbb9cf3f0e033f2041b to your computer and use it in GitHub Desktop.
Simple calculator on JavaFx.
package Componentes;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Calculator extends Stage {
private Button[] arrayBtn;
private TextField txtResultado;
private Scene scene;
private VBox vBox;
private GridPane gridPane;
private String [] stringOperacion = {"AC","7","4","1",".","√","8","5","2","0","x^2","9","6","3","=","/","+","-","*","+/-"};
public Calculator(){
CrearGUI();
}
private void CrearGUI() {
vBox = new VBox();
gridPane = new GridPane();
txtResultado = new TextField();
txtResultado.setText("");
txtResultado.setMinSize(400,100);
txtResultado.setAlignment(Pos.CENTER_RIGHT);
txtResultado.setEditable(false);
arrayBtn = new Button[20];
int x = 0;
for (int i = 0; i < 4; i++){
for (int j = 0; j < 5; j++) {
arrayBtn[x] = new Button(stringOperacion[x]);
arrayBtn[x].setPrefSize(100,100);
final int f=x;
arrayBtn[f].setOnAction(event -> Evento(stringOperacion[f]));
gridPane.add(arrayBtn[x],i,j);
x++;
}
}
vBox.getChildren().addAll(txtResultado,gridPane);
scene = new Scene(vBox,400,600);
scene.getStylesheets().add("Estilos/calculadora.css");
this.setScene(scene);
this.setTitle("Calculadora");
this.show();
this.setResizable(false);
}
public boolean error = false;
public char op;
public Double calculate;
public boolean finalOp = true;
public void Evento(String boton){
switch (boton){
case "AC":
txtResultado.setText("");
calculate = 0.0;
error = false;
finalOp = true;
break;
case "+":
if(finalOp&&!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
calculate = Double.parseDouble(txtResultado.getText());
txtResultado.setText("");
op = '+';
finalOp = false;
}
else{
op = '+';
txtResultado.setText("");
}
break;
case "-":
if(finalOp&&!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
calculate = Double.parseDouble(txtResultado.getText());
txtResultado.setText("");
op = '-';
finalOp = false;
}
else{
op = '-';
txtResultado.setText("");
}
break;
case "/":
if(finalOp&&!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
calculate = Double.parseDouble(txtResultado.getText());
txtResultado.setText("");
op = '/';
finalOp = false;
}
else{
op = '/';
txtResultado.setText("");
}
break;
case "*":
if(finalOp&&!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
calculate = Double.parseDouble(txtResultado.getText());
txtResultado.setText("");
op = '*';
finalOp = false;
}
else{
op = '*';
txtResultado.setText("");
}
break;
case ".":
if(!txtResultado.getText().contains("."))
txtResultado.appendText(".");
break;
case "√":
if(!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
double r = Double.parseDouble(txtResultado.getText());
if(r>0){
txtResultado.setText(String.valueOf(Math.sqrt(r)));
}
else{
txtResultado.setText("MATH ERROR");
error = true;
}
}
else
finalOp = false;
break;
case "x^2":
if(!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
double w = Double.parseDouble(txtResultado.getText());
txtResultado.setText(""+(w*w));
}
else
finalOp = false;
break;
case "+/-":
if(!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
double q = Double.parseDouble(txtResultado.getText());
q = q*-1;
txtResultado.setText(""+q);
}
else
finalOp = false;
break;
case "=":
if(!"".equals(txtResultado.getText())&&!".".equals(txtResultado.getText())){
switch(op){
case '+':
txtResultado.setText(""+(calculate+Double.parseDouble(txtResultado.getText())));
break;
case '-':
txtResultado.setText(""+(calculate-Double.parseDouble(txtResultado.getText())));
break;
case '*':
txtResultado.setText(""+(calculate*Double.parseDouble(txtResultado.getText())));
break;
case '/':
txtResultado.setText(""+(calculate/Double.parseDouble(txtResultado.getText())));
break;
}
}
finalOp = true;
break;
default:
if(!error)
txtResultado.appendText(boton);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment