AWT的事件处理流程示意图
实现AWT事件处理机制的步骤如下
- 实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一种XxxListener接口
- 创建普通组件(事件源),创建事件监听器对象
- 调用addXXXListener()方法将事件监听器对象注册给普通组件。
举个简单的小栗子
package AWTdemo.event;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Mike
* @use 最简单的事件处理Demo
*/
public class EventDemo1 {
private Frame frame = new Frame("测试");
private Button button = new Button("submit");
private TextField textField = new TextField(30);
public void init (){
button.addActionListener(new SubmitListener());
frame.add(textField,BorderLayout.NORTH);
frame.add(button,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
class SubmitListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("用户点击了提交按钮");
textField.setText("hello world");
}
}
public static void main(String[] args) {
new EventDemo1().init();
}
}
一个监听器监听多个组件,一个组件被多个监听器监听
package AWTdemo.event;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Mike
* @use 一个监听器监听多个组件,一个组件被多个监听器监听
*/
public class EventDemo2 {
private Frame frame = new Frame();
private Button button1 = new Button("Button1");
private Button button2 = new Button("Button2");
private TextArea ta = new TextArea(6,30);
public void init(){
FirstListener f1 = new FirstListener();
button1.addActionListener(f1);
button2.addActionListener(f1);
button2.addActionListener(new SecondListener());
Panel panel = new Panel();
panel.add(button1);
panel.add(button2);
frame.add(panel,BorderLayout.SOUTH);
frame.add(ta,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public class FirstListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
ta.append("第一个事件监控器被触发,事件源是:"+e.getActionCommand()+"\n");
}
}
public class SecondListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
ta.append("第二个事件监控器被触发,事件源是:"+e.getActionCommand()+"\n");
}
}
public static void main(String[] args) {
new EventDemo2().init();
}
}
窗口监听器,有好多,这里只举例关闭窗口,其他的同理重写方法体就好了
package AWTdemo.event;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/**
* @author Mike
* @use WindowListener用法,这里只写如何关闭窗口
*/
public class EventDemo3 {
private Frame frame = new Frame();
private TextArea ta = new TextArea(6,40);
public void init(){
frame.addWindowListener(new CloseListener());
frame.add(ta,BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
}
public class CloseListener implements WindowListener{
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
ta.append("用户关闭窗口");
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
public static void main(String[] args) {
new EventDemo3().init();
}
}
匿名内部类实现监听器
package AWTdemo.event;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/**
* @author Mike
* @use 匿名内部类实现监听器
*/
public class EventDemo4 {
private Frame frame = new Frame();
private TextArea ta = new TextArea(6,40);
public void init(){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("用户关闭窗口");
System.exit(0);
}
});
frame.add(ta,BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new EventDemo4().init();
}
}