Учитывая приложение JavaFX с несколькими презентаторами и представлениями, организованными в иерархии. Как я могу транслировать события от родительского презентатора до дочернего презентатора/представления?Как транслировать событие в JavaFX
Моя архитектура выглядит следующим образом: У меня есть которым MainPresenter находится на вершине иерархии
public class MainPresenter {
@FXML private TreeView<String> 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<TreeItem<String>>() {
// ...
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
, чего я не хочу. Я хочу иметь свободную связь. Как я предположил из Документации on Event Handling, Событие отправляется вниз ко всем узлам графа сцены и затем возвращается к корню сцены. Поскольку EventHandler
в моем DetailPresenter
не вызывается, я полагаю, что событие не передается.
Мой вопрос будет, как бы достичь этого?
Я уверен, что вы решили это право? или? – Elltz
Фактически я закончил использование внешнего механизма публикации/подписки. Если вы используете Spring для своего приложения, посмотрите на события приложений springs. Я закончил свой собственный EventBus, так как мне не нужны какие-либо причудливые функции. – Markus