隨筆 - 63  文章 - 0  trackbacks - 0
          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          一個(gè)事件監(jiān)聽機(jī)制(Event Listener)的例程

          事件監(jiān)聽機(jī)制在java編程中有很重要的應(yīng)用,一般我們在處理GUI編程時(shí),只是重寫一下監(jiān)聽接口的perform函數(shù)即可。但事件監(jiān)聽在底層是如何運(yùn)行的?通過下面的例子我們可以有個(gè)清楚地了解。
          1.      首先寫一個(gè)事件類
          public class NewEvent {
               private int eventType=-1;
               public      NewEvent(int type){
                     eventType=type;
               }
               public int getEventType(){
                     return eventType;
               }

          }
          2.      寫一個(gè)事件監(jiān)聽器

          public interface INewEventListener {
                public void doProcessEvent(NewEvent event);

          }
          3.      寫一個(gè)測試程序
          import java.util.ArrayList;
          import java.util.Iterator;
          import java.util.List;


          public class Source {
               private List listeners = new ArrayList();
               
               public void addNewEventListener(INewEventListener listener){//增加一個(gè)監(jiān)聽器
                     if(!listeners.contains(listener)){
                           listeners.add(listener);
                     }
               }
               
               public void fireEvent(NewEvent event){//觸發(fā)事件
                     for (Iterator i=listeners.iterator(); i.hasNext();) {
                           INewEventListener listener = (INewEventListener)i.next();
                           listener.doProcessEvent(event);
                     }
               }
               
               public void GenerateEvent(int eventType){//生成一個(gè)指定類型的事件
                     fireEvent(new NewEvent(eventType));
               }
               
               //for test
               public static void main (String [] args){
                     Source source = new Source ();
                     source.addNewEventListener(new INewEventListener(){//增加一個(gè)監(jiān)聽器,并實(shí)現(xiàn)這個(gè)監(jiān)聽器接口的方法
                            public void doProcessEvent(NewEvent event){
                                  int eventType = event.getEventType();
                                  System.out.println("EventType "+eventType+ " was triggered");
                            }
                     });
                     source.GenerateEvent(3);//生成一個(gè)eventType為3的事件
                     
               }
               
          }

          posted on 2009-04-05 08:39 lanxin1020 閱讀(171) 評(píng)論(0)  編輯  收藏 所屬分類: j2se
          主站蜘蛛池模板: 宣武区| 蓝山县| 通城县| 南安市| 睢宁县| 衡山县| 古蔺县| 镇雄县| 马边| 三原县| 砚山县| 广元市| 广水市| 常德市| 盱眙县| 福海县| 封丘县| 长海县| 类乌齐县| 卫辉市| 榆林市| 建始县| 崇明县| 隆昌县| 卢湾区| 沙坪坝区| 益阳市| 台南县| 平湖市| 高陵县| 新河县| 瑞金市| 田林县| 玛曲县| 宣武区| 玉屏| 柯坪县| 绥江县| 岐山县| 桂平市| 金阳县|