У меня есть рекурсивный случай загрузки FXML.FXMLLoader get controller возвращает null
Если я выбираю View Objective, он переносит меня в другой экземпляр экрана, который загружает список объектов Strategy. Если я выберу для просмотра Стратегии, он приведет меня к другому экземпляру экрана, который загружает список тактических объектов. Если я рассматриваю Tactic, он переносит меня в другой экземпляр экрана, который загружает список объектов Task.
Естественно, я решил использовать базовый класс контроллера, ViewChildItemController для обработки наследования. Затем я расширил его из ViewObjective, ViewStrategy и ViewTactic. (ViewTask не имеет смысла, потому что задача - это элемент самого низкого уровня без детей).
Проблема в том, что я использую loader.loadController(), метод возвращает null.
FXMLLoader loader = new FXMLLoader(this.getClass()
.getResource(ScreenPaths.VIEW_PLAN_ITEM));
Parent root = null;
try {
root = loader.load();
} catch (IOException e) {
}
ViewObjectiveController ctrl = loader.getController();//Return null? Why?
ObservableList<Strategy> childItems = childItemsTableView.
getSelectionModel().getSelectedItem().getChildPlanItems();
ctrl.initValues(childItems);
DialogPopup.showNode(root);
Может быть, что база FXML загружаемый закрученный в ViewChildItemController? Должен ли я создавать несколько копий FXML и подключать контроллеры отдельно к каждому ViewObjectiveController, ViewStrategyController и т. Д.? Это не имеет смысла делать.
Я мог бы попробовать loader.setController(), но я не уверен, будут ли снова отображаться атрибуты @FXML.
Просто любопытно, какие-либо причины не устанавливать ваш контроллер непосредственно в 'fxml'? – ItachiUchiha
У меня только 1 файл FXML и 5+ разных контроллеров для одного и того же FXML. Если я установлю FXML напрямую, он будет подключен к одному и только одному контроллеру. Я должен динамически устанавливать новый контроллер для каждого уровня глубины. –