calculator.java~3~
来自「教材管理系统」· JAVA~3~ 代码 · 共 402 行
JAVA~3~
402 行
package bookmanager;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.*;import javax.swing.border.*;import java.util.*;public class ComputerPad extends JFrame implements ActionListener{NumberButton[] numberButton;OperationButton[] operationButton;JButton dotButton,signButton,backspaceButton, reciprocalButton, equalButton, clearZeroButton;JPanel panel;JTextField resultShow;String operators[] = {"+", "-", "*", "/" };LinkedList String dataList;boolean equalButtonIsPressed = false;public class NumberButton extends JButton{ int number; public NumberButton(int number){ super("" + number); this.number = number; setForeground(Color.blue); //setFont(new Font("Serif", Font.BOLD,16)); } public int getNumber(){ return number; }}public ComputerPad(){ super("计算器"); dataList = new LinkedList<String>(); numberButton = new NumberButton[10]; for(int i = 0; i <= 9; i++){ numberButton[i] = new NumberButton(i); numberButton[i].addActionListener(this); } operationButton = new OperationButton[4]; for(int i = 0;i < 4; i++){ operationButton[i] = new OperationButton(operators[i]); operationButton[i].addActionListener(this); } dotButton = new JButton("."); signButton = new JButton("+/-"); equalButton = new JButton("="); reciprocalButton = new JButton("1/x"); backspaceButton = new JButton("退格"); clearZeroButton = new JButton("C"); clearZeroButton.setForeground(Color.red); backspaceButton.setForeground(Color.red); reciprocalButton.setForeground(Color.red); equalButton.setForeground(Color.blue); signButton.setForeground(Color.blue); dotButton.setForeground(Color.blue); clearZeroButton.addActionListener(this); backspaceButton.addActionListener(this); reciprocalButton.addActionListener(this); equalButton.addActionListener(this); signButton.addActionListener(this); dotButton.addActionListener(this); resultShow = new JTextField(10); resultShow.setHorizontalAlignment(JTextField.RIGHT); resultShow.setForeground(Color.blue); resultShow.setFont(new Font("TimesRoman", Font.PLAIN, 14)); resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED)); resultShow.setBackground(Color.white); resultShow.setEditable(false); panel = new JPanel(); panel.setLayout(new GridLayout(4,5)); //面板中的第一行 panel.add(numberButton[1]); panel.add(numberButton[2]); panel.add(numberButton[3]); panel.add(operationButton[0]); panel.add(clearZeroButton); //面板中的第2行 panel.add(numberButton[4]); panel.add(numberButton[5]); panel.add(numberButton[6]); panel.add(operationButton[1]); panel.add(backspaceButton); //面板中的第3行 panel.add(numberButton[7]); panel.add(numberButton[8]); panel.add(numberButton[9]); panel.add(operationButton[2]); panel.add(reciprocalButton); //面板中的第4行 panel.add(numberButton[0]); panel.add(signButton); panel.add(dotButton); panel.add(operationButton[3]); panel.add(equalButton); add(panel, BorderLayout.CENTER); add(resultShow, BorderLayout.NORTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); setBounds(100, 50, 340, 180); setResizable(false); validate();}public class OperationButton extends JButton { String operator; public OperationButton(String s){ super(s); operator = s; setForeground(Color.red); } public String getOperator(){ return operator; }}public void actionPerformed(ActionEvent e) { //如果按下的是“数字按钮” if(e.getSource() instanceof NumberButton){ NumberButton b = (NumberButton)e.getSource(); if(dataList.size() == 0){ int number = b.getNumber(); dataList.add("" + number); resultShow.setText("" + number); equalButtonIsPressed = false; } else if(dataList.size() == 1 && equalButtonIsPressed == false){ int number = b.getNumber(); String num = (String)dataList.getFirst(); String s = num.concat("" + number); dataList.set(0, s); resultShow.setText(s); } else if(dataList.size() == 1 && equalButtonIsPressed == true){ int number = b.getNumber(); dataList.removeFirst(); dataList.add("" + number); equalButtonIsPressed = false; resultShow.setText("" + number); } else if(dataList.size() == 2){ int number = b.getNumber(); dataList.add("" + number); resultShow.setText("" + number); }else if(dataList.size() == 3){ int number = b.getNumber(); String num = (String)dataList.getLast(); String s = num.concat("" + number); dataList.set(2, s); resultShow.setText(s); } } //如果按下的是“各种操作符按钮” else if(e.getSource() instanceof OperationButton){ OperationButton b = (OperationButton)e.getSource(); if(dataList.size() == 1){ String fuhao = b.getOperator(); dataList.add(fuhao); } else if(dataList.size() == 2){ String fuhao = b.getOperator(); dataList.set(1, fuhao); } else if(dataList.size() == 3){ String fuhao = b.getOperator(); String number1 = (String)dataList.getFirst(); String number2 = (String)dataList.getLast(); String operator = (String)dataList.get(1); //try{ double n1 = Double.parseDouble(number1); double n2 = Double.parseDouble(number2); double n = 0; if(operator.equals("+")){ n = n1 + n2; } else if(operator.equals("-")){ n = n1 - n2; } else if(operator.equals("*")){ n = n1 * n2; } else if(operator.equals("/")){ n = n1 / n2; } dataList.clear(); dataList.add("" + n); dataList.add(fuhao); resultShow.setText("" + n);// }// catch(Exception ee){//// } } } //如果按下的是“等号按钮” else if(e.getSource() == equalButton){ equalButtonIsPressed = true; if(dataList.size() == 1 || dataList.size() == 2){ String num = (String)dataList.getFirst(); String operator = (String)dataList.get(1); double n = Double.parseDouble(num); if(operator.equals("+")){ n = n + n; } else if(operator.equals("-")){ n = n - n; } else if(operator.equals("*")){ n = n * n; } else if(operator.equals("/")){ n = n / n; } resultShow.setText("" + n); dataList.clear(); dataList.add("" + n); } else if(dataList.size() == 3){ String number1 = (String)dataList.getFirst(); String number2 = (String)dataList.getLast(); String operator = (String)dataList.get(1); try{ double n1 = Double.parseDouble(number1); double n2 = Double.parseDouble(number2); double n = 0; if(operator.equals("+")){ n = n1 + n2; } else if(operator.equals("-")){ n = n1 - n2; } else if(operator.equals("*")){ n = n1 * n2; } else if(operator.equals("/")){ n = n1 / n2; } resultShow.setText("" + n); dataList.set(0, "" + n); dataList.removeLast(); dataList.removeLast(); } catch(Exception ee){ } } } //如果按下的是“小数点按钮” else if(e.getSource() == dotButton){ if(dataList.size() == 0){ equalButtonIsPressed = false; } else { String label = dotButton.getLabel(); if(dataList.size() == 1){ String dot = label; String num = (String)dataList.getFirst(); String s = null; if(num.indexOf(dot) == -1){ s = num.concat(dot); dataList.set(0, s); } else{ s = num; } dataList.set(0, s); resultShow.setText(s); } else if(dataList.size() == 3){ String dot = label; String num = (String)dataList.getLast(); String s = null; if(num.indexOf(dot) == -1){ s = num.concat(dot); dataList.set(2, s); } else{ s = num; } resultShow.setText(s); } } } //如果按下的是“退格按钮” else if(e.getSource() == backspaceButton){ if(dataList.size() == 1){ String num = (String)dataList.getFirst(); if(num.length() >= 1){ num = num.substring(0, num.length() - 1); } } else if(dataList.size() == 3){ } } //如果按下的是“正负号按钮” else if(e.getSource() == signButton){ if(dataList.size() == 1){ } else if(dataList.size() == 3){ } } //如果按下的是“倒数按钮” else if(e.getSource() == reciprocalButton){ if(dataList.size() == 1 || dataList.size() == 2){ String number1 = (String)dataList.getFirst(); try{ double d = Double.parseDouble(number1); d = 1.0 / d; String str = String.valueOf(d); dataList.set(0, str); resultShow.setText(str); } catch(Exception ee){ } } else if(dataList.size() == 3){ String number2 = (String)dataList.getLast(); try{ double d = Double.parseDouble(number2); d = 1.0 / d; String str = String.valueOf(d); dataList.set(0, str); resultShow.setText(str); } catch(Exception ee){ } } } //如果按下的是“清零按钮” else if(e.getSource() == clearZeroButton){ equalButtonIsPressed = false; resultShow.setText("0"); dataList.clear(); }}public static void main(String[] args){ new ComputerPad();}}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?