diff --git a/src/java2020spring/Cauculater.java b/src/java2020spring/Cauculater.java new file mode 100644 index 0000000000000000000000000000000000000000..ab6a063b3e0aa99cf0e393a49368faced11c8d35 --- /dev/null +++ b/src/java2020spring/Cauculater.java @@ -0,0 +1,289 @@ +package java2020spring; + + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class Cauculater extends JFrame implements ActionListener{ + private String[] KEY= { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "="}; + private String[] COM = {"Backspace", "CE", "C"}; + private String[] M = {" ", "MC", "MR", "MS", "M+"}; + private JButton key[] = new JButton[KEY.length]; + private JButton com[] = new JButton[COM.length]; + private JButton m[] = new JButton[M.length]; + private JTextField resultText = new JTextField("0"); + private boolean first = true; + private double resultNum = 0.0; + private String operator = "="; + private boolean operateFlag = true; + + private JTextField text1= new JTextField(""); + private String storage = ""; + private double n = 0.0; + + JMenuBar menubar; + + + public Cauculater() { + super(); + init(); + setTitle("计算器"); + setLocation(100, 100); + pack(); + menubar=new JMenuBar(); + setJMenuBar(menubar); + + JMenu mnNewMenu = new JMenu("编辑"); + menubar.add(mnNewMenu); + JMenuItem card1=new JMenuItem("复制"); + JMenuItem card2=new JMenuItem("粘贴"); + mnNewMenu.add(card1); + mnNewMenu.add(card2); + + JMenu mnNewMenu_1 = new JMenu("查看"); + menubar.add(mnNewMenu_1); + JMenuItem card3=new JMenuItem("科学型"); + JMenuItem card4=new JMenuItem("标准型"); + mnNewMenu_1.add(card3); + mnNewMenu_1.add(card4); + + JMenu mnNewMenu_2 = new JMenu("帮助"); + menubar.add(mnNewMenu_2); + JMenuItem card5=new JMenuItem("关于"); + mnNewMenu_2.add(card5); + + } + + + public void init() { + resultText.setHorizontalAlignment(JTextField.RIGHT); + resultText.setEditable(false); + text1.setHorizontalAlignment(JTextField.LEFT); + text1.setEditable(false); + JPanel keyPanel = new JPanel(); + keyPanel.setLayout(new GridLayout(4,5,5,5)); + for(int i=0;i= 0) { + Number(label); + } + + else { + Operator(label); + } + + } + + + private void MC() { + storage=""; + text1.setText(null); + } + + + private void MR() { + + resultText.setText(storage); + } + + + private void MS() { + storage = resultText.getText(); + text1.setText("M"); + } + + + private void Madd() { + n=Double.parseDouble(storage); + double x=Double.parseDouble(resultText.getText()); + n=x+n; + String storage=""+n; + text1.setText("M"); + } + + + private void Operator(String key) { + if(operator.equals("/")) { + if(getNumberFromText() == 0.0) { + operateFlag = false; + resultText.setText("除数不能为零"); + } + else { + resultNum /= getNumberFromText(); + } + } + else if (operator.equals("1/x")) { + if (resultNum == 0.0) { + operateFlag = 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 = resultNum / 100; + } + else if (operator.equals("+/-")) { + resultNum = resultNum * (-1); + } + else if (operator.equals("=")) { + resultNum = getNumberFromText(); + } + + if (operateFlag) { + 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; + first = true; + operateFlag = true; + + } + + private void Number(String key) { + if(first) { + resultText.setText(key); + } + else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) { + resultText.setText(resultText.getText() + "."); + } + else if (!key.equals(".")) { + resultText.setText(resultText.getText() + key); + } + first = false; + } + + + private void C() { + resultText.setText("0"); + first = true; + operator = "="; + + } + + + private void Backspace() { + String text = resultText.getText(); + int i =text.length(); + if(i>0) { + text =text.substring(0,i-1); + } + if(i==0) { + resultText.setText("0"); + first = true; + operator = "="; + } + else { + resultText.setText(text); + } + } + + + private double getNumberFromText() { + double result = 0; + try { + result = Double.valueOf(resultText.getText()).doubleValue(); + } catch (NumberFormatException e) { + + } + return result; + } + + + public static void main(String[] args) { + Cauculater calculator = new Cauculater(); + calculator.setVisible(true); + calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + +} \ No newline at end of file