Module  java.desktop
软件包  java.beans

Class PropertyChangeSupport

  • All Implemented Interfaces:
    Serializable
    已知直接子类:
    SwingPropertyChangeSupport


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

    下面是一个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
    另请参见:
    VetoableChangeSupportSerialized Form
    • 构造方法详细信息

      • 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为空,或者从未添加,则不会抛出异常,也不会执行任何操作。
        参数
        listener - 要删除的PropertyChangeListener
      • getPropertyChangeListeners

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

        如果一些监听器已经添加了一个named属性,那么返回的数组将是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
        另请参见:
        PropertyChangeListenerProxy
      • addPropertyChangeListener

        public void addPropertyChangeListener​(String propertyName,
                                              PropertyChangeListener listener)
        为特定属性添加PropertyChangeListener。 只有当调用firePropertyChange命名该特定属性时,才会调用该侦听器。 可以多次添加相同的侦听器对象。 对于每个属性,侦听器将被调用为该属性添加的次数。 如果propertyNamelistener为空,则不会抛出异常,并且不执行任何操作。
        参数
        propertyName - 要收听的财产的名称。
        listener - 要添加的PropertyChangeListener
        从以下版本开始:
        1.2
      • removePropertyChangeListener

        public void removePropertyChangeListener​(String propertyName,
                                                 PropertyChangeListener listener)
        删除特定属性的PropertyChangeListener。 如果listener添加到指定属性的同一事件源,则会在被删除之后被通知一次。 如果propertyName为空,则不会抛出任何异常,也不会执行任何操作。 如果listener为空,或者从未为指定的属性添加,则不会抛出异常并且不执行任何操作。
        参数
        propertyName - 收听的财产的名称。
        listener - 要删除的PropertyChangeListener
        从以下版本开始:
        1.2
      • getPropertyChangeListeners

        public PropertyChangeListener[] getPropertyChangeListeners​(String propertyName)
        返回与named属性相关联的所有侦听器的数组。
        参数
        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