JavaFX绑定和属性更改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX绑定和属性更改相关的知识,希望对你有一定的参考价值。

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

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

然后我在另一段代码中:

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

这样textPropertylabel不会更新!

但是,如果我在那部分代码中做:

currentPerson.setName(newPerson.getName());

然后这更新了textPropertylabel

我的问题是:为什么第二种方式更新textPropertylabel,而第一种方式没有,即使namePropertycurrentPerson在两种情况下都改变了?

答案

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绑定和属性更改的主要内容,如果未能解决你的问题,请参考以下文章

J1003.JavaFX属性和绑定01——简单对象

清理 JavaFX 属性侦听器和绑定(内存泄漏)

JavaFX 自定义图表类 - 如何将节点的 layoutX 和 layoutY 属性绑定到 NumberAxis 的显示位置?

JavaFx:窗口切换和ListView以及TableView的值绑定

使用 MVVM 和数据绑定更改每个片段中的工具栏标题

使用 JavaFX 属性包装 JavaBean