Module java.desktop
Package java.beans

Class PropertyChangeSupport

java.lang.Object
java.beans.PropertyChangeSupport
所有已实现的接口:
Serializable
直接已知的子类:
SwingPropertyChangeSupport

public class PropertyChangeSupport extends Object implements Serializable
这是一个实用类,可供支持绑定属性的bean使用。它管理一个监听器列表并将 PropertyChangeEvent 分派给它们。您可以将此类的实例用作bean的成员字段,并将这些类型的工作委托给它。可以为所有属性或按名称指定的属性注册 PropertyChangeListener

以下是遵循JavaBeans规范中规则和建议的 PropertyChangeSupport 使用示例:

 public class MyBean {
     private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);

     public void addPropertyChangeListener(PropertyChangeListener listener) {
         this.pcs.addPropertyChangeListener(listener);
     }

     public void removePropertyChangeListener(PropertyChangeListener listener) {
         this.pcs.removePropertyChangeListener(listener);
     }

     private String value;

     public String getValue() {
         return this.value;
     }

     public void setValue(String newValue) {
         String oldValue = this.value;
         this.value = newValue;
         this.pcs.firePropertyChange("value", oldValue, newValue);
     }

     [...]
 }
 

PropertyChangeSupport 实例是线程安全的。

此类可序列化。在序列化时,它将保存(并恢复)那些本身可序列化的任何监听器。任何不可序列化的监听器在序列化期间将被跳过。

