package jisuanji; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class CalculatorGUI extends JFrame implements ActionListener { private JTextField display; private JPanel panel; private JButton[] numberButtons; private JButton[] functionButtons; private JButton addButton, subButton, mulButton, divButton, modButton, equalsButton, clearButton; private Calculator calculator; public CalculatorGUI() { calculator = new Calculator(); setTitle("Simple Calculator"); setSize(400, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); display = new JTextField(); display.setEditable(false); display.setFont(new Font("Arial", Font.BOLD, 24)); add(display, BorderLayout.NORTH); panel = new JPanel(); panel.setLayout(new GridLayout(5, 4, 10, 10)); // 数字按钮 numberButtons = new JButton[10]; for (int i = 0; i < 10; i++) { numberButtons[i] = new JButton(String.valueOf(i)); numberButtons[i].setFont(new Font("Arial", Font.BOLD, 24)); numberButtons[i].addActionListener(this); panel.add(numberButtons[i]); } // 功能按钮 addButton = new JButton("+"); subButton = new JButton("-"); mulButton = new JButton("*"); divButton = new JButton("/"); modButton = new JButton("%"); equalsButton = new JButton("="); clearButton = new JButton("C"); addButton.setFont(new Font("Arial", Font.BOLD, 24)); subButton.setFont(new Font("Arial", Font.BOLD, 24)); mulButton.setFont(new Font("Arial", Font.BOLD, 24)); divButton.setFont(new Font("Arial", Font.BOLD, 24)); modButton.setFont(new Font("Arial", Font.BOLD, 24)); equalsButton.setFont(new Font("Arial", Font.BOLD, 24)); clearButton.setFont(new Font("Arial", Font.BOLD, 24)); addButton.addActionListener(this); subButton.addActionListener(this); mulButton.addActionListener(this); divButton.addActionListener(this); modButton.addActionListener(this); equalsButton.addActionListener(this); clearButton.addActionListener(this); panel.add(addButton); panel.add(subButton); panel.add(mulButton); panel.add(divButton); panel.add(modButton); panel.add(equalsButton); panel.add(clearButton); // 空白按钮占位 JButton space1 = new JButton(" "); JButton space2 = new JButton(" "); panel.add(space1); panel.add(space2); add(panel, BorderLayout.CENTER); } @Override public void actionPerformed(ActionEvent e) { for (int i = 0; i < 10; i++) { if (e.getSource() == numberButtons[i]) { display.setText(display.getText() + i); } } if (e.getSource() == addButton) { currentOperation = '+'; firstNumber = Double.parseDouble(display.getText()); display.setText(""); } else if (e.getSource() == subButton) { currentOperation = '-'; firstNumber = Double.parseDouble(display.getText()); display.setText(""); } else if (e.getSource() == mulButton) { currentOperation = '*'; firstNumber = Double.parseDouble(display.getText()); display.setText(""); } else if (e.getSource() == divButton) { currentOperation = '/'; firstNumber = Double.parseDouble(display.getText()); display.setText(""); } else if (e.getSource() == modButton) { currentOperation = '%'; firstNumber = Double.parseDouble(display.getText()); display.setText(""); } else if (e.getSource() == equalsButton) { secondNumber = Double.parseDouble(display.getText()); double result = 0; switch (currentOperation) { case '+': result = calculator.add(firstNumber, secondNumber); break; case '-': result = calculator.subtract(firstNumber, secondNumber); break; case '*': result = calculator.multiply(firstNumber, secondNumber); break; case '/': try { result = calculator.divide(firstNumber, secondNumber); } catch (ArithmeticException ex) { display.setText("错误: 除数不能为零"); return; } break; case '%': try { result = calculator.modulus(firstNumber, secondNumber); } catch (ArithmeticException ex) { display.setText("错误: 除数不能为零"); return; } break; } display.setText(String.valueOf(result)); currentOperation = '\0'; // 重置操作符 } else if (e.getSource() == clearButton) { display.setText(""); currentOperation = '\0'; // 重置操作符 firstNumber = 0; secondNumber = 0; } } private char currentOperation = '\0'; private double firstNumber = 0; private double secondNumber = 0; public static void main(String[] args) { SwingUtilities.invokeLater(() -> { CalculatorGUI calculatorGUI = new CalculatorGUI(); calculatorGUI.setVisible(true); }); } }