刚刚学习javabeans的知识,下面来写写PropetyChangeSupport类的使用
PropetyChangeSupport类是java.beans 包里的一个类,它的声明如下:
public class PropertyChangeSupport
extends Objectimplements 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); <?XML:NAMESPACE PREFIX = O />

             }
      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;