`

java 事件机制探讨

阅读更多

周末有人问道我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。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics