import java.awt.*;
import java.awt.event.*;
public class calculator implements ActionListener,WindowListener {
private Frame f; //计算器窗口容器。
private TextField result; //文本框。
private float Num1, Num2, NumR; //Num1用于保存第一个值,Num2用于保存第二个值, NumR保存结果的值。
private char sign; //sign用于保存运算符号。
public static void main(String args[]) { //主函数main。
calculator cal = new calculator();
cal.go();
}
void go() { //go()方法,用于启动计算器。
f = new Frame();
f.setLayout(new BorderLayout(5,5));
result = new TextField("0", 20);
result.setEditable(false);
f.add(result, "North");
Panel p = new Panel();
p.setLayout(new GridLayout(4,4,5,5));
p.add(mybutton("7"));
p.add(mybutton("8"));
p.add(mybutton("9"));
p.add(mybutton("+"));
p.add(mybutton("4"));
p.add(mybutton("5"));
p.add(mybutton("6"));
p.add(mybutton("-"));
p.add(mybutton("1"));
p.add(mybutton("2"));
p.add(mybutton("3"));
p.add(mybutton("*"));
p.add(mybutton("0"));
p.add(mybutton("C"));
p.add(mybutton("="));
p.add(mybutton("/"));
f.add(p, "Center");
f.addWindowListener(this); //给窗体加上一个关闭事件。
f.setSize(180,220);
f.setResizable(false); //自由调节窗体大小为false。
f.setVisible(true);
}
public Button mybutton(String s) { //动态建立一个按钮和动态加入事件。
Button TempButton=new Button(s);
TempButton.addActionListener(this); //加入行动事件。
return TempButton;
}
public void actionPerformed(ActionEvent e) {
String input = e.getActionCommand();
String str = "0123456789";
String op = "+-*/";
if (str.indexOf(input) >= 0) { //当单击的按钮是数字按钮时进行下面处理。(参考Java书P157)
if (result.getText().equals("0")) //如果显示值中已经是0,如果再次输入的是零,则不处理。
result.setText(input);
else {
if (NumR == 0) //判定留在文本框中的值不为运算结果值。
result.setText(result.getText().trim() + input);
else {
NumR = 0;
result.setText("" + input);
}
}
}
else if (op.indexOf(input) >= 0) { //当单击的按钮是运算符按钮时进行下面处理。
Num1 = Float.parseFloat(result.getText().trim());
result.setText("");
sign = op.charAt(op.indexOf(input)); //得到相应的运算符。
//op.charAt(n)返回在op字符串中的第n个位置的值。
//op.indexOf(input)返回字符input在op中出现的位置,位置值为整型,并且值从0开始。
}
else if (input.equals("=")) { //当单击的按钮是是=号时,进行运算。
Num2 = Float.parseFloat(result.getText().trim());
switch (sign) {
case '+': {
NumR = Num1 + Num2;
result.setText("" + NumR);
break;
}
case '-': {
NumR = Num1 - Num2;
result.setText("" + NumR);
break;
}
case '*': {
NumR = Num1 * Num2;
result.setText("" + NumR);
break;
}
case '/': {
if (Num2 != 0) { //当Num2不等于0的时候,才进行运算。
NumR = Num1 / Num2;
result.setText("" + NumR);
}
else
result.setText("Error");
break;
}
default:;
}
}
else if (input.equals("C")) { //当单击的按钮是C号时,初始化计算器。
Num1 = 0;
Num2 = 0;
NumR = 0;
sign = ' ';
result.setText("0");
}
}
public void windowClosing(WindowEvent e) { System.exit(-1); }
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}