http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f733628a854d2c90c05f93130716017bb2e1707e4e5f8099297a52ef0f07bbae61332a032ab59bc2835dddccc86e70d633712d5cd04e4a805dfcdc4654d651e34d98af0e97cbe746e4b9d3a3c82551dd27736df6f59c2c01&p=90769a478e9711a05bed90665907bb&newp=9877c54ad5c345f32aa5c7710f0c9d231610db2151d4d51323a6db&user=baidu&fm=sc&query=java+%CA%C2%BC%FE%C0%FD%D7%D3&qid=b67957270000b424&p1=10
/** *//**
* Title: 事件处理类,继承了事件基类
* Description:
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/
public class DemoEvent extends EventObject


{
private Object obj;
private String sName;

public DemoEvent(Object source,String sName)
{
super(source);
obj = source;
this.sName=sName;
}
public Object getSource()

{
return obj;
}
public void say()

{
System.out.println("这个是 say 方法
");
}

public String getName()

{
return sName;
}
}


package demo;

import java.util.EventListener;


/** *//**
* Title: 监听器接口
* Description:
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/

public interface DemoListener extends EventListener
{
public void demoEvent(DemoEvent dm);
}


package demo;
import java.util.*;


/** *//**
* Title: 使用事件的类
* Description: 该类实现了监听器的添加和监听器方法的执行,并且实现了由于属性的改变而执行事件
* Description: 在添加、删除、执行监听器的时候都要注意同步问题
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/

public class DemoSource
{
private Vector repository = new Vector();
private DemoListener dl;
private String sName="";

public DemoSource()

{
}

//注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public void addDemoListener(DemoListener dl)

{
repository.addElement(dl);//这步要注意同步问题
}

//如果这里没有使用Vector而是使用ArrayList那么要注意同步问题

public void notifyDemoEvent(DemoEvent event)
{
Enumeration enum = repository.elements();//这步要注意同步问题
while(enum.hasMoreElements())

{
dl = (DemoListener)enum.nextElement();
dl.demoEvent(event);
}
}

//删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public void removeDemoListener(DemoListener dl)

{
repository.remove(dl);//这步要注意同步问题
}


/** *//**
* 设置属性
* @param str1 String
*/
public void setName(String str1)

{
boolean bool=false;
if(str1==null && sName!=null) bool=true;
else if(str1!=null && sName==null) bool