javaawt组件计算器混合计算
时间: 2023-11-04 10:22:42 浏览: 92
Java AWT 组件可以用来实现一个简单的计算器,支持混合计算。以下是实现的步骤:
1. 创建一个 JFrame 窗口,设置布局为 BorderLayout。
2. 在窗口的顶部添加一个 JTextField 组件,用于显示计算结果。
3. 在窗口的中间添加一个 JPanel 组件,设置布局为 GridLayout,用于放置数字和运算符按钮。
4. 创建数字和运算符按钮,添加到 JPanel 中。
5. 为数字和运算符按钮添加 ActionListener,实现计算器功能。
6. 在 ActionListener 中,根据用户输入的数字和运算符,使用栈来实现混合计算。
7. 将计算结果显示在 JTextField 中。
下面是示例代码:
```java
import java.awt.*;
import java.awt.event.*;
import java.util.Stack;
import javax.swing.*;
public class Calculator extends JFrame implements ActionListener {
private JTextField resultField;
private JPanel buttonPanel;
private Stack<Double> numStack;
private Stack<Character> opStack;
public Calculator() {
super("Calculator");
// 设置布局为 BorderLayout
setLayout(new BorderLayout());
// 添加结果显示组件
resultField = new JTextField();
resultField.setEditable(false);
add(resultField, BorderLayout.NORTH);
// 添加按钮面板
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4));
add(buttonPanel, BorderLayout.CENTER);
// 创建数字和运算符按钮
JButton[] buttons = {
new JButton("7"), new JButton("8"), new JButton("9"), new JButton("/"),
new JButton("4"), new JButton("5"), new JButton("6"), new JButton("*"),
new JButton("1"), new JButton("2"), new JButton("3"), new JButton("-"),
new JButton("0"), new JButton("."), new JButton("="), new JButton("+")
};
// 添加按钮到面板中
for (JButton button : buttons) {
buttonPanel.add(button);
button.addActionListener(this);
}
// 初始化栈
numStack = new Stack<>();
opStack = new Stack<>();
// 设置窗口大小和可见性
setSize(300, 300);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.matches("[0-9.]")) {
// 处理数字输入
double num = Double.parseDouble(command);
numStack.push(num);
} else if (command.matches("[+\\-*/]")) {
// 处理运算符输入
char op = command.charAt(0);
while (!opStack.empty() && priority(op) <= priority(opStack.peek())) {
double num2 = numStack.pop();
double num1 = numStack.pop();
char op1 = opStack.pop();
numStack.push(eval(num1, num2, op1));
}
opStack.push(op);
} else {
// 处理等号输入
while (!opStack.empty()) {
double num2 = numStack.pop();
double num1 = numStack.pop();
char op = opStack.pop();
numStack.push(eval(num1, num2, op));
}
}
// 更新结果显示
if (!numStack.empty()) {
resultField.setText(numStack.peek().toString());
}
}
private int priority(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
private double eval(double num1, double num2, char op) {
switch (op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num1 / num2;
default:
return 0;
}
}
public static void main(String[] args) {
new Calculator();
}
}
```
这个计算器可以支持混合计算,例如输入 "2+3*4/2",结果会显示为 "8.0"。
阅读全文