模块 java.desktop

类 VetoableChangeSupport

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

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

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


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

    • VetoableChangeSupport

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

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