为什么Java中的PeropertyChangeListener在oracle';什么是教程?
为什么这不起作用?我通过查看和中的示例实现了这一点 即使是这篇文章也没有帮助我和其他人,也没有链接我浏览过的所有文章,那么我做错了什么,或者我对听众作品有什么误解?这是我的密码:为什么Java中的PeropertyChangeListener在oracle';什么是教程?,java,propertychangelistener,Java,Propertychangelistener,为什么这不起作用?我通过查看和中的示例实现了这一点 即使是这篇文章也没有帮助我和其他人,也没有链接我浏览过的所有文章,那么我做错了什么,或者我对听众作品有什么误解?这是我的密码: public class Person { private String name; private String address; private Integer age; private PropertyChangeSupport propertyChangeSupport = n
public class Person {
private String name;
private String address;
private Integer age;
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void setName(String name) {
this.name = name;
this.propertyChangeSupport.firePropertyChange("name", this.name, name);
}
public void setAddress(String address) {
this.address = address;
this.propertyChangeSupport.firePropertyChange("address", this.address, address);
}
public void setAge(Integer age) {
this.age = age;
this.propertyChangeSupport.firePropertyChange("age", this.age, age);
}
}
我的侦听器类:
public class PersonChangeListener implements PropertyChangeListener {
public PersonChangeListener() {
Person person = new Person();
person.addPropertyChangeListener(this);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("test");
String value = "old value: " + evt.getOldValue() + " New value: " + evt.getNewValue();
System.out.println(value);
}
}
我的主要条目是:
public class ListenerTestMain {
public static void main(String... args) {
Person person1 = new Person();
person1.addPropertyChangeListener(new PersonChangeListener());
person1.setName("Frank");
person1.setAddress("Street 3");
person1.setAge(26);
Person person2 = new Person();
person2.setName("Joe");
person2.setAddress("Avenue Lane 3");
person2.setAge(26);
if (!person1.getName().equalsIgnoreCase(person2.getName())) {
person1.setName(person2.getName());
}
if (!person1.getAddress().equalsIgnoreCase(person2.getAddress())) {
person1.setAddress(person2.getAddress());
}
if (!person1.getAge().equals(person2.getAge())) {
person1.setAge(person2.getAge());
}
}
}
因此,在本例中,当我为person1
设置新值时,name
和address
我希望在PersonChangeListener
中为它们调用propertyChanged
方法。但这并没有发生,至少我没有在控制台中得到任何输出
不管怎么说,这是因为
PropertyChangeListener
只适用于某些特定的java库,如javafx或类似的库吗?是否必须实现自定义事件触发器?设置属性,然后调用处理程序。此时,此.name
(即旧值
)和name
(即新值
)相等,因此事件不会触发
要么在设置值之前调用处理程序(我不建议),要么使用另一个变量保存旧值。设置属性后调用处理程序。此时,
此.name
(即旧值
)和name
(即新值
)相等,因此事件不会触发
要么在设置值之前调用处理程序(我不建议),要么使用另一个变量来保存旧值。哈哈哈谢谢@Hossein-为什么我没有注意到抱歉,应该仔细查看教程xD。他们甚至通过将旧值存储到局部变量中来显示它。谢谢!它现在起作用了,感觉有点傻哈哈,我需要更多的咖啡。不用担心@TheLearner。发生在我们中最好的人身上。哈哈哈谢谢@Hossein-为什么我没有注意到抱歉,我应该仔细看看教程xD。他们甚至通过将旧值存储到局部变量中来显示它。谢谢!它现在起作用了,感觉有点傻哈哈,我需要更多的咖啡。不用担心@TheLearner。发生在我们最好的人身上。