diff --git a/com.java b/com.java new file mode 100644 index 0000000..e041ee1 --- /dev/null +++ b/com.java @@ -0,0 +1,118 @@ +package computer; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.MessageFormat; +import java.util.Arrays; +public class com { + public static void main(String[] args) { + new JS(); + } +} +class JS extends JFrame implements ActionListener { + private final StringBuilder sBuilder = new StringBuilder(); + JTextArea text = new JTextArea(); + double a, b; + Double sum; + String lastOperator = "="; + public JS() { + setBounds(100, 100, 400, 400); + setTitle("计算器"); + JMenuBar menubar = new JMenuBar(); + this.setJMenuBar(menubar); + this.setLayout(new BorderLayout()); + JPanel p1 = new JPanel(); + JPanel p2 = new JPanel(); + text.setPreferredSize(new Dimension(370, 60)); + p2.setLayout(new FlowLayout()); + p1.add(text); + this.add(p1, BorderLayout.NORTH); + p2.setLayout(new GridLayout(5, 4)); + JButton[] button = new JButton[20]; + button[0] = new JButton("C"); + button[1] = new JButton("CE"); + button[2] = new JButton("%"); + button[3] = new JButton("÷"); + button[4] = new JButton("7"); + button[5] = new JButton("8"); + button[6] = new JButton("9"); + button[7] = new JButton("*"); + button[8] = new JButton("4"); + button[9] = new JButton("5"); + button[10] = new JButton("6"); + button[11] = new JButton("-"); + button[12] = new JButton("1"); + button[13] = new JButton("2"); + button[14] = new JButton("3"); + button[15] = new JButton("+"); + button[16] = new JButton(" "); + button[17] = new JButton("0"); + button[18] = new JButton("."); + button[19] = new JButton("="); + Arrays.stream(button).forEach(p2::add); + this.add(p2, BorderLayout.CENTER); + for (JButton jButton : button) { + jButton.addActionListener(this); + } + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + public void actionPerformed(ActionEvent e) { + String lab = e.getActionCommand(); + + if (Character.isDigit(lab.charAt(0)) || lab.equals(".")) { + sBuilder.append(lab); + text.setText(sBuilder.toString()); + } else if (lab.equals("CE")) { + sBuilder.deleteCharAt(sBuilder.length() - 1); + text.setText(sBuilder.toString()); + } else if (lab.equals("C")) { + sBuilder.setLength(0); + text.setText(""); + } else if (lab.equals("+") || lab.equals("-") || lab.equals("*") || lab.equals("÷") || lab.equals("%")) { + if (sBuilder.length() > 0) { + a = Double.parseDouble(sBuilder.toString()); + sBuilder.setLength(0); + lastOperator = lab; + text.setText(MessageFormat.format("{0} {1} ", a, lastOperator)); + } + } else if (lab.equals("=")) { + if (lastOperator != null && !lastOperator.isEmpty() && sBuilder.length() > 0) { + b = Double.parseDouble(sBuilder.toString()); + calculate(); + } + } + } + private void calculate() { + switch (lastOperator) { + case "+": + sum = a + b; + break; + case "-": + sum = a - b; + break; + case "*": + sum = a * b; + break; + case "÷": + if (b == 0) { + text.setText("除数不能为0"); + return; + } + sum = a / b; + break; + case "%": + if (b == 0) { + text.setText("除数不能为0"); + return; + } + sum = a % b; + break; + } + text.setText(sum + ""); + sBuilder.setLength(0); + sBuilder.append(sum); + lastOperator = "="; + } +} \ No newline at end of file