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); } }