模块 java.desktop

类 PropertyChangeSupport

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

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

以下是 PropertyChangeSupport 用法示例,它遵循 JavaBeans 规范中规定的规则和建议:

 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
参见:
  • 构造方法详细信息

    • PropertyChangeSupport

      public PropertyChangeSupport(Object  sourceBean)
      构造一个 PropertyChangeSupport 对象。
      参数:
      sourceBean - 作为任何事件的源提供的 bean。
  • 方法详情

    • 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 is a PropertyChangeListener which was associated
          // with the property named "foo"
         }
        }
       }
        
      返回:
      所有的 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 为空,则返回一个空数组。
      自从:
      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 - 属性名称。
      返回:
      如果给定属性有一个或多个监听,则为真
      自从:
      1.2