我在JavaFX中使用绑定和属性。我有一个Label label
和一个Person currentPerson
。我有以下代码:
label.textProperty().bind(currentPerson.nameProperty());
然后我在另一段代码中:
currentPerson = newPerson; //newPerson is a given Person instance
这样textProperty
的label
不会更新!
但是,如果我在那部分代码中做:
currentPerson.setName(newPerson.getName());
然后这更新了textProperty
的label
。
我的问题是:为什么第二种方式更新textProperty
的label
,而第一种方式没有,即使nameProperty
的currentPerson
在两种情况下都改变了?
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());
}
}
我认为对你的问题最基本的答案是,在currentPerson = newPerson;
线之后,currentPerson
对象与先前与label
绑定的对象不同。
你必须将bind
设置为与person's name
相关,所以当你使用getName
时,它会更新label