You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
work2/Counter2158.java

107 lines
2.9 KiB

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Counter2158 extends JFrame implements ActionListener {
private double result;
private JTextField resultField;
public Counter2158() {
super("Simple Calculator");
initializeCalculator();
}
private void initializeCalculator() {
this.result = 0;
// 创建布局
setLayout(new BorderLayout());
// 创建结果显示区域
resultField = new JTextField("0", 10);
resultField.setEditable(false);
add(resultField, BorderLayout.NORTH);
// 创建按钮面板
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4));
// 添加按钮
String[] buttons = {"+", "-", "*", "/", "Reset", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
for (String buttonText : buttons) {
JButton button = new JButton(buttonText);
button.addActionListener(this);
buttonPanel.add(button);
}
add(buttonPanel, BorderLayout.CENTER);
// 设置窗口属性
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true); // 显示窗口
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
switch (command) {
case "+":
add(Double.parseDouble(resultField.getText()));
break;
case "-":
subtract(Double.parseDouble(resultField.getText()));
break;
case "*":
multiply(Double.parseDouble(resultField.getText()));
break;
case "/":
try {
divide(Double.parseDouble(resultField.getText()));
} catch (IllegalArgumentException ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
reset();
}
break;
case "Reset":
reset();
break;
default:
add(Double.parseDouble(command));
break;
}
resultField.setText(String.valueOf(result));
}
public void add(double num) {
result += num;
}
public void subtract(double num) {
result -= num;
}
public void multiply(double num) {
result *= num;
}
public void divide(double num) {
if (num == 0) {
throw new IllegalArgumentException("Divisor cannot be zero.");
}
result /= num;
}
public void reset() {
result = 0;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(Counter2158::new);
}
}