From 7daed8d24732aa5a054d7bc0a71eadaef14eac99 Mon Sep 17 00:00:00 2001 From: 86176 <86176@DESKTOP-2I01QTV> Date: Fri, 11 Jun 2021 12:51:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=B7=B2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/org.eclipse.core.resources.prefs | 2 + src/java2020spring/Calculator.java | 192 +++++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 src/java2020spring/Calculator.java diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..4eacbed --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//src/java2020spring/Calculator.java=UTF-8 diff --git a/src/java2020spring/Calculator.java b/src/java2020spring/Calculator.java new file mode 100644 index 0000000..bbb1d81 --- /dev/null +++ b/src/java2020spring/Calculator.java @@ -0,0 +1,192 @@ +package java2020spring; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.DecimalFormat; +public class Calculator implements ActionListener { + private JFrame frame = new JFrame(); + private String[] keys = {"%","CE","C","Back","1⁄x","X²","√x","÷","7","8","9","X","4","5","6","-","1","2","3","+","+/-","0",".","="}; + private JButton buttons[] = new JButton[keys.length]; + private JTextField resultText = new JTextField("0"); + private boolean firstDigit = true; + private double resultNum = 0.0000; + private String operator = "="; + private boolean operateValidFlag = true; + public Calculator() { + init(); + frame.setTitle("标准计算器"); + frame.setSize(366, 439); + frame.setLocation(500, 300); + frame.setResizable(true); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + private void init() { + Color color1 = new Color(181, 181, 181); + Color color2 = new Color(126, 192, 238); + Color color3 = new Color(232, 232, 232); + JPanel textPanel = new JPanel(); + textPanel.setLayout(new BorderLayout()); + textPanel.add(resultText); + resultText.setFont(new Font("楷体",Font.BOLD,43)); + resultText.setHorizontalAlignment(JTextField.RIGHT); + resultText.setEditable(false); + resultText.setBorder(null); + resultText.setBackground(color1); + JPanel keysPanel = new JPanel(); + keysPanel.setLayout(new GridLayout(6, 4, 2, 2)); + for(int i = 0; i < 8; i++) { + buttons[i] = new JButton(keys[i]); + keysPanel.add(buttons[i]); + buttons[i].setBackground(color3); + buttons[i].setForeground(Color.black); + buttons[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18)); + buttons[i].setBorderPainted(false); + } + for(int i = 8; i < keys.length; i++) { + buttons[i] = new JButton(keys[i]); + keysPanel.add(buttons[i]); + if((i+1)%4==0) buttons[i].setBackground(color3); + else buttons[i].setBackground(Color.white); + buttons[i].setForeground(Color.black); + buttons[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18)); + buttons[i].setBorderPainted(false); + } + buttons[23].setBackground(color2); + keysPanel.setBackground(color1); + frame.getContentPane().add("North", textPanel); + frame.getContentPane().add("Center", keysPanel); + textPanel.setBorder(BorderFactory.createMatteBorder(25,3,1,3,color1)); + keysPanel.setBorder(BorderFactory.createMatteBorder(6,3,3,3,color1)); + for (int i = 0; i < keys.length; i++) { + buttons[i].addActionListener(this); + } + } + public void actionPerformed(ActionEvent ev) { + String command = ev.getActionCommand(); + if (command.equals(keys[3])) { + doBackspace(); + } else if (command.equals(keys[1])) { + resultText.setText("0"); + } else if (command.equals(keys[2])) { + doC(); + } else if ("0123456789.".indexOf(command) >= 0) { + doNumber(command); + } else if(command.equals(keys[0]) || command.equals(keys[4]) || command.equals(keys[5]) || + command.equals(keys[6]) || command.equals(keys[20])) { + doOperator1(command); + } else { + doOperator2(command); + } + } + private void doBackspace() { + 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 doC() { + resultText.setText("0"); + firstDigit = true; + operator = "="; + } + private void doNumber(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 doOperator1(String key) { + operator = key; + if (operator.equals("1⁄x")) { + if (resultNum == 0) { + operateValidFlag = false; + resultText.setText("零没有倒数"); + } else { + resultNum = 1 / getNumberFromText(); + } + } else if (operator.equals("√x")) { + if (resultNum < 0) { + operateValidFlag = false; + resultText.setText("根号内不能为负"); + } else { + resultNum = Math.sqrt(getNumberFromText()); + } + } else if (operator.equals("X²")) { + resultNum = getNumberFromText()*getNumberFromText(); + } else if (operator.equals("%")) { + resultNum = getNumberFromText() / 100; + } else if (operator.equals("+/-")) { + resultNum = getNumberFromText() * (-1); + 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(new DecimalFormat("0.0000").format(resultNum))); + } + } + firstDigit = true; + operateValidFlag = true; + } + } + private void doOperator2(String key) { + if (operator.equals("÷")) { + if (getNumberFromText() == 0.0) { + operateValidFlag = false; + resultText.setText("除数不能为零"); + } else { + resultNum /= getNumberFromText(); + } + } else if (operator.equals("+")) { + resultNum += getNumberFromText(); + } else if (operator.equals("-")) { + resultNum -= getNumberFromText(); + } else if (operator.equals("X")) { + resultNum *= getNumberFromText(); + } else if (operator.equals("=")) { + resultNum = getNumberFromText(); + } + 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(new DecimalFormat("0.0000").format(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) { + new Calculator(); + } +} -- Gitee