java中的事件监听是怎样实现随时监听的
2016-12-20 18:04
411 查看
[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; } }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
做一个监听器接口 Listener
当外部响应触发事件源上的事件时,产生一个事件对象,该事件对象会作为参数传递给监听器的事件处理方法public interface Listener { public void eventChanged(MyEvent e); }1
2
3
1
2
3
做一个事件发生者
● 当事件源中的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); } } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
定义一个监听器
如果谁想监听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()); } }1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
这样,当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:101
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Java中AWT/Swing的事件传递的实现,现在版本于上述有所不同,但应该都是这个原理。
相关文章推荐
- Spring Boot下配置MyBatis多数据源
- 《JAVA与模式》之工厂方法模式
- java简单排序
- java中枚举的使用
- Java注解全解析(附)——javapoet简介
- ajax返回servlet的值
- 选择排序-Java版
- Java注解全解析(三)——编译时注解示例
- Java解析json数据
- 冒泡排序-java版
- Spring+SpringMVC+Mybatis博客源码分享
- Java注解全解析(二)——运行时注解示例
- Java开发要学习的知识总结
- JVM学习笔记
- IntelliJ IDEA自动加载修改的文件内容
- Spring MVC快速入门
- spring2.5各jar包的作用
- java动态代理与Cglib库
- Java注解全解析(一)——注解简介
- 《JAVA与模式》之简单工厂模式