首先,定义一个基类,负责加入监听者,
package net.cafe;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
/**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:01:56
* To change this template use File | Settings | File Templates.
*/
public class BaseEventBean {
protected PropertyChangeSupport pcs;
public void addPropertyChangeListener(PropertyChangeListener listener){
if(pcs == null){
pcs = new PropertyChangeSupport(this);
}
pcs.addPropertyChangeListener(listener);
}
public void removeChangeListener(PropertyChangeListener listener) {
if(pcs != null){
pcs.removePropertyChangeListener(listener);
}
}
}
一个POJO继承这个类,并在SET方法里添加触发事件的方法
package net.cafe;
/**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:15:34
* To change this template use File | Settings | File Templates.
*/
public class FoolBean extends BaseEventBean {
private String userName;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String newPassword) {
String oldPassword = password;
this.password = newPassword;
pcs.firePropertyChange("password",oldPassword,password);
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
属性监听者
package net.cafe;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
/**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:12:33
* To change this template use File | Settings | File Templates.
*/
public class Listener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("==========old value=========" + evt.getOldValue()) ;
System.out.println("==========new Value========" + evt.getNewValue());
}
}
测试代码
package net.cafe;
/**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:24:28
* To change this template use File | Settings | File Templates.
*/
public class BeanEventTest {
public static void main(String[] args){
FoolBean bean = new FoolBean();
bean.addPropertyChangeListener(new Listener());
bean.setPassword("22222");
bean.setPassword("33333");
}
}
BTW,SUN的java.beans.*包含了大多空包,这些方法都需要自己扩展,我们完全不需要用它定义的方法名
上面的例子完全可以用自己的方法来实现,