JAVA事件响应机制(转)

来源:互联网 发布:程序员加班猝死 编辑:程序博客网 时间:2024/06/02 15:53
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; //事件类型1
    public static final int Event2 = 1;  // 事件类型2
    public 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);            }        }       }
	
				
		
原创粉丝点击