【发布时间】:2013-05-11 11:55:47
【问题描述】:
绑定到本身包装在属性中的对象的属性似乎在典型应用程序中做了很多事情,在 JavaFX 中是否有比我在下面做的更好的方法来做到这一点?
需要解释的更多细节:我想在 JavaFX 2.2 中制作 GUI,用于管理多个项目。我创建了一个小示例来测试所有内容,其中项目是人。一组人员以自定义方式显示(不是列表或树,但我认为这不重要),我可以选择一个。
在侧面板中,我可以编辑当前选定的人。更新在一组人员中立即可见,当我选择另一个人时,编辑面板会更新。
JavaFX 的双向绑定似乎非常适合此目的。我目前有这个用于“人员编辑”窗格的 fx:controller:
public class PersonEditor implements ChangeListener<Person> {
@FXML private TextField nameField;
@FXML private TextField ageField;
@FXML private TextField heightField;
public void setSelection(ObjectProperty<Person> selectedPersonProperty) {
selectedPersonProperty.addListener(this);
}
@Override
public void changed(ObservableValue<? extends Person> observable, Person oldVal, Person newVal) {
if (oldVal != null) {
nameField.textProperty().unbindBidirectional(oldVal.nameProperty());
ageField.textProperty().unbindBidirectional(oldVal.ageProperty());
heightField.textProperty().unbindBidirectional(oldVal.heightProperty());
}
if (newVal != null) {
nameField.textProperty().bindBidirectional(newVal.nameProperty());
ageField.textProperty().bindBidirectional(newVal.ageProperty());
heightField.textProperty().bindBidirectional(newVal.heightProperty());
}
}
}
我想知道是否有更好的方法,也许在 JavaFX 中可以绑定到可以更改的对象的属性?我不喜欢我必须手动取消绑定所有属性的事实,感觉就像重复的代码。 还是像 JavaFx 那样简单?
【问题讨论】:
标签: javafx-2