详解java中的PropertyChangeSupport与PropertyChangeListener

PropertyChangeSupport 是 Java 中的一个工具类,它实现了支持属性更改监听器的机制,用于帮助我们在程序设计中更方便的实现属性的监听和更改。 PropertyChangeSupport 基于事件模型,可以让我们方便地实现对象属性的改变监听。

详解java中的PropertyChangeSupport与PropertyChangeListener

介绍

PropertyChangeSupport 是 Java 中的一个工具类,它实现了支持属性更改监听器的机制,用于帮助我们在程序设计中更方便的实现属性的监听和更改。 PropertyChangeSupport 基于事件模型,可以让我们方便地实现对象属性的改变监听。

PropertyChangeListener 接口是监听器的概念,它继承了 java.util.EventListener 接口,定义了监听属性变化的方法,我们可以实现该接口来监听指定属性的变化。

PropertyChangeSupport

用法

PropertyChangeSupport 是由模型类组合使用的。我们需要实例化一个 PropertyChangeSupport 来对模型类进行建模。在模型类中,我们必须在 getter 和 setter 方法中调用相应的 addPropertyChangeListener 和 removePropertyChangeListener 方法。

import java.beans.PropertyChangeSupport;
public class Person {
   private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
   private String name;
   public void setName(String name) {
      propertyChangeSupport.firePropertyChange("name", this.name, name);
      this.name = name;
   }
   public String getName() { return name; }
   public void addPropertyChangeListener(PropertyChangeListener listener) {
      propertyChangeSupport.addPropertyChangeListener(listener);
   }
   public void removePropertyChangeListener(PropertyChangeListener listener) {
      propertyChangeSupport.removePropertyChangeListener(listener);
   }
}

这是一个简单的模型 Person,它包含一个 String 类型的属性 name。在我们调用 Person 对象的 setName 方法时,firePropertyChange 方法会创建一个 PropertyChangeEvent 对象并向 PropertyChangeListener 通知属性变化,通知的内容包括属性名称 “name”、属性变化前的值 this.name、属性变化后的值 name。

此外,addPropertyChangeListener 和 removePropertyChangeListener 方法用于添加和移除 PropertyChangeListener,可以在监听器中用到。

示例

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class PersonChangeListener implements PropertyChangeListener {
   @Override
   public void propertyChange(PropertyChangeEvent evt) {
      System.out.print("Property " + evt.getPropertyName() + " changed from ");
      System.out.println(evt.getOldValue() + " to " + evt.getNewValue());
   }
}

public class Main {
   public static void main(String[] args) {
      Person person = new Person();
      person.addPropertyChangeListener(new PersonChangeListener());
      person.setName("Peter");
   }
}

在这个示例中,我们创建了一个 PersonChangeListener 监听器来监听 Person 对象的属性变化,在主方法中创建了一个 Person 实例,并注册监听器。当 name 属性变化时,监听器将接收到相应的事件,并打印属性变化的信息。

PropertyChangeListener

用法

PropertyChangeListener 接口非常简单。我们可以在实现类中重写 propertyChange 方法来处理属性变化事件。该方法提供了 PropertyChangeEvent 参数,用于获取属性名称、属性变化前后的值等信息。

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class PropertyChangeListenerImpl implements PropertyChangeListener {
   @Override
   public void propertyChange(PropertyChangeEvent evt) {
      System.out.print("Property " + evt.getPropertyName() + " changed from ");
      System.out.println(evt.getOldValue() + " to " + evt.getNewValue());
   }
}

示例

import java.beans.PropertyChangeListener;
public class Main {
   public static void main(String[] args) {
      Person person = new Person();
      PropertyChangeListener pcl = new PropertyChangeListenerImpl();
      person.addPropertyChangeListener(pcl);
      person.setName("Peter");
   }
}

这个示例创建了一个 PropertyChangeListenerImpl 监听器,并将它注册到 Person 对象中。当 name 属性变化时,监听器将接收到相应的事件,并打印属性变化的信息。

本文标题为:详解java中的PropertyChangeSupport与PropertyChangeListener

基础教程推荐