java 事件机制探讨

来源:互联网 发布:武林外传画画老人知乎 编辑:程序博客网 时间:2024/05/29 18:18

周末有人问道我java中事件机制是怎么实现的,天天只知道new一个事件适配器,今天结合网上的文章一起看看java中如何实现事件的监听。其实就是自定义事件。

  其中有三个主要相关的类

    1、EventObject
所有事件状态对象都将从其派生的根类。
        所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event 的对象。
    2、EventListener  接口
        public interface EventListener

所有事件侦听器接口必须扩展的标记接口。


    3、source    具体的接受事件的实体,比如说,你点击一个button,那么button就是event source,这样你必须使button对某些事件进行相应,你就需要注册特定的listener,比如说MouseEvent之中的 MouseClicked方法,这是他就必须有了add方法

 

 

 

 

package java1.base1.event1;import java.util.EventListener;import java.util.EventObject;public class DemoEvent extends EventObject {    public DemoEvent(Object source) {        super(source);    }}
 

 

package java1.base1.event1;import java.util.EventListener;/** * @Title: Demolistener.java * @Description: <br> *               <br> * @Company: ChinaSoft International * @Created on 2011-1-10 下午04:30:19 * @author chenhua * @version $Revision: 1.0 $ * @since 1.0 */public interface Demolistener extends EventListener {    public void DemoEvent(DemoEvent de);}
 
package java1.base1.event1;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import com.sun.org.apache.bcel.internal.generic.NEW;/** * @Title: DemoSource.java * @Description: <br> *               <br> * @Company: ChinaSoft International * @Created on 2011-1-10 下午04:34:16 * @author chenhua * @version $Revision: 1.0 $ * @since 1.0 */public class DemoSource {    private List list=new ArrayList();    Demolistener dl;    public void addDemoListener(Demolistener dl){        list.add(dl);    }    public void notifyDemoEvent(){         for(int i=0;i<list.size();i++){             dl=(Demolistener)list.get(i);             dl.DemoEvent(new DemoEvent(dl));         }    }    }
 
package java1.base1.event1;/** * @Title: TestDemoEvent.java * @Description: <br> *               <br> * @Company: ChinaSoft International * @Created on 2011-1-10 下午04:51:41 * @author chenhua * @version $Revision: 1.0 $ * @since 1.0 */public class TestDemoEvent {    DemoSource Ds;    public TestDemoEvent(){        try {            Ds=new DemoSource();            Ds.addDemoListener(new Demolistener(){                public void DemoEvent(DemoEvent de) {                    System.out.println("spy-sky 455927885 ");                }            });        } catch (Exception e) {            e.printStackTrace();        }        Ds.notifyDemoEvent();    }    /**     * @param args     */    public static void main(String[] args) {        new TestDemoEvent();    }}

  将EventObject子类作为参数,定义事件对应的listener接口。实现source。

 

 

0 0