Swing里面用的多啊。

 

在网上找个Demo弄上来:

 

 

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

public class EventManager {
    PropertyChangeSupport PCS = new PropertyChangeSupport(this);

    // add listener
    public void addPropertyChangeListener(PropertyChangeListener pcl) {
        PCS.addPropertyChangeListener(pcl);
    }

    // Trigger property change events
    protected void triggerPropertyChange(String propertyName, Object oldValue,
        Object newValue) {
        PCS.firePropertyChange(propertyName, oldValue, newValue);
    }

    // remove listener
    protected void removeProtertyChange(PropertyChangeListener pcs) {
        PCS.removePropertyChangeListener(pcs);
    }
}
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class ChangeListener implements PropertyChangeListener {

    public void propertyChange(PropertyChangeEvent evt) {
        System.out.println(evt.getPropertyName());
        System.out.println("NewValue=" + evt.getNewValue());
        System.out.println("OldValue=" + evt.getOldValue());
        System.out.println(evt.getPropagationId());
        System.out.println("-------------------------");
        Object bean = evt.getSource();
        System.out.println(bean);
    }

}
public class Bean extends EventManager {
    int id;
    String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        int oldValue = this.id;
        this.id = id;
        triggerPropertyChange("id", oldValue, id);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        String oldValue = this.name;
        this.name = name;
        triggerPropertyChange("name", oldValue, name);
    }

    public static void main(String args[]) {
        Bean bean = new Bean();
        // 把监听器注册到这个bean上
        bean.addPropertyChangeListener(new ChangeListener());
        bean.setId(1111);
        bean.setName("gary");
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     
*/
    public String toString() {
        return "Bean [id=" + id + ", name=" + name + "]";
    }
}