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

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

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

    陳亮

    ChenLiang

    JAVA自定義事件監聽完整例子---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: 監聽器接口
    * 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: 該類實現了監聽器的添加和監聽器方法的執行,并且實現了由于屬性的改變而執行事件
    * Description: 在添加、刪除、執行監聽器的時候都要注意同步問題
    * 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()
       
    {
       }


       
    //注冊監聽器,如果這里沒有使用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);
         }

       }


       
    //刪除監聽器,如果這里沒有使用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;

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


       
    public String getName()
       
    {
         
    return sName;
       }

    }



    package demo;

    import java.lang.Thread;

    /**
    * Title: 測試類
    * Description: 測試了由于改變屬性而引起的事件發生
    * 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(
    "添加監聽器完畢");
         
    try {
           Thread.sleep(
    3000);
           
    //改變屬性,觸發事件
           ds.setName("改變屬性,觸發事件");
         }

         
    catch (InterruptedException ex) {
           ex.printStackTrace();
         }


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

         
    catch (InterruptedException ex) {
           ex.printStackTrace();
         }


         ds.removeDemoListener(
    this);
         System.out.println(
    "添加監聽器完畢3");
         
    try {
           Thread.sleep(
    3000);
           
    //改變屬性,觸發事件
           ds.setName("改變屬性,觸發事件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 2009-06-06 00:22 陳亮 閱讀(2707) 評論(0)  編輯  收藏 所屬分類: Java

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(1)

    文章分類(8)

    文章檔案(8)

    搜索

    最新評論

    主站蜘蛛池模板: 最近中文字幕免费2019| 美女视频黄a视频全免费网站色窝| 免费精品国产自产拍在| 亚洲国产精品一区二区久久| a级日本高清免费看| 久久综合日韩亚洲精品色| 国产精品免费大片| 亚洲综合免费视频| 性短视频在线观看免费不卡流畅| 亚洲色欲www综合网| 免费精品国偷自产在线在线| 亚洲精品无播放器在线播放 | 亚洲国产精品免费观看| 精品久久亚洲中文无码| 成人黄页网站免费观看大全| 精品女同一区二区三区免费播放 | 亚洲AV无码乱码国产麻豆穿越 | 亚洲神级电影国语版| 91短视频免费在线观看| 亚洲爆乳AAA无码专区| 亚洲无码精品浪潮| 日韩午夜理论免费TV影院| 亚洲综合激情五月色一区| 免费国产成人高清在线观看麻豆 | 亚洲色大成WWW亚洲女子| 免费一级一片一毛片| a国产成人免费视频| 亚洲伦理中文字幕| 免费v片在线观看品善网| 免费在线观看一级片| 亚洲国产精品一区二区三区在线观看 | 西西人体44rt高清亚洲 | 日韩人妻无码精品久久免费一| 亚洲AV色吊丝无码| 亚洲国产成人久久一区WWW| 久久狠狠躁免费观看| 亚洲精品无码久久久久秋霞| 久久夜色精品国产亚洲av | **一级毛片免费完整视| 黄色大片免费网站| 久久亚洲AV成人无码软件 |