Module java.desktop
Package java.beans

Class VetoableChangeSupport

java.lang.Object
java.beans.VetoableChangeSupport
所有实现的接口:
Serializable

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

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


 public class MyBean {
     private final VetoableChangeSupport vcs = new VetoableChangeSupport(this);

     public void addVetoableChangeListener(VetoableChangeListener listener) {
         this.vcs.addVetoableChangeListener(listener);
     }

     public void removeVetoableChangeListener(VetoableChangeListener listener) {
         this.vcs.removeVetoableChangeListener(listener);
     }

     private String value;

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

     public void setValue(String newValue) throws PropertyVetoException {
         String oldValue = this.value;
         this.vcs.fireVetoableChange("value", oldValue, newValue);
         this.value = newValue;
     }

     [...]
 }
 

VetoableChangeSupport 的实例是线程安全的。

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

自从:
1.1
参见:
  • Constructor Details

    • VetoableChangeSupport

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

    • addVetoableChangeListener

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

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

      public VetoableChangeListener[] getVetoableChangeListeners()
      返回使用 addVetoableChangeListener() 添加到 VetoableChangeSupport 对象的所有监听器的数组。

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

      
       VetoableChangeListener[] listeners = bean.getVetoableChangeListeners();
       for (int i = 0; i < listeners.length; i++) {
              if (listeners[i] instanceof VetoableChangeListenerProxy) {
           VetoableChangeListenerProxy proxy =
                          (VetoableChangeListenerProxy)listeners[i];
           if (proxy.getPropertyName().equals("foo")) {
             // proxy 是一个与名为 "foo" 的属性关联的 VetoableChangeListener
           }
         }
       }
       
      返回:
      所有添加的 VetoableChangeListeners 或如果没有添加任何监听器则返回空数组
      自从:
      1.4
      参见:
    • addVetoableChangeListener

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

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

      public VetoableChangeListener[] getVetoableChangeListeners(String propertyName)
      返回已与指定属性关联的所有监听器的数组。
      参数:
      propertyName - 正在监听的属性的名称
      返回:
      所有与指定属性关联的 VetoableChangeListeners。如果没有添加此类监听器,或者 propertyName 为 null,则返回一个空数组。
      自从:
      1.4
    • fireVetoableChange

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

      任何监听器都可以抛出 PropertyVetoException 来否决更新。如果其中一个监听器否决了更新,此方法将向已确认此更新的所有监听器传递一个新的“撤销” PropertyChangeEvent,将其恢复为旧值,并再次抛出 PropertyVetoException

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

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

      参数:
      propertyName - 即将更改的属性的编程名称
      oldValue - 属性的旧值
      newValue - 属性的新值
      抛出:
      PropertyVetoException - 如果其中一个监听器否决了属性更新
    • fireVetoableChange

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

      任何监听器都可以抛出 PropertyVetoException 来否决更新。如果其中一个监听器否决了更新,此方法将向已确认此更新的所有监听器传递一个新的“撤销” PropertyChangeEvent,将其恢复为旧值,并再次抛出 PropertyVetoException

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

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

      参数:
      propertyName - 即将更改的属性的编程名称
      oldValue - 属性的旧值
      newValue - 属性的新值
      抛出:
      PropertyVetoException - 如果其中一个监听器否决了属性更新
      自从:
      1.2
    • fireVetoableChange

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

      任何监听器都可以抛出 PropertyVetoException 来否决更新。如果其中一个监听器否决了更新,此方法将向已确认此更新的所有监听器传递一个新的“撤销” PropertyChangeEvent,将其恢复为旧值,并再次抛出 PropertyVetoException

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

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

      参数:
      propertyName - 即将更改的属性的程序名称
      oldValue - 属性的旧值
      newValue - 属性的新值
      抛出:
      PropertyVetoException - 如果其中一个监听器否决属性更新
      自版本:
      1.2
    • fireVetoableChange

      public void fireVetoableChange(PropertyChangeEvent event) throws PropertyVetoException
      向已注册以跟踪所有属性或具有指定名称的属性的更新的监听器触发属性更改事件。

      任何监听器都可以抛出PropertyVetoException来否决更新。如果其中一个监听器否决更新,此方法将向已确认此更新的所有监听器传递一个新的“撤销”PropertyChangeEvent,将其恢复为旧值,并再次抛出PropertyVetoException

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

      参数:
      event - 要触发的PropertyChangeEvent
      抛出:
      PropertyVetoException - 如果其中一个监听器否决属性更新
      自版本:
      1.2
    • hasListeners

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