我正在使用綁定和屬性在JavaFX中工作。 我有一個Label label
和一個Person currentPerson
。 我有以下代碼:JavaFX綁定和屬性更改
label.textProperty().bind(currentPerson.nameProperty());
然後,我必須在另一段代碼:
currentPerson = newPerson; //newPerson is a given Person instance
這樣的label
的textProperty
不更新!
但是,如果我的代碼段做:
currentPerson.setName(newPerson.getName());
那麼這個更新的label
的textProperty
。
我的問題是:爲什麼第二種方式更新的label
的textProperty
,而先不,即使的currentPerson
nameProperty
在兩種情況下發生改變?
'label.textProperty()。bind(currentPerson.nameProperty());'只計算一次。那時,計算表達式'currentPerson.nameProperty()'並修改'currentPerson'變量不會導致上面的代碼行再次被執行。 'currentPerson.setName(newPerson.getName());'修改currentPerson的'name'屬性,因此對綁定到它的'text'屬性有影響。您可能應該使用'label.textProperty()。bind(newPerson.nameProperty())'來代替。如果這可以幫助您避免代碼重複,則可以將此代碼移至新方法。 – fabian
@fabian好吧,但是如果我打印'currentPerson'的'nameProperty',在賦值之後並且也在賦值體外,它將被更改爲'newPerson'中包含的'nameProperty'。我明白你說的是什麼,但'nameProperty'已經改變,評估不再執行(爲什麼?)。無論如何,感謝您的快速回復,也許我會按照您的建議綁定到'newPerson'而不是'currentPerson'。 – Kenna
@Kenna *「如果在賦值後打印'currentPerson'的'nameProperty' ...它已經改變了。」*我懷疑它;我懷疑你正從'currentPerson'的* new *值中獲得'nameProperty'。如果你做'StringProperty name = currentPerson.nameProperty();'並打印'name';然後執行'currentPerson = newPerson;'並再次打印'name',它不會改變。 –