在Java中,可以使用PropertyChangeListener接口和PropertyChangeSupport类来实现属性更改监听器。下面是一个示例代码,演示如何创建一个自定义的MyPropertyChangeListener类来监听属性变化:
1. MyPropertyChangeListener类:自定义属性更改监听器类,实现PropertyChangeListener接口。
package com.fgy.demo.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class MyPropertyChangeListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("Property " + evt.getPropertyName() + " changed from "
+ evt.getOldValue() + " to " + evt.getNewValue());
}
}
2. 示例使用:创建一个示例类,在该类中演示如何使用MyPropertyChangeListener监听属性变化。
package com.test.demo.PropertyChangeListener;
import java.util.ArrayList;
import java.beans.PropertyChangeSupport;
public class Main {
public static void main(String[] args){
MyPropertyChangeListener listener = new MyPropertyChangeListener();
ArrayList<PersonInfo> personInfoList = new ArrayList<>();
for (int i=0;i<2;i++){
PersonInfo personInfo = new PersonInfo();
personInfo.addPropertyChangeListener(listener);
personInfoList.add(personInfo);
}
for (int i =0,len =personInfoList.size(); i<len;i++ ){
personInfoList.get(i).setAge(i);
personInfoList.get(i).setProperty("新值" +i);
personInfoList.get(i).setName("张三" + i);
}
}
package com.test.demo.PropertyChangeListener;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class PersonInfo{
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private String property;
private Integer age;
private String name;
public void setProperty(String newProperty) {
String oldProperty = this.property;
this.property = newProperty;
pcs.firePropertyChange("property", oldProperty, newProperty);
}
public String getProperty() {
return property;
}
public void setName(String value) {
String oldName = this.name;
this.name = value;
pcs.firePropertyChange("name", oldName, this.name);
}
public String getName() {
return name;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
return age;
}
/**
* 添加监听器
* @param listener
*/
public void addPropertyChangeListener(PropertyChangeListener listener) {
pcs.addPropertyChangeListener(listener);
}
/**
* 移除监听器
* @param listener
*/
public void removePropertyChangeListener(PropertyChangeListener listener) {
pcs.removePropertyChangeListener(listener);
}
}
在这个示例中,MyPropertyChangeListener类实现了PropertyChangeListener接口,当属性发生变化时,propertyChange方法会被调用,输出属性变化的信息。
在Main类中,创建了一个PropertyChangeSupport实例pcs用于支持属性更改通知。然后创建了一个MyPropertyChangeListener实例listener,并将其添加到pcs中。最后,通过调用firePropertyChange方法模拟属性变化,触发监听器输出属性变化信息。
最后输出结果如下图所示:
通过这个示例,你可以了解如何使用Java的属性更改监听器来监听对象属性的变化,以及如何自定义属性更改监听器类来处理属性变化事件。