绑定到自身包装在属性中的对象的属性看起来像是在典型应用程序中做了很多事情,是否有更好的方式在JavaFX中执行此操作我在下面做?绑定到可切换对象的JavaFX属性
一些更多的细节解释:我想在JavaFX 2.2中制作GUI,以管理一些项目。我创建了一个小例子来测试所有项目都是人的东西。这组人以自定义的方式显示(不是列表或树,但我认为这不重要),我可以选择一个。
在侧面板中,我可以编辑当前选定的人员。更新在人员集合中立即可见,并且当我选择另一个人时,编辑面板将被更新。
JavaFX的双向绑定似乎是完美的。我现在有这样的FX:在“人编辑”面板的控制器:
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中简单吗?
嗯,是的,我看到你指出绑定并不总是需要的。但在这种情况下,我最终会遇到类似的情况:我通过制作2个辅助方法,1个方法“selectedPersonToFields”和1个方法“fieldsToSelectedPerson”来实现它。在这两种情况下,您都可以将字段集中的数据复制到人员属性集合(或反向)。再一次,这是两倍几乎相同的代码!不知何故,我想避免在这两种情况下。我觉得它可以更优雅。我正在寻找一些现有的JavaFX方式来做到这一点,或者一些模式或我可以实现的一些模式来做到这一点...... –