2024/06/24笔记随笔

网格布局创建简易计算器

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

UI控件0

Event

posted @ 2024-06-24 09:12  ZxKing  阅读(23)  评论(0)    收藏  举报