JavaFX绑定和属性更改

时间:2017-12-27 17:52:20

标签: java javafx properties binding

我在JavaFX中使用绑定和属性。 我有一个Label label和一个Person currentPerson。 我有以下代码:

label.textProperty().bind(currentPerson.nameProperty());

然后我在另一段代码中:

currentPerson = newPerson;   //newPerson is a given Person instance

这样textProperty的{​​{1}}不会更新!

但如果我在代码部分中这样做:

label

然后更新currentPerson.setName(newPerson.getName()); 的{​​{1}}。

我的问题是:为什么第二种方式会更新textProperty label,而第一种方式则不会,即使textProperty label的{​​{1}}发生了变化例

3 个答案:

答案 0 :(得分:1)

我认为您问题的最基本答案是,在currentPerson = newPerson;行之后,currentPerson对象与先前绑定到label的对象不同。

答案 1 :(得分:1)

As mentioned,您之后丢失了第一个绑定:

currentPerson = newPerson;

解决方案是在currentPerson分配后重新绑定currentPerson,或者使用方法传递newPerson数据,例如:

currentPerson.setPerson(newPerson);


public class Person{

    private StringProperty name = new SimpleStringProperty();

    // ....


    public void setPerson(Person person) {
        // ....
        this.name.set(person.name.get());
    }
}

答案 2 :(得分:-1)

必须将bind设置为与person's name相关,因此当您使用getName时,它会更新label