监听器Listener


一、Listener是什么?

概念: 监听器用于监听web应用中某些对象( request, session, application)状态的变化,然后作出相应的响应处理。

实现原理:事件监听机制涉及到三个组件:事件源、事件、事件监听器

  • 事件源:发生事件的组件或对象。
  • 事件:每个事件源都对应一组事件。比如按钮被点击, session创建、销毁等等
  • 事件监听器:用来监听事件源上ー个或多个事件。
    上述三个组件都定义好了,我们要做的就是当事件发生时,完成事件处理。编写监听器的实现类

工作原理:当事件源上发生某一个动作时,它会调用事件监听器的一个方法,并在调用该方法时把事件对象(封装事件源及动作)传递进去,开发人员在监听器中通过事件参数对象,就 可以拿到事件源,从而对事件源进行处理。

二、简单GUI编程理解监听器:

事件源:frame窗口

事件:点击关闭

监听器:匿名内部类(实现监听器),监听窗口关闭

public class Demo01 {
   
    public static void main(String[] args) {
   
        //创建窗口对象
        Frame frame = new Frame("我的窗口");
        frame.setSize(500,500);
        //显示窗口
        frame.setVisible(true);
        //添加监听器
        frame.addWindowListener(new WindowListener() {
   
            @Override
            public void windowOpened(WindowEvent e) {
   
            }
            @Override
            public void windowClosing(WindowEvent e) {
   
                System.out.println("窗口要关闭了");
                //关闭窗口
                frame.dispose();
            }
            @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 class Person {
   

    private String name;
    //监听器声明
    private PersonListener listener;
    public Person() {
   
    }
    public Person(String name, PersonListener listener) {
   
        this.name = name;
        this.listener = listener;
    }

    public Person(String name) {
   
        this.name = name;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }
		//事件
    public void eat(){
   
        System.out.println(this.name+"\tis eating....");
        if (listener!=null){
   
            listener.doEat(new Event(this));
        }
    }
    public void run(){
   
        System.out.println(this.name+"\tis running....");
        if (listener!=null){
   
            listener.doRun(new Event(this));
        }
    }
    //注册监听器
    public void register(PersonListener listener){
   
        this.listener = listener;
    }

    @Override
    public String toString() {
   
        return "Person{" +
                "name='" + name + '\'' +
                ", listener=" + listener +
                '}';
    }
}

//事件参数(事件源对象或动作)

public class Event {
   
    //事件参数(事件源对象或动作)
    private Object source;

    public Event() {
   
    }

    public Event(Object source) {
   
        this.source = source;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值