JavaFX 简单计算器 - 计算按钮动作

JavaFX Simple Calculator - Calculate Button Action

我正在为学校开发一个简单的 JavaFX 计算器,我坚持将一个动作事件放在一起,该动作事件从两个文本字段、选定的单选按钮和计算按钮时执行该事件被按下。

        btnCalc.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {

        }
    });
}
public void calculation(ActionEvent e) {
    int num1, num2, answer;

    num1 = Integer.parseInt(tfNum1.getText());
    num2 = Integer.parseInt((tfNum2.getText()));

    if (rbAdd.isSelected()) {
        answer = num1 + num2;
    } else if (rbSubtract.isSelected()) {
        answer = num1 - num2;
    } else if (rbMultiply.isSelected()) {
        answer = num1 * num2;
    } else {
        answer = num1 / num2;
    }

    tfAns.setText(String.valueOf(answer));

Program Preview

函数 btnCalc.setOnAction() 要求一个 EventHandler 作为参数。这将做的是每次按下按钮时,它将执行该 EventHandler 的 handle() 方法(在您的情况下为空)。您可以通过 3 种不同的方式解决该问题:

  • 您在 EventHandler 的 handle(ActionEvent e) 函数中调用您的 calculation(ActionEvent e) 函数(如果您这样做,您可以从 calculation() 中删除 ActionEvent 参数。
  • 您将代码从 calculation(ActionEvent e) 复制到 handle(ActionEvent e)
  • 这里最好的选择可能是使用 lambda。当一个接口只有 1 个函数时,您不必“制作”接口的对象,而是可以通过以下方式提供函数:
btnCalc.setOnAction(e -> calculation());

在这种情况下,您还可以从 calculation() 的参数中删除 ActionEvent e。

所以总代码如下所示:

        btnCalc.setOnAction(e -> calculation());

public void calculation() {
    int num1, num2, answer;

    num1 = Integer.parseInt(tfNum1.getText());
    num2 = Integer.parseInt((tfNum2.getText()));

    if (rbAdd.isSelected()) {
        answer = num1 + num2;
    } else if (rbSubtract.isSelected()) {
        answer = num1 - num2;
    } else if (rbMultiply.isSelected()) {
        answer = num1 * num2;
    } else {
        answer = num1 / num2;
    }

    tfAns.setText(String.valueOf(answer));