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();
}
}