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