直接看程序。
package org.ui.swing.actionEvent;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 用内部类实现:
* 该程序实现的功能是加法计算,有三个输入框,点按钮时计算出前两个输入框的和放到第三个输入框中。
* 20090107---22:54
* 内部类的优点:
* 可以方便的访问包装类的成员方法和函数
* 可以更清楚的组织逻辑,防止不应该被其他类访问时即对外隐藏信息
* */
public class TFMath3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TFrame3 fm=new TFrame3();
fm.launchFrame();
}
}
class TFrame3 extends Frame{
TextField t1,t2,t3;
public TFrame3(){
//使用匿名内部类实现点击关闭图标窗口关闭。
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("over");
setVisible(false);
System.exit(0);//正常退出
//System.exit(-1);//非正常退出
}
});
}
public void launchFrame(){
t1=new TextField(10);//宽度10
t2=new TextField(10);
t3=new TextField(15);
Label lb=new Label("+");
Button bt=new Button("=");
//给button注册事件监听器
bt.addActionListener(new MyMonitor());
setLayout(new FlowLayout());//因为frame默认是borderlayout,所以要设置FlowLayout
add(t1);
add(lb);
add(t2);
add(bt);
add(t3);
pack();
this.setVisible(true);
}
//因为使用的是内部类,所以可以直接访问外部成员
private class MyMonitor implements ActionListener{
public void actionPerformed(ActionEvent e){
int num1=Integer.parseInt(t1.getText());
int num2=Integer.parseInt(t2.getText());
t3.setText(""+(num1+num2));
}
}
}