Привязка к свойствам объекта, который сам обернут в свойство, кажется чем-то, что делает много в типичных приложениях, есть ли лучший способ сделать это в JavaFX, чем то, что я делаю ниже?
Некоторые подробности для объяснения: я хочу сделать GUI в JavaFX 2.2 для управления несколькими элементами. Я создал небольшой пример для проверки всего, в котором элементы являются людьми. Набор людей отображается по-своему (не список или дерево, но я не думаю, что это имеет значение здесь), и я могу выбрать один.
В боковой панели я могу редактировать выбранного человека. Обновления сразу отображаются в списке лиц, и когда я выбираю другого человека, панель редактирования обновляется.
Двунаправленное связывание 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?