Java事件監聽的四種實現方式


1.事件對象: 
一般繼承自java.util.EventObject對象,由開發者自行定義.

2.事件源: 
就是觸發事件的源頭,不同的事件源會觸發不同的事件類型.

3.事件監聽器: 
事件監聽器負責監聽事件源發出的事件.一個事件監聽器通常實現java.util.EventListener這個標識接口. 

其整個處理過程是這樣的,事件源可以注冊事件監聽器對象,並可以向事件監聽器對象發送事件對象.事件發生后,事件源將事件對象發給已經注冊的所有事件監聽器. 
監聽器對象隨后會根據事件對象內的相應方法響應這個事件.

 

以下為四種實現方式

Java代碼:

package TT;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.RootPaneContainer;
/**
 *自身類作為事件監聽器 :
*/
class EventListener1 extends JFrame implements ActionListener {
    private JButton btBlue, btDialog;

    public EventListener1() {
        setTitle("Java GUI 事件監聽處理");
        setBounds(100, 100, 500, 350);
        setLayout(new FlowLayout());
        btBlue = new JButton("藍色");
        btDialog = new JButton("彈窗");

        // 將按鈕添加事件監聽器
        btBlue.addActionListener(this);
        btDialog.addActionListener(this);

        add(btBlue);
        add(btDialog);

        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    // ***************************事件處理***************************
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btBlue) {
            Container c = getContentPane();
            c.setBackground(Color.BLUE);
        } else if (e.getSource() == btDialog) {
            JDialog dialog = new JDialog();
            dialog.setBounds(300, 200, 400, 300);
            dialog.setVisible(true);
        }
    }

}

/**
 * Java事件監聽處理——內部類處理
 *
 */

class EventListener2 extends JFrame {
    private JButton btBlue, btDialog;

    // 構造方法
    public EventListener2() {
        setTitle("Java GUI 事件監聽處理");
        setBounds(100, 100, 500, 350);
        setLayout(new FlowLayout());
        btBlue = new JButton("藍色");
        btDialog = new JButton("彈窗");
        // 添加事件監聽器對象(面向對象思想)
        btBlue.addActionListener(new ColorEventListener());
        btDialog.addActionListener(new DialogEventListener());

        add(btBlue);
        add(btDialog);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    // 內部類ColorEventListener,實現ActionListener接口
    class ColorEventListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            Container c = getContentPane();
            c.setBackground(Color.BLUE);
        }
    }

    // 內部類DialogEventListener,實現ActionListener接口
    class DialogEventListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            JDialog dialog = new JDialog();
            dialog.setBounds(300, 200, 400, 300);
            dialog.setVisible(true);
        }
    }

}

/**
 * Java事件監聽處理——匿名內部類處理
 *
 */
class EventListener3 extends JFrame {
    private JButton btBlue, btDialog;

    public EventListener3() {
        setTitle("Java GUI 事件監聽處理");
        setBounds(100, 100, 500, 350);
        setLayout(new FlowLayout());

        btBlue = new JButton("藍色");
        btDialog = new JButton("彈窗");

        // 添加事件監聽器(此處即為匿名類)
        btBlue.addActionListener(new ActionListener() {
            // 事件處理
            @Override
            public void actionPerformed(ActionEvent e) {
                Container c = getContentPane();
                c.setBackground(Color.BLUE);
            }
        });

        // 並添加事件監聽器
        btDialog.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JDialog dialog = new JDialog();
                dialog.setBounds(300, 200, 400, 300);
                dialog.setVisible(true);
            }
        });

        add(btBlue);
        add(btDialog);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

/**
 * Java事件監聽處理——外部類處理
 *
 */
class EventListener4 extends JFrame {
    private JButton btBlue, btDialog;

    public EventListener4() {
        setTitle("Java GUI 事件監聽處理");
        setBounds(100, 100, 500, 350);
        setLayout(new FlowLayout());
        btBlue = new JButton("藍色");
        btDialog = new JButton("彈窗");
        // 將按鈕添加事件監聽器
        btBlue.addActionListener(new ColorEventListener(this));
        btDialog.addActionListener(new DialogEventListener());

        add(btBlue);
        add(btDialog);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

// 外部類ColorEventListener,實現ActionListener接口
class ColorEventListener implements ActionListener {
    private EventListener4 el;

    ColorEventListener(EventListener4 el) {
        this.el = el;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Container c = el.getContentPane();
        c.setBackground(Color.BLUE);
    }
}


// 外部類DialogEventListener,實現ActionListener接口
class DialogEventListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        JDialog dialog = new JDialog();
        dialog.setBounds(300, 200, 400, 300);
        dialog.setVisible(true);
    }
}

public class ActionListenerTest {
    public static void main(String args[]) {
        new EventListener4();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM