对于Java监听器的理解
2017-01-10 17:36
435 查看
监听器模式,包括三个重要的对象,即事件源、事件对象以及监听器对象。
![](http://img.blog.csdn.net/20170110174538239?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc2MjkwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
事件源将在发生事件时向所有的注册的监听器发送事件对象,监听器对象使用事件对象中的信息来确定它们对事件的响应。
理解如下:事件源对象首先注册监听器对象,当触发事件源时事件源发送事件对象,eg:如果是按钮源则将按钮的动作事件对象发送给监听器对象,有监听器对象处理事件对象,其中事件对象封装或者说是包含了事件源对象的信息。
那么问题是,事件对象是如何什么时候产生的,又是如何传入到监听器对象中的?
即点击click时执行AbstractButton中的doClick(int)方法,触动DefaultButtonModel中的
setPressed(boolean),进而执行fireActionPerformed(),回调监听器类。
例子:
事件源将在发生事件时向所有的注册的监听器发送事件对象,监听器对象使用事件对象中的信息来确定它们对事件的响应。
理解如下:事件源对象首先注册监听器对象,当触发事件源时事件源发送事件对象,eg:如果是按钮源则将按钮的动作事件对象发送给监听器对象,有监听器对象处理事件对象,其中事件对象封装或者说是包含了事件源对象的信息。
那么问题是,事件对象是如何什么时候产生的,又是如何传入到监听器对象中的?
即点击click时执行AbstractButton中的doClick(int)方法,触动DefaultButtonModel中的
setPressed(boolean),进而执行fireActionPerformed(),回调监听器类。
例子:
package Test; import java.util.List; import java.util.Vector; public class PersonSource { private List<PersonListener> listeners = new Vector<PersonListener>(); public void eat(){ for(PersonListener t:listeners){ t.isCanEat(new PersonEvent(this)); } } public void run(){ } public void addPersonListener(PersonListener listener){ listeners.add(listener); } public void removePersonListener(PersonListener listener){ listeners.remove(listener); } public static void main(String[] args) { PersonSource person = new PersonSource(); person.addPersonListener(new PersonListener() { @Override public void isCanEat(PersonEvent event) { PersonSource source = event.getSource(); System.out.println(source.getClass()); } }); person.eat(); } }
package Test; public interface PersonListener { public void isCanEat(PersonEvent event); }
package Test; public class PersonEvent { private PersonSource person; public PersonEvent(PersonSource person){ this.person = person; } public PersonSource getSource(){ return person; } }
相关文章推荐
- 对于java中classpath和path的理解
- 个人理解java里的监听器与过滤器
- 对于java 反射机制的理解
- 对于面向对象的理解(JAVA)
- 菜鸟学Java:对于 java 静态变量的理解
- Java关于个人对于Socket的理解,Socket多线程批量上传文件,适合新手
- java中域的初始化,静态块和构造器的例子(考验一下初学者对于java的理解程度)
- java通过给按钮添加监听器理解接口的作用
- 对于java线程的一些理解
- 对于Thinking In Java中byte,short无符号右移的理解
- java中对于String类的理解
- 初学java,对于MVC模式的理解
- 对于as3 falsh 和 android java的一点理解
- 对于java中接口的作用与理解
- Java中对于main函数的理解
- JAVA中深拷贝与浅拷贝(在网上找到的) 希望对于理解深拷贝与浅拷贝有帮助
- java新手对于值传递和引用传递的理解
- 对于Java静态内部类的理解
- Java中对于callback的理解
- 新手对于java集合的理解