diff --git a/.idea/.gitignore b/.idea/.gitignore index 35410ca..13566b8 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -1,7 +1,7 @@ -# 默认忽略的文件 +# Default ignored files /shelf/ /workspace.xml -# 基于编辑器的 HTTP 客户端请求 +# Editor-based HTTP Client requests /httpRequests/ # Datasource local storage ignored files /dataSources/ diff --git a/.idea/compute.iml b/.idea/compute.iml deleted file mode 100644 index c90834f..0000000 --- a/.idea/compute.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/dictionaries b/.idea/dictionaries deleted file mode 100644 index 74fa4f7..0000000 --- a/.idea/dictionaries +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 8ed5f34..fb243bb 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 56c7c6c..1095a15 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..94a25f7 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index d69f741..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# compute - diff --git a/src/compute/SimpleCalculator.java b/src/compute/SimpleCalculator.java index 38e6ade..d09d3cc 100644 --- a/src/compute/SimpleCalculator.java +++ b/src/compute/SimpleCalculator.java @@ -1,7 +1,9 @@ package compute; - import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; public class SimpleCalculator { @@ -10,128 +12,82 @@ public class SimpleCalculator { private double num1; private double num2; private String operator; - private double memory; // Memory for M+, M-, MR, and MC functionality public SimpleCalculator() { frame = new JFrame("简单计算器"); inputField = new JTextField(); inputField.setEditable(false); - inputField.setHorizontalAlignment(SwingConstants.RIGHT); - inputField.setFont(new Font("Arial", Font.BOLD, 24)); - inputField.setPreferredSize(new Dimension(400, 50)); + inputField.setFont(new Font("Arial", Font.PLAIN, 24)); + inputField.setHorizontalAlignment(JTextField.RIGHT); // 创建按钮 - JButton btn1 = createButton("1"); - JButton btn2 = createButton("2"); - JButton btn3 = createButton("3"); - JButton btn4 = createButton("4"); - JButton btn5 = createButton("5"); - JButton btn6 = createButton("6"); - JButton btn7 = createButton("7"); - JButton btn8 = createButton("8"); - JButton btn9 = createButton("9"); - JButton btn0 = createButton("0"); - JButton btnAdd = createButton("+"); - JButton btnSubtract = createButton("-"); - JButton btnMultiply = createButton("*"); - JButton btnDivide = createButton("/"); - JButton btnEqual = createButton("="); - JButton btnClear = createButton("C"); - JButton btnDecimal = createButton("."); - JButton btnNegate = createButton("+/-"); - JButton btnMPlus = createButton("M+"); - JButton btnMMinus = createButton("M-"); - JButton btnMR = createButton("MR"); - JButton btnMC = createButton("MC"); + JButton[] buttons = new JButton[16]; + String[] buttonLabels = {"7", "8", "9", "/", + "4", "5", "6", "*", + "1", "2", "3", "-", + "C", "0", "=", "+"}; + + for (int i = 0; i < buttonLabels.length; i++) { + buttons[i] = new JButton(buttonLabels[i]); + buttons[i].setFont(new Font("Arial", Font.PLAIN, 24)); + buttons[i].setFocusable(false); + buttons[i].setBackground(Color.LIGHT_GRAY); + buttons[i].setBorder(BorderFactory.createLineBorder(Color.GRAY)); + final String label = buttonLabels[i]; + buttons[i].addActionListener(e -> handleButtonClick(label)); + } // 设置布局 JPanel panel = new JPanel(); - panel.setLayout(new GridLayout(6, 4, 5, 5)); // 网格布局,间距为5像素 - panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - panel.add(btn7); - panel.add(btn8); - panel.add(btn9); - panel.add(btnDivide); - panel.add(btn4); - panel.add(btn5); - panel.add(btn6); - panel.add(btnMultiply); - panel.add(btn1); - panel.add(btn2); - panel.add(btn3); - panel.add(btnSubtract); - panel.add(btn0); - panel.add(btnDecimal); - panel.add(btnNegate); - panel.add(btnAdd); - panel.add(btnClear); - panel.add(btnEqual); - panel.add(btnMPlus); - panel.add(btnMMinus); - panel.add(btnMR); - panel.add(btnMC); - - // 添加事件监听器 - btn1.addActionListener(e -> appendToInputField("1")); - btn2.addActionListener(e -> appendToInputField("2")); - btn3.addActionListener(e -> appendToInputField("3")); - btn4.addActionListener(e -> appendToInputField("4")); - btn5.addActionListener(e -> appendToInputField("5")); - btn6.addActionListener(e -> appendToInputField("6")); - btn7.addActionListener(e -> appendToInputField("7")); - btn8.addActionListener(e -> appendToInputField("8")); - btn9.addActionListener(e -> appendToInputField("9")); - btn0.addActionListener(e -> appendToInputField("0")); - btnDecimal.addActionListener(e -> appendDecimal()); - btnNegate.addActionListener(e -> negateValue()); - - btnAdd.addActionListener(e -> setOperator("+")); - btnSubtract.addActionListener(e -> setOperator("-")); - btnMultiply.addActionListener(e -> setOperator("*")); - btnDivide.addActionListener(e -> setOperator("/")); - - btnEqual.addActionListener(e -> calculateResult()); - btnClear.addActionListener(e -> clearInput()); - btnMPlus.addActionListener(e -> memoryPlus()); - btnMMinus.addActionListener(e -> memoryMinus()); - btnMR.addActionListener(e -> memoryRecall()); - btnMC.addActionListener(e -> memoryClear()); + panel.setLayout(new GridLayout(4, 4, 10, 10)); + for (JButton button : buttons) { + panel.add(button); + } // 设置窗体 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setSize(400, 600); // 调整窗体大小 - frame.setLayout(new BorderLayout(5, 5)); + frame.setSize(400, 400); + frame.setLayout(new BorderLayout()); frame.add(inputField, BorderLayout.NORTH); frame.add(panel, BorderLayout.CENTER); frame.setVisible(true); + frame.setLocationRelativeTo(null); // 窗口居中 + frame.addKeyListener(new KeyAdapter() { // 支持键盘输入 + @Override + public void keyPressed(KeyEvent e) { + char keyChar = e.getKeyChar(); + if (Character.isDigit(keyChar) || keyChar == '.' || "+-*/=".indexOf(keyChar) >= 0) { + handleButtonClick(String.valueOf(keyChar)); + } + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + clearInput(); + } + } + }); } - private JButton createButton(String text) { - JButton button = new JButton(text); - button.setFont(new Font("Arial", Font.PLAIN, 18)); - button.setPreferredSize(new Dimension(80, 80)); - button.setBackground(Color.LIGHT_GRAY); - button.setFocusPainted(false); - return button; + private void handleButtonClick(String label) { + switch (label) { + case "C": + clearInput(); + break; + case "=": + calculateResult(); + break; + default: + if ("+-*/".contains(label)) { + setOperator(label); + } else { + appendToInputField(label); + } + break; + } } private void appendToInputField(String value) { inputField.setText(inputField.getText() + value); } - private void appendDecimal() { - if (!inputField.getText().contains(".")) { - inputField.setText(inputField.getText() + "."); - } - } - - private void negateValue() { - if (!inputField.getText().isEmpty()) { - double value = Double.parseDouble(inputField.getText()); - inputField.setText(String.valueOf(value * -1)); - } - } - private void setOperator(String op) { num1 = Double.parseDouble(inputField.getText()); operator = op; @@ -164,42 +120,16 @@ public class SimpleCalculator { } inputField.setText(String.valueOf(result)); } catch (NumberFormatException e) { - JOptionPane.showMessageDialog(frame, "错误:无效的输入。"); + JOptionPane.showMessageDialog(frame, "无效输入,请检查。"); } } private void clearInput() { inputField.setText(""); - num1 = 0; - num2 = 0; + num1 = num2 = 0; operator = ""; } - private void memoryPlus() { - try { - memory += Double.parseDouble(inputField.getText()); - } catch (NumberFormatException e) { - JOptionPane.showMessageDialog(frame, "错误:无效的输入。"); - } - } - - private void memoryMinus() { - try { - memory -= Double.parseDouble(inputField.getText()); - } catch (NumberFormatException e) { - JOptionPane.showMessageDialog(frame, "错误:无效的输入。"); - } - } - - private void memoryRecall() { - inputField.setText(String.valueOf(memory)); - } - - private void memoryClear() { - memory = 0; - } - - public static void main(String[] args) { SwingUtilities.invokeLater(SimpleCalculator::new); }