博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 事件机制
阅读量:5790 次
发布时间:2019-06-18

本文共 3616 字,大约阅读时间需要 12 分钟。

java的事件机制一般包括三个部分:EventObject,EventListener和Source。

EventObject

java.util.EventObject是事件状态对象的基类,它封装了事件源对象以及和事件相关的信息。所有java的事件类都需要继承该类。

EventListener

java.util.EventListener是一个标记接口,就是说该接口内是没有任何方法的。所有事件监听器都需要实现该接口。事件监听器注册在事件源上,当事件源的属性或状态改变的时候,调用相应监听器内的回调方法。

Source

事件源不需要实现或继承任何接口或类,它是事件最初发生的地方。因为事件源需要注册事件监听器,所以事件源内需要有相应的盛放事件监听器的容器。

 

以下是事件机制的一个简单实现,当事件源的状态改变的时候,调用相应的监听器的回调方法:

事件对象

1 import java.util.EventObject; 2  3 /** 4  *  5  * @author Thief 6  * 7  */ 8 public class MyEvent extends EventObject { 9 10     private static final long serialVersionUID = 1L;11     private int sourceState;12     13     public MyEvent(Object source) {14         super(source);15         sourceState = ((Source)source).getFlag();16     }17     18     public int getSourceState() {19         return sourceState;20     }21 22 }
View Code

事件监听器

1 import java.util.EventListener; 2  3 /** 4  *  5  * @author Thief 6  * 7  */ 8 public class StateChangeListener implements EventListener { 9 10     public void handleEvent(MyEvent event) {11         System.out.println("触发状态改变事件。。。");12         System.out.println("当前事件源状态为:" + event.getSourceState());13         System.out.println("。。。。。。。。。。。。。。。。。。。。。。。");14     }15 }
View Code
1 import java.util.EventListener; 2  3 /** 4  *  5  * @author Thief 6  * 7  */ 8 public class StateChangeToOneListener implements EventListener { 9 10     public void handleEvent(MyEvent event) {11         System.out.println("触发状态变为1的事件。。。");12         System.out.println("当前事件源状态为:" + event.getSourceState());13         System.out.println("。。。。。。。。。。。。。。。。。。。。。。。");14     }15     16 }
View Code

事件源

1 import java.util.EventListener; 2 import java.util.HashSet; 3 import java.util.Set; 4  5 /** 6  *  7  * @author Thief 8  * 9  */10 public class Source {11 12     private int flag = 0;13     Set
listeners = new HashSet
();14 15 /**16 * 注册事件监听器17 * 18 * @param listener19 */20 public void addStateChangeListener(StateChangeListener listener) {21 listeners.add(listener);22 }23 24 /**25 * 注册事件监听器26 * 27 * @param listener28 */29 public void addStateChangeToOneListener(StateChangeToOneListener listener) {30 listeners.add(listener);31 }32 33 /**34 * 当事件发生时,通知注册在事件源上的所有事件做出相应的反映35 */36 public void notifyListener() {37 for (EventListener listener : listeners) {38 try {39 ((StateChangeListener)listener).handleEvent(new MyEvent(this));40 } catch (Exception e) {41 if (flag == 1) {42 ((StateChangeToOneListener)listener).handleEvent(new MyEvent(this));43 }44 }45 }46 }47 48 /**49 * 改变状态50 */51 public void changeFlag() {52 flag = (flag == 0 ? 1 : 0);53 notifyListener();54 }55 56 public int getFlag() {57 return flag;58 }59 }
View Code

测试类

1 public class Test { 2      3     public static void main(String[] args) { 4          5         Source source = new Source(); 6         source.addStateChangeListener(new StateChangeListener()); 7         source.addStateChangeToOneListener(new StateChangeToOneListener()); 8          9         source.changeFlag();10         System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");11         source.changeFlag();12         System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");13         source.changeFlag();14     }15 16 }

 

参考:

http://ericliu1986.iteye.com/blog/629562

转载于:https://www.cnblogs.com/minisculestep/p/5059321.html

你可能感兴趣的文章
TortoiseSVN中图标的含义
查看>>
Tasks and Back stack 详解
查看>>
关于EXPORT_SYMBOL的作用浅析
查看>>
成功的背后!(给所有IT人)
查看>>
在SpringMVC利用MockMvc进行单元测试
查看>>
Nagios监控生产环境redis群集服务战
查看>>
Angular - -ngKeydown/ngKeypress/ngKeyup 键盘事件和鼠标事件
查看>>
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
宿舍局域网的应用
查看>>
html代码究竟什么用途
查看>>
Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)
查看>>
Python version 2.7 required, which was not foun...
查看>>
context:annotation-config vs component-scan
查看>>
经典sql
查看>>
CSS3边框会动的信封
查看>>
JavaWeb实例设计思路(订单管理系统)
查看>>
source insight中的快捷键总结
查看>>
PC-IIS因为端口问题报错的解决方法
查看>>
java四种线程池简介,使用
查看>>