学习完java组件与事件处理,写了个简单的计算器。事件处理需要向发生事件源的组件注册监视器,产生事件源后将事件对象传递给监视器,然后监视器调用对应的方法处理事件。
package test;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class aa {
Button deng = new Button(" = ");
TextField tx1 = new TextField(8);//创建相应的组件
TextField tx2 = new TextField(8);
TextField tx3 = new TextField(8);
Choice list = new Choice();
public static void main(String[] args) {
new aa().init();
}
public void init(){
list.add("+");list.add("-");list.add("*");list.add("/");
deng.addActionListener(new ActionHandler());
Frame f = new Frame(); //声明容器
f.setLayout(new FlowLayout()); //设置布局
f.add(tx1);
f.add(list);
f.add(tx2);
f.add(deng);
f.add(tx3);
f.setSize(400, 300);
f.setLocation(500, 350);
f.setVisible(true);
}
class ActionHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
/*
* 根据符号,进行运算,放置结果,晴空前面输入数据
*/
//通过实践可以得到事件源,通过实践源可以得到容器,通过容器可以打得所有的组件。
String op1 =tx1.getText();
String op2 = tx2.getText();
double a;
double b;
try {
a = Double.parseDouble(op1);
b = Double.parseDouble(op2);
} catch (NumberFormatException e1) {
tx3.setText("输入数据不正确!!,重新输入");
return;
}
double r = 0.0;
String op = list.getSelectedItem();
char c = op.charAt(0);
switch (c) {
case '+':
r = a+b;
break;
case '-':
r = a-b;
break;
case '*':
r = a*b;
break;
case '/':
r = a/b;
break;
}
tx3.setText(r+"");
tx1.setText("");
tx2.setText("");
}
}
}