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