自版本:
1.1
参见:
  • Constructor Details

    • PropertyChangeSupport

      public PropertyChangeSupport(Object sourceBean)
      构造一个 PropertyChangeSupport 对象。
      参数:
      sourceBean - 作为任何事件源的源的 bean。
  • Method Details

    • addPropertyChangeListener

      public void addPropertyChangeListener(PropertyChangeListener listener)
      向监听器列表添加一个 PropertyChangeListener。该监听器已注册为所有属性。同一监听器对象可以添加多次,并且将调用与添加次数相同的次数。如果 listener 为 null,则不会抛出异常,也不会执行任何操作。
      参数:
      listener - 要添加的 PropertyChangeListener
    • removePropertyChangeListener

      public void removePropertyChangeListener(PropertyChangeListener listener)
      从监听器列表中移除一个 PropertyChangeListener。这将移除为所有属性注册的 PropertyChangeListener。如果同一事件源多次添加了 listener,则在移除后将少通知一次。如果 listener 为 null,或者从未为同一属性添加过,将不会抛出异常,也不会执行任何操作。
      参数:
      listener - 要移除的 PropertyChangeListener
    • getPropertyChangeListeners

      public PropertyChangeListener[] getPropertyChangeListeners()
      返回使用 addPropertyChangeListener() 添加到 PropertyChangeSupport 对象的所有监听器的数组。

      如果已使用命名属性添加了一些监听器,则返回的数组将是 PropertyChangeListeners 和 PropertyChangeListenerProxy 的混合体。如果调用方法有兴趣区分监听器,则必须测试每个元素,看它是否是 PropertyChangeListenerProxy,执行强制转换,并检查参数。

      
       PropertyChangeListener[] listeners = bean.getPropertyChangeListeners();
       for (int i = 0; i < listeners.length; i++) {
         if (listeners[i] instanceof PropertyChangeListenerProxy) {
           PropertyChangeListenerProxy proxy =
                          (PropertyChangeListenerProxy)listeners[i];
           if (proxy.getPropertyName().equals("foo")) {
             // proxy 是一个与名为 "foo" 的属性关联的 PropertyChangeListener
           }
         }
       }
       
      返回:
      所有已添加的 PropertyChangeListeners 或如果未添加任何监听器则返回空数组
      自版本:
      1.4
      参见:
    • addPropertyChangeListener

      public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
      为特定属性添加一个 PropertyChangeListener。只有在调用 firePropertyChange 时命名了该特定属性时,才会调用该监听器。同一监听器对象可以添加多次。对于每个属性,将调用添加了该属性的次数。如果 propertyNamelistener 为 null,则不会抛出异常,也不会执行任何操作。
      参数:
      propertyName - 要监听的属性的名称。
      listener - 要添加的 PropertyChangeListener
      自版本:
      1.2
    • removePropertyChangeListener

      public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
      为特定属性移除一个 PropertyChangeListener。如果同一事件源为指定属性多次添加了 listener,则在移除后将少通知一次。如果 propertyName 为 null,则不会抛出异常,也不会执行任何操作。如果 listener 为 null,或者从未为指定属性添加过,将不会抛出异常,也不会执行任何操作。
      参数:
      propertyName - 要监听的属性的名称。
      listener - 要移除的 PropertyChangeListener
      自版本:
      1.2
    • getPropertyChangeListeners

      public PropertyChangeListener[] getPropertyChangeListeners(String propertyName)
      返回与指定名称的属性关联的所有监听器的数组。
      参数:
      propertyName - 正在监听的属性的名称
      返回:
      与指定名称的属性关联的所有 PropertyChangeListeners。如果未添加此类监听器,或者如果 propertyName 为 null,则返回一个空数组。
      自版本:
      1.4
    • firePropertyChange

      public void firePropertyChange(String propertyName, Object oldValue, Object newValue)
      向已注册以跟踪所有属性更新或具有指定名称的属性的监听器报告一个绑定属性更新。

      如果旧值和新值相等且非空,则不会触发事件。

      这只是对更一般的 firePropertyChange(PropertyChangeEvent) 方法的便捷包装。

      参数:
      propertyName - 已更改的属性的程序名称
      oldValue - 属性的旧值
      newValue - 属性的新值
    • firePropertyChange

      public void firePropertyChange(String propertyName, int oldValue, int newValue)
      向已注册以跟踪所有属性更新或具有指定名称的属性的监听器报告一个整数绑定属性更新。

      如果旧值和新值相等,则不会触发事件。

      这只是对更一般的 firePropertyChange(String, Object, Object) 方法的便捷包装。

      参数:
      propertyName - 已更改的属性的程序名称
      oldValue - 属性的旧值
      newValue - 属性的新值
      自版本:
      1.2
    • firePropertyChange

      public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue)
      向已注册以跟踪所有属性更新或具有指定名称的属性的监听器报告一个布尔绑定属性更新。

      如果旧值和新值相等,则不会触发事件。

      这只是对更一般的 firePropertyChange(String, Object, Object) 方法的便捷包装。

      参数:
      propertyName - 已更改的属性的程序名称
      oldValue - 属性的旧值
      newValue - 属性的新值
      自版本:
      1.2
    • firePropertyChange

      public void firePropertyChange(PropertyChangeEvent event)
      向已注册以跟踪所有属性更新或具有指定名称的属性的监听器报告一个属性更改事件。

      如果给定事件的旧值和新值相等且非空,则不会触发事件。

      参数:
      event - 要触发的 PropertyChangeEvent
      自版本:
      1.2
    • fireIndexedPropertyChange

      public void fireIndexedPropertyChange(String propertyName, int index, Object oldValue, Object newValue)
      向已注册以跟踪所有属性更新或具有指定名称的属性更新的侦听器报告绑定的索引属性更新。

      如果旧值和新值相等且非空,则不会触发事件。

      这只是对更一般的firePropertyChange(PropertyChangeEvent)方法的便利包装。

      参数:
      propertyName - 已更改的属性的编程名称
      index - 已更改的属性元素的索引
      oldValue - 属性的旧值
      newValue - 属性的新值
      自版本:
      1.5
    • fireIndexedPropertyChange

      public void fireIndexedPropertyChange(String propertyName, int index, int oldValue, int newValue)
      向已注册以跟踪所有属性更新或具有指定名称的属性更新的侦听器报告整数绑定的索引属性更新。

      如果旧值和新值相等,则不会触发事件。

      这只是对更一般的fireIndexedPropertyChange(String, int, Object, Object)方法的便利包装。

      参数:
      propertyName - 已更改的属性的编程名称
      index - 已更改的属性元素的索引
      oldValue - 属性的旧值
      newValue - 属性的新值
      自版本:
      1.5
    • fireIndexedPropertyChange

      public void fireIndexedPropertyChange(String propertyName, int index, boolean oldValue, boolean newValue)
      向已注册以跟踪所有属性更新或具有指定名称的属性更新的侦听器报告布尔绑定的索引属性更新。

      如果旧值和新值相等,则不会触发事件。

      这只是对更一般的fireIndexedPropertyChange(String, int, Object, Object)方法的便利包装。

      参数:
      propertyName - 已更改的属性的编程名称
      index - 已更改的属性元素的索引
      oldValue - 属性的旧值
      newValue - 属性的新值
      自版本:
      1.5
    • hasListeners

      public boolean hasListeners(String propertyName)
      检查是否有特定属性的任何侦听器,包括那些在所有属性上注册的侦听器。如果propertyName为null,则仅检查在所有属性上注册的侦听器。
      参数:
      propertyName - 属性名称。
      返回:
      如果给定属性有一个或多个侦听器,则为true
      自版本:
      1.2