diff --git a/.idea/.gitignore b/.idea/.gitignore index 13566b8..35410ca 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -1,7 +1,7 @@ -# Default ignored files +# 默认忽略的文件 /shelf/ /workspace.xml -# Editor-based HTTP Client requests +# 基于编辑器的 HTTP 客户端请求 /httpRequests/ # Datasource local storage ignored files /dataSources/ diff --git a/.idea/compute.iml b/.idea/compute.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/.idea/compute.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dictionaries b/.idea/dictionaries new file mode 100644 index 0000000..74fa4f7 --- /dev/null +++ b/.idea/dictionaries @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index fb243bb..8ed5f34 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 1095a15..56c7c6c 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 94a25f7..35eb1dd 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 new file mode 100644 index 0000000..d69f741 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# compute + diff --git a/src/compute/SimpleCalculator.java b/src/compute/SimpleCalculator.java index d09d3cc..6c41e69 100644 --- a/src/compute/SimpleCalculator.java +++ b/src/compute/SimpleCalculator.java @@ -1,9 +1,7 @@ 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 { @@ -12,82 +10,128 @@ 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("简单计算器"); + frame = new JFrame("简单计算器pjj"); inputField = new JTextField(); inputField.setEditable(false); - inputField.setFont(new Font("Arial", Font.PLAIN, 24)); - inputField.setHorizontalAlignment(JTextField.RIGHT); + inputField.setHorizontalAlignment(SwingConstants.RIGHT); + inputField.setFont(new Font("Arial", Font.BOLD, 24)); + inputField.setPreferredSize(new Dimension(400, 50)); // 创建按钮 - 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)); - } + 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"); // 设置布局 JPanel panel = new JPanel(); - panel.setLayout(new GridLayout(4, 4, 10, 10)); - for (JButton button : buttons) { - panel.add(button); - } + 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()); // 设置窗体 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setSize(400, 400); - frame.setLayout(new BorderLayout()); + frame.setSize(400, 600); // 调整窗体大小 + frame.setLayout(new BorderLayout(5, 5)); 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 void handleButtonClick(String label) { - switch (label) { - case "C": - clearInput(); - break; - case "=": - calculateResult(); - break; - default: - if ("+-*/".contains(label)) { - setOperator(label); - } else { - appendToInputField(label); - } - break; - } + 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 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; @@ -120,16 +164,42 @@ public class SimpleCalculator { } inputField.setText(String.valueOf(result)); } catch (NumberFormatException e) { - JOptionPane.showMessageDialog(frame, "无效输入,请检查。"); + JOptionPane.showMessageDialog(frame, "错误:无效的输入。"); } } private void clearInput() { inputField.setText(""); - num1 = num2 = 0; + num1 = 0; + 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); }