网格布局创建简易计算器
public class CalculatorDemo extends Application {
private double number1 = 0;
private String operator = "";
private boolean start = true;
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Calculator");
//创建网格布局
GridPane gridPane = new GridPane();
gridPane.setHgap(10); //设置水平间距
gridPane.setVgap(10); //设置垂直间距
gridPane.setAlignment(Pos.CENTER);
//创建场景
Scene scene = new Scene(gridPane,300,300);
//创建文本输入框
TextField display = new TextField();
display.setPrefHeight(30);//设置高度
//添加到网格布局
gridPane.add(display, 0, 0, 4, 1);
//创建按钮
Button btn1 = new Button("1");
btn1.setPrefWidth(30);
btn1.setPrefHeight(30);
Button btn2 = new Button("2");
btn2.setPrefWidth(30);
btn2.setPrefHeight(30);
Button btn3 = new Button("3");
btn3.setPrefWidth(30);
btn3.setPrefHeight(30);
Button btn4 = new Button("4");
btn4.setPrefWidth(30);
btn4.setPrefHeight(30);
Button btn5 = new Button("5");
btn5.setPrefWidth(30);
btn5.setPrefHeight(30);
Button btn6 = new Button("6");
btn6.setPrefWidth(30);
btn6.setPrefHeight(30);
Button btn7 = new Button("7");
btn7.setPrefWidth(30);
btn7.setPrefHeight(30);
Button btn8 = new Button("8");
btn8.setPrefWidth(30);
btn8.setPrefHeight(30);
Button btn9 = new Button("9");
btn9.setPrefWidth(30);
btn9.setPrefHeight(30);
Button btn0 = new Button("0");
btn0.setPrefWidth(30);
btn0.setPrefHeight(30);
Button btnAdd = new Button("+");
btnAdd.setPrefWidth(30);
btnAdd.setPrefHeight(30);
Button btnSub = new Button("-");
btnSub.setPrefWidth(30);
btnSub.setPrefHeight(30);
Button btnMul = new Button("*");
btnMul.setPrefWidth(30);
btnMul.setPrefHeight(30);
Button btnDiv = new Button("/");
btnDiv.setPrefWidth(30);
btnDiv.setPrefHeight(30);
Button btnDot = new Button(".");
btnDot.setPrefWidth(30);
btnDot.setPrefHeight(30);
Button btnEqual = new Button("=");
btnEqual.setPrefWidth(30);
btnEqual.setPrefHeight(30);
Button btnClear = new Button("C");
btnClear.setPrefWidth(30);
btnClear.setPrefHeight(30);
//添加按钮到网格布局
//第一行
gridPane.add(btn7, 0, 1);
gridPane.add(btn8, 1, 1);
gridPane.add(btn9, 2, 1);
gridPane.add(btnDiv, 3, 1);
//第二行
gridPane.add(btn4, 0, 2);
gridPane.add(btn5, 1, 2);
gridPane.add(btn6, 2, 2);
gridPane.add(btnMul, 3, 2);
//第三行
gridPane.add(btn1, 0, 3);
gridPane.add(btn2, 1, 3);
gridPane.add(btn3, 2, 3);
gridPane.add(btnSub, 3, 3);
//第四行
gridPane.add(btn0, 0, 4);
gridPane.add(btnDot, 1, 4);
gridPane.add(btnClear, 2, 4);
gridPane.add(btnAdd, 3, 4);
//第五行
gridPane.add(btnEqual, 0, 5);
//添加按钮点击事件
btn1.setOnAction(event -> handleNumber(event, display));
btn2.setOnAction(event -> handleNumber(event, display));
btn3.setOnAction(event -> handleNumber(event, display));
btn4.setOnAction(event -> handleNumber(event, display));
btn5.setOnAction(event -> handleNumber(event, display));
btn6.setOnAction(event -> handleNumber(event, display));
btn7.setOnAction(event -> handleNumber(event, display));
btn8.setOnAction(event -> handleNumber(event, display));
btn9.setOnAction(event -> handleNumber(event, display));
btn0.setOnAction(event -> handleNumber(event, display));
btnDot.setOnAction(event -> handleDecimal(event, display));
btnAdd.setOnAction(event -> handleOperator(event, display));
btnSub.setOnAction(event -> handleOperator(event, display));
btnMul.setOnAction(event -> handleOperator(event, display));
btnDiv.setOnAction(event -> handleOperator(event, display));
btnEqual.setOnAction(event -> handleEquals(event, display));
btnClear.setOnAction(event -> handleClear(event, display));
stage.setScene(scene);
stage.show();
}
//处理数字按钮点击事件
private void handleNumber(ActionEvent event, TextField display) {
//获取按钮值
String value = ((Button) event.getSource()).getText();
if (start) {
display.setText(value);
start = false;
} else {
display.setText(display.getText() + value);
}
}
//处理运算符按钮点击事件
private void handleOperator(ActionEvent event, TextField display) {
String value = ((Button) event.getSource()).getText();
if (!"=".equals(value)) {
if (!operator.isEmpty())
return;
operator = value;
number1 = Double.parseDouble(display.getText());
display.setText("");
} else {
if (operator.isEmpty())
return;
double number2 = Double.parseDouble(display.getText());
double result = calculate(number1, number2, operator);
display.setText(String.valueOf(result));
operator = "";
start = true;
}
}
// 处理小数点按钮点击事件
private void handleDecimal(ActionEvent event, TextField display) {
if (start) {
display.setText("0.");
start = false;
} else if (!display.getText().contains(".")) {
display.setText(display.getText() + ".");
}
}
//处理等号按钮点击事件
private void handleEquals(ActionEvent event, TextField display) {
handleOperator(event,display);
}
//处理清空按钮点击事件
private void handleClear(ActionEvent event, TextField display) {
display.setText("0");
operator = "";
start = true;
}
//计算结果
private double calculate(double number1, double number2, String operator) {
switch (operator) {
case "+": return number1 + number2;
case "-": return number1 - number2;
case "*": return number1 * number2;
case "/":
if (number2 == 0) {
return 0;
}
return number1 / number2;
default: return 0;
}
}
public static void main(String[] args) {
launch(args);
}
}
标签:24,06,Button,30,display,2024,new,gridPane,event
From: https://www.cnblogs.com/lizexuan/p/18264332