<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    sunfruit[請訪問http://www.fruitres.cn]

    --我相信JAVA能走得更遠 QQ:316228067

    [原創(chuàng)]JAVA用戶自定義事件監(jiān)聽完整例子

        --sunfruit

        很多介紹用戶自定義事件都沒有例子,或是例子不全,下面寫了一個完整的例子,并寫入了注釋以便參考,完整的實例源代碼如下:

    package demo;

    import java.util.EventObject;

    /**
     * Title: 事件處理類,繼承了事件基類
     * Description: 
     * Copyright: Copyright (c) 2005
     * Company: cuijiang
     * @author not attributable
     * @version 1.0
     */
    public class DemoEvent extends EventObject
    {
      private Object obj;
      private String sName;
      public DemoEvent(Object source,String sName)  {
        super(source);
        obj = source;
        this.sName=sName;
      }
      public Object getSource()
      {
        return obj;
      }
      public void say()
      {
        System.out.println("這個是 say 方法...");
      }

      public String getName()
      {
        return sName;
      }
    }

    package demo;

    import java.util.EventListener;

    /**
     * Title: 監(jiān)聽器接口
     * Description: 
     * Copyright: Copyright (c) 2005
     * Company: cuijiang
     * @author not attributable
     * @version 1.0
     */
    public interface DemoListener extends EventListener{
      public void demoEvent(DemoEvent dm);
    }

    package demo;

    import java.util.*;

    /**
     *Title: 使用事件的類
     * Description: 該類實現了監(jiān)聽器的添加和監(jiān)聽器方法的執(zhí)行,并且實現了由于屬性的改變而執(zhí)行事件
     * Description: 在添加、刪除、執(zhí)行監(jiān)聽器的時候都要注意同步問題
     * Copyright: Copyright (c) 2005
     * Company: cuijiang
     * @author not attributable
     * @version 1.0
     */
    public class DemoSource{
      private Vector repository = new Vector();
      private DemoListener dl;
      private String sName="";

      public DemoSource()
      {
      }

      //注冊監(jiān)聽器,如果這里沒有使用Vector而是使用ArrayList那么要注意同步問題
      public void addDemoListener(DemoListener dl)
      {
        repository.addElement(dl);//這步要注意同步問題
      }

      //如果這里沒有使用Vector而是使用ArrayList那么要注意同步問題
      public void notifyDemoEvent(DemoEvent event) {
        Enumeration enum = repository.elements();//這步要注意同步問題
        while(enum.hasMoreElements())
        {
          dl = (DemoListener)enum.nextElement();
          dl.demoEvent(event);
        }
      }

      //刪除監(jiān)聽器,如果這里沒有使用Vector而是使用ArrayList那么要注意同步問題
      public void removeDemoListener(DemoListener dl)
      {
        repository.remove(dl);//這步要注意同步問題
      }

      /**
       * 設置屬性
       * @param str1 String
       */
      public void setName(String str1)
      {
        boolean bool=false;
        if(str1==null && sName!=null) bool=true;
        else if(str1!=null && sName==null) bool=true;
        else if(!sName.equals(str1)) bool=true;

        this.sName=str1;

        //如果改變則執(zhí)行事件
        if(bool) notifyDemoEvent(new DemoEvent(this,sName));
      }

      public String getName()
      {
        return sName;
      }
    }

    package demo;

    import java.lang.Thread;

    /**
     * Title: 測試類
     * Description: 測試了由于改變屬性而引起的事件發(fā)生
     * Copyright: Copyright (c) 2005
     * Company: cuijiang
     * @author not attributable
     * @version 1.0
     */
    public class TestDemo
        implements DemoListener {
      private DemoSource ds;

      public TestDemo()
      {
        ds=new DemoSource();
        ds.addDemoListener(this);
        System.out.println("添加監(jiān)聽器完畢");
        try {
          Thread.sleep(3000);
          //改變屬性,觸發(fā)事件
          ds.setName("改變屬性,觸發(fā)事件");
        }
        catch (InterruptedException ex) {
          ex.printStackTrace();
        }

        ds.addDemoListener(this);
        System.out.println("添加監(jiān)聽器完畢2");
        try {
          Thread.sleep(3000);
          //改變屬性,觸發(fā)事件
          ds.setName("改變屬性,觸發(fā)事件2");
        }
        catch (InterruptedException ex) {
          ex.printStackTrace();
        }

        ds.removeDemoListener(this);
        System.out.println("添加監(jiān)聽器完畢3");
        try {
          Thread.sleep(3000);
          //改變屬性,觸發(fā)事件
          ds.setName("改變屬性,觸發(fā)事件3");
        }
        catch (InterruptedException ex) {
          ex.printStackTrace();
        }


      }

      public static void main(String args[])
      {

        new TestDemo();
      }

      /**
       * demoEvent
       * @param dm DemoEvent
       * @todo Implement this test.DemoListener method
       */
      public void demoEvent(DemoEvent dm) {
        System.out.println("事件處理方法");
        System.out.println(dm.getName());
        dm.say();
      }
    }

    posted on 2006-02-19 17:59 sunfruit 閱讀(860) 評論(0)  編輯  收藏 所屬分類: JAVA SE & EE

    主站蜘蛛池模板: 免费无码肉片在线观看| 成全在线观看免费观看大全| 99视频在线精品免费观看6| 久久精品蜜芽亚洲国产AV| 人妻免费一区二区三区最新| 亚洲精品无码久久久久去q| 你懂的网址免费国产| 亚洲色自偷自拍另类小说| 久久精品免费网站网| 国产亚洲精AA在线观看SEE| 一个人免费视频观看在线www | 午夜亚洲福利在线老司机| 精品亚洲国产成人av| 波多野结衣免费视频观看| EEUSS影院WWW在线观看免费| 亚洲自偷自偷图片| 成在人线av无码免费高潮喷水| 亚洲av日韩av高潮潮喷无码| 97在线视频免费播放| 亚洲熟女综合色一区二区三区 | 中文毛片无遮挡高潮免费| 一本天堂ⅴ无码亚洲道久久| 国产精品成人免费综合| 一级毛片人与动免费观看| 亚洲VA中文字幕无码毛片| 美女被cao免费看在线看网站| 亚洲国产精品成人综合色在线| 久久伊人亚洲AV无码网站| 国产成人无码区免费网站| 亚洲六月丁香六月婷婷蜜芽| 免费看又爽又黄禁片视频1000 | 嫩草成人永久免费观看| 亚洲中文字幕日本无线码| 日韩亚洲国产综合久久久| 日日麻批免费40分钟无码| 亚洲啪AV永久无码精品放毛片| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 日本特黄特黄刺激大片免费| 久久国产一片免费观看| 亚洲国产精品久久人人爱| 亚洲国产精品无码久久久久久曰|