为什么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。发生在我们最好的人身上。