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);
}
}
}