用javafx设计一个计算器,附上代码加解释
时间: 2024-03-22 13:38:40 浏览: 78
计算器总体设计1
好的,下面是一个使用JavaFX实现的计算器的代码和解释:
Calculator.java
```java
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class Calculator extends Application {
private TextField display;
// 运算队列
private String[] queue = new String[100];
private int queueIndex = 0;
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Calculator");
// 创建GUI界面
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
// 创建显示屏
display = new TextField();
display.setEditable(false);
display.setAlignment(Pos.CENTER_RIGHT);
grid.add(display, 0, 0, 4, 1);
// 创建数字按钮
Button btn1 = new Button("1");
btn1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("1");
}
});
grid.add(btn1, 0, 1);
Button btn2 = new Button("2");
btn2.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("2");
}
});
grid.add(btn2, 1, 1);
Button btn3 = new Button("3");
btn3.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("3");
}
});
grid.add(btn3, 2, 1);
Button btn4 = new Button("4");
btn4.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("4");
}
});
grid.add(btn4, 0, 2);
Button btn5 = new Button("5");
btn5.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("5");
}
});
grid.add(btn5, 1, 2);
Button btn6 = new Button("6");
btn6.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("6");
}
});
grid.add(btn6, 2, 2);
Button btn7 = new Button("7");
btn7.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("7");
}
});
grid.add(btn7, 0, 3);
Button btn8 = new Button("8");
btn8.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("8");
}
});
grid.add(btn8, 1, 3);
Button btn9 = new Button("9");
btn9.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("9");
}
});
grid.add(btn9, 2, 3);
Button btn0 = new Button("0");
btn0.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.appendText("0");
}
});
grid.add(btn0, 1, 4);
// 创建操作符按钮
Button btnPlus = new Button("+");
btnPlus.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String num = display.getText();
queue[queueIndex++] = num;
queue[queueIndex++] = "+";
display.clear();
}
});
grid.add(btnPlus, 3, 1);
Button btnMinus = new Button("-");
btnMinus.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String num = display.getText();
queue[queueIndex++] = num;
queue[queueIndex++] = "-";
display.clear();
}
});
grid.add(btnMinus, 3, 2);
Button btnMultiply = new Button("*");
btnMultiply.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String num = display.getText();
queue[queueIndex++] = num;
queue[queueIndex++] = "*";
display.clear();
}
});
grid.add(btnMultiply, 3, 3);
Button btnDivide = new Button("/");
btnDivide.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String num = display.getText();
queue[queueIndex++] = num;
queue[queueIndex++] = "/";
display.clear();
}
});
grid.add(btnDivide, 3, 4);
// 创建等号按钮
Button btnEqual = new Button("=");
btnEqual.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String num = display.getText();
queue[queueIndex++] = num;
double result = Double.parseDouble(queue[0]);
for (int i = 1; i < queueIndex; i += 2) {
String operator = queue[i];
double operand = Double.parseDouble(queue[i + 1]);
if (operator.equals("+")) {
result += operand;
} else if (operator.equals("-")) {
result -= operand;
} else if (operator.equals("*")) {
result *= operand;
} else if (operator.equals("/")) {
if (operand == 0) {
display.setText("Error: divide by zero");
return;
}
result /= operand;
}
}
display.setText(Double.toString(result));
queueIndex = 0;
}
});
grid.add(btnEqual, 2, 4);
// 创建清除按钮
Button btnClear = new Button("C");
btnClear.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
display.clear();
queueIndex = 0;
}
});
grid.add(btnClear, 0, 4);
// 创建场景
Scene scene = new Scene(grid, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
解释:
1. `Calculator` 类继承了 `Application` 类,并重写了 `start` 方法来启动应用程序。
2. 在 `start` 方法中,首先创建了一个 `GridPane` 对象,用于布局所有组件,并设置了一些样式。
3. 创建了一个 `TextField` 对象作为显示屏,同时设置了一些样式。
4. 创建了数字按钮和操作符按钮,并为每个按钮添加了事件处理器。
5. 在事件处理器中,当用户点击数字按钮时,将数字添加到显示屏中;当用户点击操作符按钮时,将当前数字添加到运算队列中,并清空显示屏。
6. 创建了一个等号按钮,当用户点击等号按钮时,从运算队列中取出数字和操作符,并进行相应的计算,最终将结果显示在显示屏上。
7. 创建了一个清除按钮,当用户点击清除按钮时,清空显示屏和运算队列。
8. 最后,创建了一个 `Scene` 对象,并将 `GridPane` 对象添加到场景中,然后将场景设置到 `Stage` 对象中,并显示。
希望这些信息对您有所帮助!
阅读全文