JAVA事件响应机制 1,先自定义一个事件 public class MyEvent extends java.util.EventObject{ public MyEvent(Object source) { super(source); } } 2,再自定义一个监听器 public class MyListener implements java.util.EventListener{ //这里是当事件发生后的响应过程 public void EventActivated(MyEvent me) { System.out.println("事件已经被触发"); } } 3,以下这个类为触发事件的事件源 public class MyObject { private Vector vectorListeners=new Vector(); public synchronized void addMyListener(MyListener ml) { vectorListeners.addElement(ml); } public synchronized void removeMyListener(MyListener ml) { vectorListeners.removeElement(ml); } protected void activateMyEvent() { Vector tempVector=null; MyEvent e=new MyEvent(this); synchronized(this) { tempVector=(Vector)vectorListeners.clone(); for(int i=0;i<tempVector.size();i++) { MyListener ml=(MyListener)tempVector.elementAt(i); ml.EventActivated(e); } } } //定义一个公用方法用于触发事件 public void test() { activateMyEvent(); } } 4,测试类 public class Test { public static void main(String[] args) { MyObject mo=new MyObject(); //注册该事件 mo.addMyListener(new MyListener()); //触发该事件 mo.test(); } }
来自:http://zhidao.baidu.com/question/50126506.html
以下是个人补充,上面说明了某个类能够发出一个事件的情况。如果是可以发出多个事件,上面设计就不是很合适了。
我们可以改成以下这样。
public class MyObject { private Vector vectorListeners=new Vector(); public static final int Event1 = 0; //事件类型1public static final int Event2 = 1; // 事件类型2public synchronized void addListener(int type,EventListener listener) { // 绑定事件类型和监听类NODE node = new NODE(type,listener);vectorListeners.addElement(node); } public synchronized void removeListener(int type,Listener listener) {for(int i=0;i < vectorListeners.size;i++){if(vectorListeners[i].type.equals(type ) && vectorListeners[i].listener.equals(listener)vectorListeners.removeElementAt(i);} } protected void activateMyEvent() { Vector tempVector=null; MyEvent e=new MyEvent(this); synchronized(this) { tempVector=(Vector)vectorListeners.clone(); for(int i=0;i<tempVector.size();i++) { NODE node =(NODE)tempVector.elementAt(i); node.listenner.EventActivated(e); } } }