AWT 事件處理

AWT的事件處理流程示意圖

AWT的事件處理流程示意圖

實現AWT事件處理機制的步驟如下

  1. 實現事件監聽器類,該監聽器類是一個特殊的Java類,必須實現一種XxxListener接口
  2. 創建普通組件(事件源),創建事件監聽器對象
  3. 調用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();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章