JavaFX绑定和属性更改
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX绑定和属性更改相关的知识,希望对你有一定的参考价值。
我在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
以上是关于JavaFX绑定和属性更改的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX 自定义图表类 - 如何将节点的 layoutX 和 layoutY 属性绑定到 NumberAxis 的显示位置?