1、Java 事件

java中的事件机制的参与者有3种角色:

1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中

2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。

3.event listener:具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。

 

与jbpm中的 task,event,action 类似

与vb相比,java 的事件机制复杂一些,但功能更强大,也更底层。

事件机制不论表现得多么强大,其本质还是由类属性、方法来完成。

如本例的一个事件源:

 

 

 

  1. /**  
  2. * 事件源对象,在这里你可以把它想象成一个控制开门关门的遥控器,  
  3. * (如果是在swing中,就类似一个button)  
  4. */  
  5. package test;   
  6. import java.util.*;   
  7. public class DoorManager {   
  8.     private Collection listeners;   
  9.     /**  
  10.      * 添加事件  
  11.      * @param listener DoorListener  
  12.      */  
  13.     public void addDoorListener(DoorListener listener) {   
  14.         if (listeners == null) {   
  15.             listeners = new HashSet();   
  16.         }   
  17.         listeners.add(listener);   
  18.     }   
  19.   
  20.     /**  
  21.      * 移除事件  
  22.      * @param listener DoorListener  
  23.      */  
  24.     public void removeDoorListener(DoorListener listener) {   
  25.         if (listeners == null)   
  26.             return;   
  27.         listeners.remove(listener);   
  28.     }   
  29.   
  30.     /**  
  31.      * 触发开门事件  
  32.      */  
  33.     protected void fireWorkspaceOpened() {   
  34.         if (listeners == null)   
  35.             return;   
  36.         DoorEvent event = new DoorEvent(this"open");   
  37.         notifyListeners(event);   
  38.     }   
  39.   
  40.     /**  
  41.      * 触发关门事件  
  42.      */  
  43.     protected void fireWorkspaceClosed() {   
  44.         if (listeners == null)   
  45.             return;   
  46.         DoorEvent event = new DoorEvent(this"close");   
  47.         notifyListeners(event);   
  48.     }   
  49.   
  50.     /**  
  51.      * 通知所有的DoorListener  
  52.      */  
  53.     private void notifyListeners(DoorEvent event) {   
  54.         Iterator iter = listeners.iterator();   
  55.         while (iter.hasNext()) {   
  56.             DoorListener listener = (DoorListener) iter.next();   
  57.             listener.doorEvent(event);   
  58.         }   
  59.     }   
  60.   
  61. }  

 

可以看到事件只不过是一个对象DoorEvent event = new DoorEvent(this"open");    ,只不过DoorEvent一定要继承自EventObject 

所谓的事件触发        notifyListeners(event);   ,也就是将所有的listerner对象 逐个激发一遍

 

        Iterator iter = listeners.iterator();   

  1.         while (iter.hasNext()) {   
  2.             DoorListener listener = (DoorListener) iter.next();   
  3.             listener.doorEvent(event);   
  4.         }   

 

posted on 2010-03-04 21:56  运筹帷幄  阅读(308)  评论(0编辑  收藏  举报