AWT专题
官方API http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/awt/event/package-summary.html
一、基本概念
1、JDK中提供了AWT和Swing两个包,用于GUI程序的设计和开发。
2、GUI组件可以分为两大类:基本组件和容器,分别是java.awt.Component和java.awt.Container的直接或间接子类。
3、程序的GUI部分由AWT线程管理,主线程结束后,AWT线程不会随着结束,要手动释放。
二、事件处理机制
1、三个重要的概念:
事件:用户对组件的一个操作,称之为一个事件
事件源:发生事件的组件就是事件源
事件处理器:某个Java类中的负责处理事件的成员方法
2、事件源、事件、事件处理器之间的工作关系
三、事件分类
1、按产生事件的物理操作和GUI组件的表现效果进行分类:
MouseEvent
WindowEvent
ActionEvent
.......
2、按事件的性质分类:
低级事件(如果一个事件监听器要监听多种事件,这些事件就是低级事件)
高级事件(语义事件)(如果一个事件监听器只监听一种事件,这个事件就是高级事件)
四、事件监听器
1、一个事件监听器对象负责处理一类事件
2、一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理。
3、在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口
4、事件监听器接口类的名称与事件类的名称是相对应的,例如,MouseEvent事件类的监听器接口名为MouseListener
5、处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写步骤如下:
- 编写一个实现了XxxLinstener接口的事件监听器类;
- XxxLinstener类中的用于处理该事件情况的方法中,编写处理代码;
- 调用组件的addXxxLinstener方法,将类XxxListener创建的实例对象注册到GUI
组件上;
五、事件适配器
1、JDK中也提供了大多数事件监听器接口的最简单的实现类,称之为事件适配器(Adapter)类。用事件适配器来处理事件,可以简化事件监听器编写。
六、灵活设计事件监听器类
问题:如果要在事件监听器类中访问非事件源的其他GUI组件,程序该如何写?比如,我们要在窗口中通过点击按钮关闭窗口。
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
//本身实现ActionListener接口
public class TestFrame implements ActionListener
{
Frame f = new Frame("title");
public void actionPerformed(ActionEvent e)
{
f.dispose();
}
public void init()
{
Button btn = new Button("ok");
f.add(btn);
f.setSize(300, 300);
f.setVisible(true);
btn.addActionListener(this); //在按钮上添加监听器
}
public static void main(String[] args)
{
TestFrame tf = new TestFrame();
tf.init();
}
}
七、用匿名内置类实现事件监听器
上面的问题也可以通过匿名内置类来实现
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
public class TestFrame
{
Frame f = new Frame("title");
public void init()
{
Button btn = new Button("ok");
f.add(btn);
f.setSize(300, 300);
f.setVisible(true);
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
f.dispose();
}
});
}
public static void main(String[] args)
{
TestFrame tf = new TestFrame();
tf.init();
}
}