import java.awt.*; import java.awt.event.*;//包名 public class MyCalculator {//private为私有变量或私有方法 private Frame f;//窗体对象 private TextField tf = new TextField(30); //文本框,大小30 private long result;// private boolean append = false; private char operator = '='; private Button[] btn = new Button[15];//1 5 个按钮 public MyCalculator() { initComponent(); } private void initComponent() { f = new Frame("My Calculator V1.0");//窗体名 f.setLayout(new BorderLayout());//布局,可以省略。因为窗体的默认布局就是BorderLayout f.addWindowListener(new WindowAdapter() {//窗体适配器实现关闭功能 public void windowClosing(WindowEvent evt) { System.exit(0); } }); Panel centerPanel = new Panel(); centerPanel.setLayout(new GridLayout(5, 3));//设置布局5*3的表格式 NumberListener nl = new NumberListener(); OperatorListener ol = new OperatorListener();//两个监视器对象 btn[10] = new Button("+"); btn[11] = new Button("-"); btn[12] = new Button("*"); btn[13] = new Button("/"); btn[14] = new Button("="); for (int i = 0; i <= 9; i++) { btn[i] = new Button(String.valueOf(i)); centerPanel.add(btn[i]);//以上均为给按钮分配内存 btn[i].addActionListener(nl);// 添加监视器 if (i % 2 == 1) { centerPanel.add(btn[(i + 19) / 2]);//给10以上的按钮分配内存 btn[(i + 19) / 2].addActionListener(ol);//添加监视器 } } f.add(centerPanel, BorderLayout.CENTER); Panel northPanel = new Panel(); tf.setEditable(false); northPanel.add(tf); f.add(northPanel, BorderLayout.NORTH); } public void go() {//go方法 f.pack(); f.setVisible(true); } public static void main(String[] args) { new MyCalculator().go(); } class NumberListener implements ActionListener {//内部类实现NumberListener提供的接口 public void actionPerformed(ActionEvent e) { if (!append) { tf.setText(""); append = true; } String s = tf.getText(); s += e.getActionCommand(); tf.setText(s); if (!btn[10].isEnabled()) { for (int i = 10; i <= 14; i++) btn[i].setEnabled(true); } } } class OperatorListener implements ActionListener {//实现接口 public void actionPerformed(ActionEvent e) { if (!append) return; for (int i = 10; i <= 14; i++) btn[i].setEnabled(false); String s = tf.getText(); long num = Long.parseLong(s); append = false; switch (operator) {//实现算法 case '+': result += num; break; case '-': result -= num; break; case '*': result *= num; break; case '/': { if (num == 0) result = 0; else result /= num; break; } case '=': result = num; break; } tf.setText(String.valueOf(result));// 显示技计算结果 String op = e.getActionCommand(); operator = op.charAt(0); } } }