JavaFX绑定和属性更改

问题描述 投票:0回答:3

我在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在两种情况下都改变了?

java javafx properties binding
3个回答
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());
    }
}

1
投票

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.