Как транслировать событие в JavaFXJAVA

Программисты JAVA общаются здесь
Anonymous
Как транслировать событие в JavaFX

Сообщение Anonymous »

Дано приложение JavaFX с несколькими презентаторами и представлениями, организованными в иерархию. Как я могу транслировать события от родительского презентатора до дочернего презентатора/представления?
Моя архитектура выглядит следующим образом: у меня есть MainPresenter, который находится на вершине иерархии

Код: Выделить всё

public class MainPresenter {

@FXML private TreeView navigation;
@FXML private AnchorPane       contentView;
@Autowired private MainView    mainView;
@Autowired private DetailView  detailView;

@FXML
public void initialize() {

// register a handler for selection of treeview items
navigation.getSelectionModel().selectedItemProperty().addListener(
new ChangeListener() {
// ...
contentView.getChildren().clear();
contentView.getChildren().add(detailView);
contentView.fireEvent(new ResourceEvent(ResourceEvent.SELECTED, model));
// ...
}
);
}
}
Также имеется презентатор для подробного просмотра выбранного элемента:

Код: Выделить всё

public class DetailPresenter {

@Autowired private DetailView       view;

@PostConstruct
public void postInit() {
// is being executed
view.getView().addEventHandler(ResourceEvent.SELECTED, (event) -> {
// not being invoked
});
}
}
Я хочу добиться того, чтобы всякий раз, когда элемент выбирается в TreeView, DetailView для этого элемента должен быть добавлен в граф сцены (работает), а DetailPresenter должен быть уведомлен о загрузке ресурса из внутренней службы.
Одним из решений этой проблемы было бы просто автоматически подключить DetailPresenter в MainPresenter, а это не то, что я хочу. Я хочу иметь свободную связь. Как я предположил из документации по обработке событий, событие рассылается по всем узлам графа сцены, а затем возвращается обратно в корень сцены. Поскольку EventHandler в моем DetailPresenter не вызывается, я полагаю, что событие не передается.
Мой вопрос: как этого добиться?

Вернуться в «JAVA»