首先,定义一个基类,负责加入监听者,
packagenet.cafe;

importjava.beans.PropertyChangeSupport;
importjava.beans.PropertyChangeListener;


/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:01:56
*TochangethistemplateuseFile|Settings|FileTemplates.
*/

publicclassBaseEventBean...{

protectedPropertyChangeSupportpcs;


publicvoidaddPropertyChangeListener(PropertyChangeListenerlistener)...{

if(pcs==null)...{
pcs=newPropertyChangeSupport(this);
}
pcs.addPropertyChangeListener(listener);
}


publicvoidremoveChangeListener(PropertyChangeListenerlistener)...{

if(pcs!=null)...{
pcs.removePropertyChangeListener(listener);
}
}

}
一个POJO继承这个类,并在SET方法里添加触发事件的方法
packagenet.cafe;


/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:15:34
*TochangethistemplateuseFile|Settings|FileTemplates.
*/

publicclassFoolBeanextendsBaseEventBean...{

privateStringuserName;
privateStringpassword;


publicStringgetPassword()...{
returnpassword;
}


publicvoidsetPassword(StringnewPassword)...{
StringoldPassword=password;
this.password=newPassword;
pcs.firePropertyChange("password",oldPassword,password);
}


publicStringgetUserName()...{
returnuserName;
}


publicvoidsetUserName(StringuserName)...{
this.userName=userName;
}

}
属性监听者
packagenet.cafe;

importjava.beans.PropertyChangeListener;
importjava.beans.PropertyChangeEvent;


/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:12:33
*TochangethistemplateuseFile|Settings|FileTemplates.
*/

publicclassListenerimplementsPropertyChangeListener...{


publicvoidpropertyChange(PropertyChangeEventevt)...{
System.out.println("==========oldvalue========="+evt.getOldValue());
System.out.println("==========newValue========"+evt.getNewValue());
}
}
测试代码
packagenet.cafe;


/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:24:28
*TochangethistemplateuseFile|Settings|FileTemplates.
*/

publicclassBeanEventTest...{


publicstaticvoidmain(String[]args)...{
FoolBeanbean=newFoolBean();
bean.addPropertyChangeListener(newListener());
bean.setPassword("22222");
bean.setPassword("33333");
}
}
BTW,SUN的java.beans.*包含了大多空包,这些方法都需要自己扩展,我们完全不需要用它定义的方法名。
上面的例子完全可以用自己的方法来实现.
通过这个例子,可以方便的构建一个GUI的事件监听类。业务处理层只需要处理数据,而GUI监听器负责将数据更新到界面上。
packagenet.cafe;
importjava.beans.PropertyChangeSupport;
importjava.beans.PropertyChangeListener;

/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:01:56
*TochangethistemplateuseFile|Settings|FileTemplates.
*/
publicclassBaseEventBean...{
protectedPropertyChangeSupportpcs;

publicvoidaddPropertyChangeListener(PropertyChangeListenerlistener)...{
if(pcs==null)...{
pcs=newPropertyChangeSupport(this);
}
pcs.addPropertyChangeListener(listener);
}

publicvoidremoveChangeListener(PropertyChangeListenerlistener)...{
if(pcs!=null)...{
pcs.removePropertyChangeListener(listener);
}
}
}
一个POJO继承这个类,并在SET方法里添加触发事件的方法
packagenet.cafe;

/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:15:34
*TochangethistemplateuseFile|Settings|FileTemplates.
*/
publicclassFoolBeanextendsBaseEventBean...{
privateStringuserName;
privateStringpassword;

publicStringgetPassword()...{
returnpassword;
}

publicvoidsetPassword(StringnewPassword)...{
StringoldPassword=password;
this.password=newPassword;
pcs.firePropertyChange("password",oldPassword,password);
}

publicStringgetUserName()...{
returnuserName;
}

publicvoidsetUserName(StringuserName)...{
this.userName=userName;
}
}
属性监听者
packagenet.cafe;
importjava.beans.PropertyChangeListener;
importjava.beans.PropertyChangeEvent;

/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:12:33
*TochangethistemplateuseFile|Settings|FileTemplates.
*/
publicclassListenerimplementsPropertyChangeListener...{

publicvoidpropertyChange(PropertyChangeEventevt)...{
System.out.println("==========oldvalue========="+evt.getOldValue());
System.out.println("==========newValue========"+evt.getNewValue());
}
}
测试代码
packagenet.cafe;

/***//**
*CreatedbyIntelliJIDEA.
*User:JJYAO
*Date:2004-11-1
*Time:23:24:28
*TochangethistemplateuseFile|Settings|FileTemplates.
*/
publicclassBeanEventTest...{

publicstaticvoidmain(String[]args)...{
FoolBeanbean=newFoolBean();
bean.addPropertyChangeListener(newListener());
bean.setPassword("22222");
bean.setPassword("33333");
}
}
BTW,SUN的java.beans.*包含了大多空包,这些方法都需要自己扩展,我们完全不需要用它定义的方法名。
上面的例子完全可以用自己的方法来实现.
通过这个例子,可以方便的构建一个GUI的事件监听类。业务处理层只需要处理数据,而GUI监听器负责将数据更新到界面上。
本文介绍了一种基于Java Beans的事件监听机制实现方法,通过创建基类BaseEventBean管理和触发属性变化事件,并在POJO类FoolBean中具体实现属性变化的监听与通知功能。
3218

被折叠的 条评论
为什么被折叠?



