From f6ca8eafb1e16317875a7f0f6f49399171da3108 Mon Sep 17 00:00:00 2001 From: lil soul <1693312216@qq.com> Date: Thu, 10 Jun 2021 12:55:49 +0800 Subject: [PATCH 1/2] add src/java2020spring/calculator. --- src/java2020spring/calculator | 179 ++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 src/java2020spring/calculator diff --git a/src/java2020spring/calculator b/src/java2020spring/calculator new file mode 100644 index 0000000..1ad04fd --- /dev/null +++ b/src/java2020spring/calculator @@ -0,0 +1,179 @@ +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class standard extends JFrame implements ActionListener { + private final String[] KEYS = { "%", ".","sqrt", "9", "8", "7","6", "5", "4", "3", "2", "1", "0", "+", "-","*","/","=","1/x","MC","MR " }; + private final String[] COMMAND = {"Back", "C" }; + private JButton keys[] = new JButton[KEYS.length]; + private JButton commands[] = new JButton[COMMAND.length]; + private JTextField resultText = new JTextField("0"); + private boolean firstDigit = true; + private double resultNum = 0.0; + private String operator = "="; + private boolean operateValidFlag = true; + StringBuffer sb = new StringBuffer(); + String vl = null; + public standard() { + setTitle("标准型"); + this.setBackground(Color.LIGHT_GRAY); + this.setTitle("标准计算器"); + this.setLocation(500, 300); + this.setSize(500, 500); + this.setResizable(false); + JMenuBar menuBar = new JMenuBar(); + setJMenuBar(menuBar); + resultText.setHorizontalAlignment(JTextField.RIGHT); + resultText.setBackground(Color.white); + resultText.setFont(new Font("TimesRoman",Font.BOLD,46)); + JPanel PPanel = new JPanel(); + PPanel.setLayout(new GridLayout(5, 4, 3, 3)); + for (int i = 0; i < COMMAND.length; i++) { + commands[i] = new JButton(COMMAND[i]); + PPanel.add(commands[i]); + commands[i].setFont(new Font("Courir",Font.PLAIN,20)); + } + for (int i = 0; i < KEYS.length; i++) { + keys[i] = new JButton(KEYS[i]); + PPanel.add(keys[i]); + keys[i].setFont(new Font("Courir",Font.ITALIC,20)); + } + JPanel panel1 = new JPanel(); + panel1.setLayout(new BorderLayout(3,3)); + panel1.add("Center", PPanel); + JPanel top = new JPanel(); + top.setLayout(new BorderLayout()); + top.add("Center", resultText); + + getContentPane().setLayout(new BorderLayout(3, 5)); + getContentPane().add("North", top); + getContentPane().add("Center", panel1); + for (int i = 0; i < KEYS.length; i++) { + keys[i].addActionListener(this); + } + for (int i = 0; i < COMMAND.length; i++) { + commands[i].addActionListener(this); + } + + } + + public void actionPerformed(ActionEvent e) { + String label = e.getActionCommand(); + if (label.equals(COMMAND[0])) { + handleBack(); + } + else if (label.equals(COMMAND[1])) { + handleC(); + } + else if ("0123456789.".indexOf(label) >= 0) { + handleNumber(label); + } + else + handleOperator(label); + } + + private void handleBack() { + String text = resultText.getText(); + int i = text.length(); + if (i > 0) { + text = text.substring(0, i - 1); + if (text.length() == 0) { + resultText.setText("0"); + firstDigit = true; + operator = "="; + } + else + resultText.setText(text); + } + } + + private void handleNumber(String key) { + if (firstDigit) { + resultText.setText(key); + } + else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) { + resultText.setText(resultText.getText() + "."); + } + else if (!key.equals(".")) { + resultText.setText(resultText.getText() + key); + } + firstDigit = false; + } + + private void handleC() { + resultText.setText("0"); + firstDigit = true; + operator = "="; + } + + private void handleOperator(String key) { + if (operator.equals("/")) { + if (getNumberFromText() == 0.0) { + operateValidFlag = false; + resultText.setText("除数不能为零"); + } + else + resultNum /= getNumberFromText(); + } + else if (operator.equals("1/x")) { + if (resultNum == 0.0) { + operateValidFlag = false; + resultText.setText("零没有倒数"); + } + else + resultNum = 1 / resultNum; + } + else if (operator.equals("+")) { + resultNum += getNumberFromText(); + } + else if (operator.equals("-")) { + resultNum -= getNumberFromText(); + } + else if (operator.equals("*")) { + resultNum *= getNumberFromText(); + } + else if (operator.equals("sqrt")) { + resultNum = Math.sqrt(resultNum); + } + else if (operator.equals("=")) { + resultNum = getNumberFromText(); + } + else if (operator.contentEquals("%")) { + while(resultNum>=getNumberFromText()) { + resultNum -= getNumberFromText(); + } + } + else if (operator.contentEquals("MC")) { + resultNum = 0; + } + if (operateValidFlag) { + long t1; + double t2; + t1 = (long) resultNum; + t2 = resultNum - t1; + if (t2 == 0) { + resultText.setText(String.valueOf(t1)); + } + else { + resultText.setText(String.valueOf(resultNum)); + } + } + operator = key; + firstDigit = true; + operateValidFlag = true; + } + + private double getNumberFromText() { + double result = 0; + try { + result = Double.valueOf(resultText.getText()).doubleValue(); + } catch (NumberFormatException e) {} + return result; + } + + public static void main(String args[]) { + standard application = new standard(); + application.setVisible(true); + application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} \ No newline at end of file -- Gitee From 90a80de6bb44b609475f67a26c4a4a2c2c80c3e9 Mon Sep 17 00:00:00 2001 From: lil soul <1693312216@qq.com> Date: Thu, 10 Jun 2021 21:13:13 +0800 Subject: [PATCH 2/2] update src/java2020spring/calculator. --- src/java2020spring/calculator | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/java2020spring/calculator b/src/java2020spring/calculator index 1ad04fd..16c388a 100644 --- a/src/java2020spring/calculator +++ b/src/java2020spring/calculator @@ -3,7 +3,7 @@ import java.awt.event.*; import javax.swing.*; public class standard extends JFrame implements ActionListener { - private final String[] KEYS = { "%", ".","sqrt", "9", "8", "7","6", "5", "4", "3", "2", "1", "0", "+", "-","*","/","=","1/x","MC","MR " }; + private final String[] KEYS = { "%", ".","sqrt", "9", "8", "7","6", "5", "4", "3", "2", "1", "0", "+", "-","*","/","=","1/x","MC","MR","MS","M+" }; private final String[] COMMAND = {"Back", "C" }; private JButton keys[] = new JButton[KEYS.length]; private JButton commands[] = new JButton[COMMAND.length]; @@ -174,6 +174,4 @@ public class standard extends JFrame implements ActionListener { public static void main(String args[]) { standard application = new standard(); application.setVisible(true); - application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } -} \ No newline at end of file + application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); \ No newline at end of file -- Gitee