我在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}}发生了变化例
答案 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