package
com.te.event.other;
import java.util.EventObject;
/**
* 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;
}
}
import java.util.EventObject;
/**
* 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
com.te.event.other;
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);
}
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
com.te.event.other;
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 enu = repository.elements(); // 这步要注意同步问题
while (enu.hasMoreElements()) {
dl = (DemoListener) enu.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 = true ;
else if ( ! sName.equals(str1))
bool = true ;
this .sName = str1;
// 如果改变则执行事件
if (bool)
notifyDemoEvent( new DemoEvent( this , sName));
}
public String getName() {
return sName;
}
}
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 enu = repository.elements(); // 这步要注意同步问题
while (enu.hasMoreElements()) {
dl = (DemoListener) enu.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 = true ;
else if ( ! sName.equals(str1))
bool = true ;
this .sName = str1;
// 如果改变则执行事件
if (bool)
notifyDemoEvent( new DemoEvent( this , sName));
}
public String getName() {
return sName;
}
}
package
com.te.event.other;
import java.lang.Thread;
/**
* Title: 测试类
* Description: 测试了由于改变属性而引起的事件发生
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/
public class TestDemo
implements DemoListener {
private DemoSource ds;
public TestDemo()
{
ds = new DemoSource();
ds.addDemoListener( this );
System.out.println( " 添加监听器完毕 " );
try {
Thread.sleep( 3000 );
// 改变属性,触发事件
ds.setName( " 改变属性,触发事件 " );
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.addDemoListener( this );
System.out.println( " 添加监听器完毕2 " );
try {
Thread.sleep( 3000 );
// 改变属性,触发事件
ds.setName( " 改变属性,触发事件2 " );
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.removeDemoListener( this );
System.out.println( " 添加监听器完毕3 " );
try {
Thread.sleep( 3000 );
// 改变属性,触发事件
ds.setName( " 改变属性,触发事件3 " );
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void main(String args[])
{
new TestDemo();
}
/**
* demoEvent
*
* @param dm DemoEvent
* @todo Implement this test.DemoListener method
*/
public void demoEvent(DemoEvent dm) {
System.out.println( " 事件处理方法 " );
System.out.println(dm.getName());
dm.say();
}
}
import java.lang.Thread;
/**
* Title: 测试类
* Description: 测试了由于改变属性而引起的事件发生
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/
public class TestDemo
implements DemoListener {
private DemoSource ds;
public TestDemo()
{
ds = new DemoSource();
ds.addDemoListener( this );
System.out.println( " 添加监听器完毕 " );
try {
Thread.sleep( 3000 );
// 改变属性,触发事件
ds.setName( " 改变属性,触发事件 " );
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.addDemoListener( this );
System.out.println( " 添加监听器完毕2 " );
try {
Thread.sleep( 3000 );
// 改变属性,触发事件
ds.setName( " 改变属性,触发事件2 " );
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.removeDemoListener( this );
System.out.println( " 添加监听器完毕3 " );
try {
Thread.sleep( 3000 );
// 改变属性,触发事件
ds.setName( " 改变属性,触发事件3 " );
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void main(String args[])
{
new TestDemo();
}
/**
* demoEvent
*
* @param dm DemoEvent
* @todo Implement this test.DemoListener method
*/
public void demoEvent(DemoEvent dm) {
System.out.println( " 事件处理方法 " );
System.out.println(dm.getName());
dm.say();
}
}