java 事件机制_java 事件机制

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

EventObject

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

EventListener

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

Source

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

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

事件对象

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 importjava.util.EventObject;2

3 /**

4 *5 *@authorThief6 *7 */

8 public class MyEvent extendsEventObject {9

10 private static final long serialVersionUID = 1L;11 private intsourceState;12

13 publicMyEvent(Object source) {14 super(source);15 sourceState =((Source)source).getFlag();16 }17

18 public intgetSourceState() {19 returnsourceState;20 }21

22 }

View Code

事件监听器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 importjava.util.EventListener;2

3 /**

4 *5 *@authorThief6 *7 */

8 public class StateChangeListener implementsEventListener {9

10 public voidhandleEvent(MyEvent event) {11 System.out.println("触发状态改变事件。。。");12 System.out.println("当前事件源状态为:" +event.getSourceState());13 System.out.println("。。。。。。。。。。。。。。。。。。。。。。。");14 }15 }

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 importjava.util.EventListener;2

3 /**

4 *5 *@authorThief6 *7 */

8 public class StateChangeToOneListener implementsEventListener {9

10 public voidhandleEvent(MyEvent event) {11 System.out.println("触发状态变为1的事件。。。");12 System.out.println("当前事件源状态为:" +event.getSourceState());13 System.out.println("。。。。。。。。。。。。。。。。。。。。。。。");14 }15

16 }

View Code

事件源

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 importjava.util.EventListener;2 importjava.util.HashSet;3 importjava.util.Set;4

5 /**

6 *7 *@authorThief8 *9 */

10 public classSource {11

12 private int flag = 0;13 Set listeners = new HashSet();14

15 /**

16 * 注册事件监听器17 *18 *@paramlistener19 */

20 public voidaddStateChangeListener(StateChangeListener listener) {21 listeners.add(listener);22 }23

24 /**

25 * 注册事件监听器26 *27 *@paramlistener28 */

29 public voidaddStateChangeToOneListener(StateChangeToOneListener listener) {30 listeners.add(listener);31 }32

33 /**

34 * 当事件发生时,通知注册在事件源上的所有事件做出相应的反映35 */

36 public voidnotifyListener() {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 voidchangeFlag() {52 flag = (flag == 0 ? 1 : 0);53 notifyListener();54 }55

56 public intgetFlag() {57 returnflag;58 }59 }

View Code

测试类

1 public classTest {2

3 public static voidmain(String[] args) {4

5 Source source = newSource();6 source.addStateChangeListener(newStateChangeListener());7 source.addStateChangeToOneListener(newStateChangeToOneListener());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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值