详解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 - Python技术站