好久就想写出来,这段时间都不知道在忙什么,今天好点,写成文吧:)    开始看到java类中有的addListener()方法,感觉就是一个方法,很简单啊,后来自己想写事件,才发觉这里头还是有些学问的。    MyChangeEvent.java     事件类,继承了java.util.EventObject    MyChangeListener.java  监听接口,继承了java.util.EventListener    MyClass.java           实现了事件的处理机制    MyEventTest.java       Junit的测试 
/*  * Created on Nov 26, 2004 11:25:14 PM  *  * MyChangeEvent.java  **/ package org.yz21.study.event; 
import java.util.EventObject; 
/**  * @author violin  *  *  Copyright www.yz21.org 2003-2004  */ public class MyChangeEvent extends EventObject {    private String myname; 
 /**   * @param source   */  public MyChangeEvent(Object source) {   super(source);  }    /*   * @param source myname   */  public MyChangeEvent(Object source,String myname) {   super(source);   this.myname = myname;  }    /*   * @return String    */  public String getMyname() {   return myname;  } 
} 
 /*  * Created on Nov 26, 2004 11:27:55 PM  *  * MyChangeListener.java  **/ package org.yz21.study.event; 
import java.util.EventListener; 
/**  * @author violin  *  *  Copyright www.yz21.org 2003-2004  */ public interface MyChangeListener extends EventListener {  /*   * @param event   */  public void MyChanged(MyChangeEvent event); 
} 
 /*  * Created on Nov 26, 2004 11:32:01 PM  *  * MyClass.java  **/ package org.yz21.study.event; 
import java.util.Iterator; import java.util.Vector; 
/**  * @author violin  *  *  Copyright www.yz21.org 2003-2004  */ public class MyClass { 
 private String name = "2004-9-27";  private static Vector myChangeListeners = new Vector(); 
 /**   *    */  public MyClass() {   super();  } 
 /*   * @param myname   */  public void testMyEvent(String myname) {   this.name = myname;   notifyMyChangeListeners();  }    /*   * @param listener   add a listener;   */  public void addMyChangeListener(MyChangeListener listener) {   myChangeListeners.add(listener);  }    /*   * @param listener   remove a listener;   */  public void removeMyChangeListener(MyChangeListener listener) {   myChangeListeners.remove(listener);  }    /*   * notify all listeners;   */  private  void notifyMyChangeListeners() {   MyChangeEvent event = new MyChangeEvent(MyClass.class, name);   Iterator iterator = ((Vector) myChangeListeners.clone()).iterator(); 
  while (iterator.hasNext()) {    MyChangeListener listener = (MyChangeListener) iterator.next();    listener.MyChanged(event);   }  } } 
 /*  * Created on Nov 26, 2004 11:47:04 PM  *  * MyEventTest.java  **/ package org.yz21.study.event; 
import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; 
/**  * @author violin  *  *  Copyright www.yz21.org 2003-2004  */ public class MyEventTest extends TestCase implements MyChangeListener {    private MyClass myclass;  private String testname; 
 /**   * Constructor for MyEventTest.   * @param arg0   */  public MyEventTest(String arg0) {   super(arg0);  } 
 public static void main(String[] args) {   junit.textui.TestRunner.run(MyEventTest.class);  } 
 /*   * @see TestCase#setUp()   */  protected void setUp() throws Exception {   myclass = new MyClass();   myclass.addMyChangeListener(this);   this.testname = "yz21.org";  } 
 /*   * @see TestCase#tearDown()   */  protected void tearDown() throws Exception {   myclass = null;  }    /*   * @see TestCase#suite()   */  public static Test suite() {   return new TestSuite(MyEventTest.class); //以类为参数  }    public void MyChanged(MyChangeEvent event) {   this.testname = event.getMyname();  }    public void testMyEvent() {   myclass.testMyEvent("www.yz21.org");   this.assertEquals("测试事件","www.yz21.org",testname);  } } 
 参考资料:           1、java docs           2、Apache Jmeter           3、Junit docs
  
 
  |