java中的事件监听是怎样实现随时监听的
2016-04-20 20:49
375 查看
java中的事件监听是怎样实现随时监听的
标签(空格分隔): Java参考文献
[1]. http://www.jcodecraeer.com/a/chengxusheji/java/2012/0822/371.html
事件监听机制
Java中的事件监听是整个Java消息传递的基础和关键。牵涉到三类对象:事件源(Event Source)、事件(Event)、事件监听器(Event Listener)。
● 事件源是事件发生的场所,通常就是各个组件,它可以是一个按钮,编辑框等。
● 事件监听者负责监听事件源所发生的事件,并对各种事件做出相应的响应。
● 事件是描述事件源状态改变的对象。
具体实现呢,可以看看Button的源码。可能不好看得懂。那好我们仿照侯捷先生的作法,来模拟一个这样的事件传递:
定义一个自己的事件
将事件源中value的最新值告知监听器public class MyEvent { private int value; public int getValue() { return value; } public void setValue(int value) { this.value = value; } }
做一个监听器接口 Listener
当外部响应触发事件源上的事件时,产生一个事件对象,该事件对象会作为参数传递给监听器的事件处理方法public interface Listener { public void eventChanged(MyEvent e); }
做一个事件发生者
● 当事件源中的value值发生改变时,会促发事件● 监听器在事件源上注册,事件源会保存该监听器,在事件触发时调用监听器的事件处理方法
public class MySource { private int value; private Vector<Listener> listeners = new Vector<Listener>(); /** * 添加监听器 * @param listener */ public void addListener(Listener listener){ listeners.add(listener); } public void setValue(int value){ this.value = value; //发送消息 MyEvent e = new MyEvent(); e.setValue(value); for(int i = 0; i < listeners.size(); i++){ listeners.get(i).eventChanged(e); } } }
定义一个监听器
如果谁想监听MySource的value值改变了,就在MySource哪儿注册一下,然后写消息处理代码,就可以了,我们定义这样一个监听者:public class MyListener implements Listener{ @Override public void eventChanged(MyEvent e) { // TODO Auto-generated method stub System.out.println("value changed to:" + e.getValue()); } }
这样,当MySource的value真的改变时,就会触发此方法。
注册监听器
在其他代码中把MyListener注册到MySource:public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MySource s = new MySource(); MyListener l = new MyListener(); s.addListener(l); s.setValue(10); } } #结果 value changed to:10
Java中AWT/Swing的事件传递的实现,现在版本于上述有所不同,但应该都是这个原理。
相关文章推荐
- java毕向东听课笔记20(基本数据类型包装类)
- eclipse里面对比两个java文件
- Java的三大方向介绍
- Java千百问_05面向对象(008)_java中覆盖是什么
- Java Collections Framework概览
- java泛型的理解
- java final
- java 复制复杂链表
- Java中的instanceof关键字
- Java 8 Stream
- struts原理之xwork
- 阿里巴巴2016java研发笔试附加题
- 【JUC】JDK1.8源码分析之CountDownLatch(五)
- SpringMvc中自动注入失败原因
- Java 爬虫入门(网易云音乐和知乎实例)
- JAVA继承关系中构造方法的调用次序详解
- Myeclipse下web项目图片加载不出来
- 六大设计原则(3)接口隔离原则
- java--web.xml中url-pattern的映射规则
- java并发-ThreadLocal