Java监听器的原理和组成及实现

时间:6年前   阅读:4872

1、原理:

  当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。

例如:创建一个“人”类Class Person

人拥有吃的方法public void eat(){},我们的目的就是,在这个人吃之前要提醒他洗手,所以我们就要监听这个人,不管他在什么时候吃,我们都要能够监听到并且提醒他洗手,通俗点讲这个就是监听器的作用(在吃之前提醒他洗手)。

2、组成:

//1.事件源里有事件

//2.监听器里有监听方法

//3.事件源里注册监听器,事件方法中执行监听器中的监听方法。

//4.创建事件源对象,注册监听器到事件源,执行事件方法

3、实现:

package com.hg.listener;

public class Person {//事件源

    PersonListener personListener;

    public void registListener(PersonListener pListener){

        this.personListener = pListener;//

    }

    public void run(){//事件

        if (personListener!=null) {

            

            personListener.dorun();//事件方法中执行监听器中的监听方法

        }

        System.out.println("人具有跑的方法");

    }

    public void eat(){

        if (personListener!=null) {

            

            personListener.doeat();

        }

        System.out.println("人具有吃的方法");

    }

}

 

package com.hg.listener;
public class PersonListener {//监听器
    public void dorun(){//监听方法
        System.out.println("监听到了人跑的方法");
    }
    public void doeat(){
        System.out.println("监听到了人吃的方法");
    }
}

 

package com.hg.listener;
public class TestListener {
    /**
     * @param args
     */
    public static void main(String[] args) {
        Person person = new Person();//创建事件源对象
        person.registListener(new PersonListener());//注册监听器到事件源
        person.run();//执行事件方法
        person.eat();
    }
}

 4.案例:监听window窗口的事件监听器

package me.gacl.listener.demo;

import java.awt.Frame;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

public class Demo1 {

    /**

     *java的事件监听机制

     *1、事件监听涉及到三个组件:事件源、事件对象、事件监听器

     *2、当事件源上发生某一个动作时,它会调用事件监听器的一个方法,并在调用该方法时把事件对象传递进去,

     *    开发人员在监听器中通过事件对象,就可以拿到事件源,从而对事件源进行操作。

     */

    public static void main(String[] args) {

        

        Frame f = new Frame();

        f.setSize(400, 400);

        f.setVisible(true);

        

        //注册事件监听器

        f.addWindowListener(new WindowListener(){

            public void windowActivated(WindowEvent e) {

                

            }

            public void windowClosed(WindowEvent e) {

                

            }

            /**

             * 当window窗体关闭时就会WindowListener这个监听器监听到,

             * 监听器就会调用windowClosing方法处理window窗体关闭时的动作

             */

            public void windowClosing(WindowEvent e) {

                //通过事件对象e来获取事件源对象

                Frame f = (Frame) e.getSource();

                System.out.println(f+"窗体正在关闭");

                f.dispose();

            }

            public void windowDeactivated(WindowEvent e) {

                

            }

            public void windowDeiconified(WindowEvent e) {

                

            }

            public void windowIconified(WindowEvent e) {

                

            }

            public void windowOpened(WindowEvent e) {

                

            }

        });

    }

}

本站声明:网站内容来源于网络,如有侵权,请联系我们https://www.qiquanji.com,我们将及时处理。

微信扫码关注

更新实时通知

上一篇:认沽期权参与热情升温

下一篇:如何在期权止损与扛单中找到平衡?

网友评论

请先 登录 再评论,若不是会员请先 注册