这是一个使用 JavaFX 库构建的简单计算器程序示例,它使用事件机制处理用户输入并进行计算。程序包含用户界面和可运行代码。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class Calculator extends Application {
    private Label display;
    private String currentNumber;
    private String operand;
    private double result;

    @Override
    public void start(Stage primaryStage) {
        display = new Label();
        display.setMinWidth(200);

        GridPane gridPane = new GridPane();
        gridPane.setPadding(new Insets(10));
        gridPane.setHgap(5);
        gridPane.setVgap(5);

        Button button0 = createNumberButton('0');
        Button button1 = createNumberButton('1');
        Button button2 = createNumberButton('2');
        Button button3 = createNumberButton('3');
        Button button4 = createNumberButton('4');
        Button button5 = createNumberButton('5');
        Button button6 = createNumberButton('6');
        Button button7 = createNumberButton('7');
        Button button8 = createNumberButton('8');
        Button button9 = createNumberButton('9');

        Button buttonPlus = createOperationButton('+');
        Button buttonMinus = createOperationButton('-');
        Button buttonMultiply = createOperationButton('*');
        Button buttonDivide = createOperationButton('/');
        Button buttonEquals = createEqualsButton();
        Button buttonClear = createClearButton();

        gridPane.add(display, 0, 0, 4, 1);
        gridPane.add(button7, 0, 1);
        gridPane.add(button8, 1, 1);
        gridPane.add(button9, 2, 1);
        gridPane.add(buttonDivide, 3, 1);
        gridPane.add(button4, 0, 2);
        gridPane.add(button5, 1, 2);
        gridPane.add(button6, 2, 2);
        gridPane.add(buttonMultiply, 3, 2);
        gridPane.add(button1, 0, 3);
        gridPane.add(button2, 1, 3);
        gridPane.add(button3, 2, 3);
        gridPane.add(buttonMinus, 3, 3);
        gridPane.add(button0, 0, 4);
        gridPane.add(buttonClear, 1, 4);
        gridPane.add(buttonEquals, 2, 4);
        gridPane.add(buttonPlus, 3, 4);

        Scene scene = new Scene(gridPane);
        primaryStage.setTitle('Calculator');
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private Button createNumberButton(String number) {
        Button button = new Button(number);
        button.setPrefSize(50, 50);
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                currentNumber += number;
                display.setText(currentNumber);
            }
        });
        return button;
    }

    private Button createOperationButton(String operation) {
        Button button = new Button(operation);
        button.setPrefSize(50, 50);
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                operand = operation;
                result = Double.parseDouble(currentNumber);
                currentNumber = '';
                display.setText(operation);
            }
        });
        return button;
    }

    private Button createEqualsButton() {
        Button button = new Button('=');
        button.setPrefSize(50, 50);
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                double secondOperand = Double.parseDouble(currentNumber);
                switch (operand) {
                    case '+':
                        result += secondOperand;
                        break;
                    case '-':
                        result -= secondOperand;
                        break;
                    case '*':
                        result *= secondOperand;
                        break;
                    case '/':
                        result /= secondOperand;
                        break;
                }
                display.setText(String.valueOf(result));
                currentNumber = '';
            }
        });
        return button;
    }

    private Button createClearButton() {
        Button button = new Button('C');
        button.setPrefSize(50, 50);
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                currentNumber = '';
                operand = '';
                result = 0;
                display.setText('');
            }
        });
        return button;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

代码说明:

  • 用户界面: 使用 GridPane 布局,创建数字按钮、操作按钮、显示标签和清除按钮。
  • 事件处理: 每个按钮使用 setOnAction 方法注册一个事件处理器,在按钮被点击时触发对应的事件处理逻辑。
  • 数字按钮: createNumberButton 方法创建一个数字按钮,并添加事件处理逻辑,将点击的数字添加到 currentNumber 字符串中,并更新显示标签。
  • 操作按钮: createOperationButton 方法创建一个操作按钮,并添加事件处理逻辑,将当前数字解析为 double 类型,保存到 result 变量中,将操作符保存到 operand 变量中,并更新显示标签。
  • 等号按钮: createEqualsButton 方法创建一个等号按钮,并添加事件处理逻辑,将当前数字解析为 double 类型,根据保存的操作符执行相应的运算,并将结果更新到显示标签中。
  • 清除按钮: createClearButton 方法创建一个清除按钮,并添加事件处理逻辑,清空 currentNumberoperandresult 变量,并将显示标签清空。

运行程序:

  1. 确保项目中包含 JavaFX 库。
  2. Calculator 类作为入口点运行。

此示例展示了使用 JavaFX 事件机制创建简单 GUI 程序的基本步骤。你可以根据自己的需要修改和扩展此代码,添加更多功能,例如支持小数点、括号、记忆功能等。

JavaFX 事件机制实现计算器程序:代码示例与说明

原文地址: http://www.cveoy.top/t/topic/bw6g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录