commit
2bf66a589e
@ -0,0 +1,146 @@
|
||||
package jsq6267;
|
||||
|
||||
import javafx.application.Application;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
public class CalculatorApp extends Application {
|
||||
|
||||
private TextField display;
|
||||
private double firstNumber = 0;
|
||||
private boolean userIsTypingSecondNumber = false;
|
||||
private String currentOperator = "";
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage) {
|
||||
primaryStage.setTitle("计算器");
|
||||
|
||||
display = new TextField();
|
||||
display.setEditable(false);
|
||||
display.setPrefColumnCount(16);
|
||||
|
||||
GridPane grid = new GridPane();
|
||||
grid.setAlignment(Pos.CENTER);
|
||||
grid.setPadding(new Insets(10, 10, 10, 10));
|
||||
grid.setVgap(8);
|
||||
grid.setHgap(8);
|
||||
|
||||
// 添加数字按钮
|
||||
for (int i = 1; i <= 9; i++) {
|
||||
Button btn = new Button(String.valueOf(i));
|
||||
int finalI = i; // 使用 finalI 来捕获 i 的值
|
||||
btn.setOnAction(e -> appendNumber(finalI));
|
||||
grid.add(btn, (i - 1) % 3, (i - 1) / 3 + 1);
|
||||
}
|
||||
|
||||
// 添加0按钮
|
||||
Button btn0 = new Button("0");
|
||||
btn0.setOnAction(e -> appendNumber(0));
|
||||
grid.add(btn0, 0, 4, 2, 1); // 占据两列
|
||||
|
||||
// 添加点按钮
|
||||
Button btnDot = new Button(".");
|
||||
btnDot.setOnAction(e -> appendDot());
|
||||
grid.add(btnDot, 2, 4);
|
||||
|
||||
// 添加操作符按钮
|
||||
String[] operators = {"+", "-", "*", "/"};
|
||||
for (int i = 0; i < operators.length; i++) {
|
||||
Button btnOp = new Button(operators[i]);
|
||||
String finalOp = operators[i]; // 使用 finalOp 来捕获 operators[i] 的值
|
||||
btnOp.setOnAction(e -> setOperator(finalOp));
|
||||
grid.add(btnOp, 3, i + 1);
|
||||
}
|
||||
|
||||
// 添加等号按钮
|
||||
Button btnEquals = new Button("=");
|
||||
btnEquals.setOnAction(e -> calculate());
|
||||
grid.add(btnEquals, 1, 5, 2, 1); // 占据两列
|
||||
|
||||
// 添加清除按钮
|
||||
Button btnClear = new Button("C");
|
||||
btnClear.setOnAction(e -> clear());
|
||||
grid.add(btnClear, 3, 5);
|
||||
|
||||
// 将显示框添加到网格的第一行
|
||||
grid.add(display, 0, 0, 4, 1);
|
||||
|
||||
Scene scene = new Scene(grid, 300, 400);
|
||||
|
||||
primaryStage.setScene(scene);
|
||||
primaryStage.show();
|
||||
}
|
||||
|
||||
private void appendNumber(int number) {
|
||||
if (userIsTypingSecondNumber) {
|
||||
display.setText(display.getText() + number);
|
||||
} else {
|
||||
firstNumber = firstNumber * 10 + number;
|
||||
display.setText(String.valueOf(firstNumber));
|
||||
}
|
||||
}
|
||||
|
||||
private void appendDot() {
|
||||
if (!display.getText().contains(".")) {
|
||||
display.setText(display.getText() + ".");
|
||||
}
|
||||
}
|
||||
|
||||
private void setOperator(String operator) {
|
||||
if (!currentOperator.isEmpty()) {
|
||||
calculate();
|
||||
}
|
||||
currentOperator = operator;
|
||||
userIsTypingSecondNumber = true;
|
||||
display.setText("");
|
||||
}
|
||||
|
||||
private void calculate() {
|
||||
double secondNumber = Double.parseDouble(display.getText());
|
||||
double result = 0;
|
||||
boolean valid = true;
|
||||
|
||||
switch (currentOperator) {
|
||||
case "+":
|
||||
result = firstNumber + secondNumber;
|
||||
break;
|
||||
case "-":
|
||||
result = firstNumber - secondNumber;
|
||||
break;
|
||||
case "*":
|
||||
result = firstNumber * secondNumber;
|
||||
break;
|
||||
case "/":
|
||||
if (secondNumber == 0) {
|
||||
display.setText("错误");
|
||||
valid = false;
|
||||
} else {
|
||||
result = firstNumber / secondNumber;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
display.setText(String.valueOf(result));
|
||||
firstNumber = result;
|
||||
currentOperator = "";
|
||||
userIsTypingSecondNumber = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void clear() {
|
||||
display.setText("");
|
||||
firstNumber = 0;
|
||||
userIsTypingSecondNumber = false;
|
||||
currentOperator = "";
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
launch(args);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue