JavaFX 事件机制实现计算器程序:代码示例与说明
这是一个使用 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方法创建一个清除按钮,并添加事件处理逻辑,清空currentNumber、operand和result变量,并将显示标签清空。
运行程序:
- 确保项目中包含 JavaFX 库。
- 将
Calculator类作为入口点运行。
此示例展示了使用 JavaFX 事件机制创建简单 GUI 程序的基本步骤。你可以根据自己的需要修改和扩展此代码,添加更多功能,例如支持小数点、括号、记忆功能等。
原文地址: http://www.cveoy.top/t/topic/bw6g 著作权归作者所有。请勿转载和采集!