diff --git a/Cal.java b/Cal.java new file mode 100644 index 0000000000000000000000000000000000000000..cdce5a3a86d1cc68d709bb892843adf501ba2b1e --- /dev/null +++ b/Cal.java @@ -0,0 +1,177 @@ +package java2020spring; +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +public class Cal extends JFrame implements ActionListener { + /** + * + */ + private static final long serialVersionUID = 7234416171012693398L; + private final String[] Butt = { "Back", "C" }; + private final String[] Keys = { "/","sqrt" , "7", "8", "9","+", "4", "5", "6", "-", "1", "2", "3","*","0",".","=", "1/x" }; + private JButton butts[] = new JButton[Butt.length]; + private JButton keys[] = new JButton[Keys.length]; + private JTextField resultText = new JTextField("0"); + private boolean firstNum = true; + private boolean operateValidFlag = true; + private double resultNum = 0.0; + private String operator = "="; + + private double getNumberFromText() { + double result = 0.0; + try { + result = Double.valueOf(resultText.getText()).doubleValue(); + } + catch (NumberFormatException e) {} + return result; + } + /*计算器界面布置*/ + public Cal() { + setTitle("Java计算器"); + setBackground(Color.LIGHT_GRAY); + setBounds(500, 150,350,350); + setResizable(true); + JMenuBar menuB = new JMenuBar(); + JMenu menu1=new JMenu("查看(V)"); + JMenu menu2=new JMenu("编辑(E)"); + JMenu menu3=new JMenu("帮助(H)"); + JMenu menu4=new JMenu("计算器类型"); + menuB.add(menu1); + menuB.add(menu2); + menuB.add(menu3); + menuB.add(menu4); + setJMenuBar(menuB); + JMenuItem menuI = new JMenuItem("标准型计算器"); + menu4.add(menuI); + resultText.setHorizontalAlignment(JTextField.RIGHT); + resultText.setBackground(Color.LIGHT_GRAY); + resultText.setFont(new Font("Courir",Font.BOLD,30)); + JPanel Panel1 = new JPanel(); + Panel1.setLayout(new GridLayout(5, 4, 3, 3)); + for (int i = 0; i < Butt.length; i++) { + butts[i] = new JButton(Butt[i]); + Panel1.add(butts[i]); + butts[i].setFont(new Font("Courir",Font.ITALIC,17)); + } + for (int i = 0; i < Keys.length; i++) { + keys[i] = new JButton(Keys[i]); + Panel1.add(keys[i]); + keys[i].setFont(new Font("Courir",Font.PLAIN,18)); + } + keys[16].setBackground(Color.pink); + JPanel panel1 = new JPanel(); + panel1.setLayout(new BorderLayout(3,3)); + panel1.add("Center", Panel1); + JPanel panel2 = new JPanel(); + panel2.setLayout(new BorderLayout()); + panel2.add("Center", resultText); + getContentPane().setLayout(new BorderLayout(3, 5)); + getContentPane().add("North", panel2); + getContentPane().add("Center", panel1); + /*添加监听器*/ + for (int i = 0; i < Keys.length; i++) { + keys[i].addActionListener(this); + } + for (int i = 0; i < Butt.length; i++) { + butts[i].addActionListener(this); + } + } + /*不同事件的处理*/ + public void actionPerformed(ActionEvent e) { + String lab = e.getActionCommand(); + if (lab.equals(Butt[0])) { + handleBack(); + } + else if (lab.equals(Butt[1])) { + handleC(); + } + else if ("0123456789.".indexOf(lab) >= 0) { + handleNumber(lab); + } + else + handleOperator(lab); + } + /*回退处理*/ + 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"); + firstNum = true; + operator = "="; + } + else + resultText.setText(text); + } + } + /*清空处理*/ + private void handleC() { + resultText.setText("0"); + firstNum = true; + operator = "="; + } + /*数字字符处理*/ + private void handleNumber(String key) { + if (firstNum) { + resultText.setText(key); + } + else if (key.equals(".")) { + resultText.setText(resultText.getText() + "."); + } + else if (!key.equals(".")) { + resultText.setText(resultText.getText() + key); + } + firstNum = false; + } + /*运算处理*/ + private void handleOperator(String key) { + if (operator.equals("/")) { + if (getNumberFromText() == 0.0) { + operateValidFlag = false; + resultText.setText("除数不能为零!"); + } + else + resultNum= 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(); + } + if (operateValidFlag) { + long m1; + double m2; + m1 = (long) resultNum; + m2 = resultNum - m1; + if (m2 == 0) { + resultText.setText(String.valueOf (m1)); + } + else { + resultText.setText(String.valueOf(resultNum)); + } + } + operator = key; + firstNum = true; + operateValidFlag = true; + } +} diff --git a/Calmain.java b/Calmain.java new file mode 100644 index 0000000000000000000000000000000000000000..372c806621b131215d2b04e9e728809625f8a4a8 --- /dev/null +++ b/Calmain.java @@ -0,0 +1,9 @@ +package java2020spring; +import javax.swing.JFrame; +public class Calmain { +public static void main(String args[]) { + Cal Win = new Cal(); + Win.setVisible(true); + Win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} \ No newline at end of file