刚刚学习javabeans的知识,下面来写写PropetyChangeSupport类的使用
PropetyChangeSupport类是java.beans 包里的一个类,它的声明如下:
public class PropertyChangeSupport
extends Object
implements Serializable
这是一个实用工具类,支持绑定 (bound) 属性的 bean 可以使用该类。可以使用此类的实例作为 bean 的成员字段,并将各种工作委托给它。 此类是可序列化的。在对它进行序列化时,它将保存(并恢复)本身可序列化的所有侦听器。在序列化期间,将跳过所有不可序列化的侦听器。
 
用法
当写一个javabean类的时候,想给类里的一个属性绑定一个事件,监听属性的变化的时候,就可以将这个功能交给PropertyChangeSupport类的一个实例来管理。举一个例子:
我们来写一个bean类
public class MyBean{
      private String name = "caoms";
      private PropetyChangeSupport support;//引入一个PropetyChangeSupport的实例
      public void setName(String newname){
             String oldname = this.name;
             this.name = newname;
             support.firePropertyChange("name", oldname, newname);
             }
      public String getName(){
             return name;
      }
      public void addPropertyChangeListener(PropertyChangeListener listener) {
       support.addPropertyChangeListener(listener);
    }
 
    public voif removePropertyChangeListener(PropertyChangeListener listener) {
       support.removePropertyChangeListener(listener);
    }
}
 
说明:
上面的bean类跟一股的bean没有什么本质上的区别,只是在bean中添加了一个PropetyChangeSupport类的实例,来管理bean中的name属性的变化。当在以后bean是使用过程中,当setName方法被调用时,name属性就会发生变化,从而set方法中的firePropertyChange方法也会被调用,来激发PropertyChange方法。注意propertyChange(PropertyChangeEvent e)方法是实现PropertyChangeListener接口的唯一方法,如果一个类要实现PropertyChangeListener接口,就要实现propertyChange方法,该方法能捕捉firePropertyChange方发报告的事件,即属性发生变化事件。firePropertyChange方法中传递的oldname和newname是属性类旧值和新值,可以通过propertyChange方法中参数PropertyChangeEvent类的getOldValue()和getNewValue()来获得,然后我们可以在这个方法中,添加自己想实现的一些功能了。
 
下面我们可以写一个应用上面的类了例子
 
public class UseMybean impleaments PropertyChangeListener
{
    public static void main(String [] args)
   {
       private Mybean bean = new Mybean();
       bean.setName("cmshung");
       System.out.println("打印我的名字:"+bean.getName())
   }
   
   public void propertyChange(PropertyChangeEvent e)
   {
    if (e.getSource() == bean)
     {
       System.out.println("旧的名字:"+e.getOldValue().toString());
       System.out.println("新的名字:"e+.getNewValue().toString());
     }
    }
 
}
 
 
这个例子在控制台中将输出:打印我的名字:cmshung;
                        旧的名字:caoms
                        新的名字:cmshung;