firtre

          小螞蟻,定語沒想好。 精靈古怪,不是我。

          事件 監聽 機制的自實現 (event listener)

          北天JAVA技術網(www.java114.com))

          Event/Listener模式在Java中很常見,并且很有用,但要自己來實現這個模式是一件很費時間并且單調乏味的工作。每次你都不得不和List或Vector打交道,每次你都不得不處理Add方法、Remove方法,然后你還得遍歷整個列表來通知所有的監聽者,這才算完。如果能象下面這樣簡單就好了:
          Notifier notifier = new Notifier("actionPerformed");
          ...notifier.addListener( someObject );
          ...notifier.notify( new ActionEvent(this) );只要幾行代碼就能夠完成一切。
          下面的Notifier類就達到了這個目的:
          package com.generationjava.lang;

          import java.lang.reflect.Method;
          import java.util.ArrayList;
          import java.util.EventObject;
          import java.util.Iterator;

          public class Notifier {
           private ArrayList listeners = new ArrayList();
           private String listenerMethod;
           public Notifier(String name) {
            this.listenerMethod = name;
           }
           public void addListener(Object not) {
            this.listeners.add(not);
           }
           public void removeListener(Object not) {
            this.listeners.remove(not);
           }
           public void notify(EventObject event) {
            Iterator itr = listeners.iterator();
            while(itr.hasNext()) {
             try {
              Object listener = itr.next();
              Class clss = listener.getClass();
              Method method = clss.getMethod(this.listenerMethod,new Class[] { event.getClass() });
              method.invoke( listener, new Object[] { event } );
             } catch(Exception e) {
              e.printStackTrace();
             }
            }
           }
          }

          這個類并沒有經過性能上的優化,而且它是不同步的,但在編寫一組Event/Listener API的時候,可以很快掌握它并且節省時間。利用Notifier類,你就能執行這樣一個常見的任務而不必每次都為之編寫代碼。

          以下內容摘自CSDC社區: (http://topic.csdn.net/t/20020918/10/1032825.html)

          其實java的事件機制十分簡單,你完全可以實現自己的事件驅動;  
            主要涉及到如下幾個類(可以參考鍵盤事件的有關類):  
            1.事件類XXXEvent,其中包含你所規定的事件的一些信息,如事件源,事件名稱等等,如KeyEvent,中有eventSource,keyCode等等  
            2.事件監聽接口,XXXEventListener,其中包含捕獲到事件的類要作的事情,如KeyListener,其中包括:keyPress,keyReleased,等等  
            如:  
            public   interface   XXXListener{  
                  public   void   doXXXEvent(xxxEvent   e);  
            }  
            3.發出事件的類:可以是任意的類,在這個類中,可以發出該事件XXXEvent,比如可以在這個類中添加一個fireXXXEvent方法,在這個方法中去手工發出事件,如:  
            public   void   fireXXXEvent(){  
                    java.util.Vector   targets;    
                    synchronized   (this)   {  
                            targets   =   (java.util.Vector)   xxxListeners.clone();  
                    }  
                    XXXEvent   evt   =   new   XXXEvent(.....);  
                    for   (int   i   =   0;   i   <   targets.size();   i++)   {                          
                                    XXXListener   target   =   (XXXListener)   targets.elementAt(i);  
                                    target.doXXXEvent(evt);  
                    }  
            }  
            此外在這個類里要有一個監聽列表即上面的xxxlisteners,在這個類中還要實現一個addXXXListrener(XXXListener)方法,來把一個實現了XXXListenr的類作為監聽者加到該類中。

          posted on 2008-03-05 08:20 笨蛋 閱讀(529) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 龙陵县| 滦南县| 垣曲县| 雷波县| 荔波县| 杭锦后旗| 柏乡县| 满洲里市| 宁波市| 四川省| 芷江| 宾阳县| 天祝| 博乐市| 军事| 泾川县| 澄城县| 周至县| 夏邑县| 锡林郭勒盟| 桃江县| 昭通市| 珲春市| 开原市| 健康| 淅川县| 鄢陵县| 泽州县| 金昌市| 贞丰县| 怀安县| 开远市| 庆云县| 岑巩县| 手游| 武乡县| 莆田市| 洛阳市| 阿坝县| 丘北县| 盐池县|