Java 時斷時續之————Java事件

來源:互聯網
上載者:User

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.         }   

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.