我有一個遞歸的情況下需要在這裏加載FXML。FXMLLoader獲取控制器返回null
如果我選擇查看目標,它會帶我到另一個加載策略對象列表的屏幕實例。如果我選擇查看策略,則會將我帶到加載策略對象列表的另一個屏幕實例。如果我查看戰術,它會帶我到另一個加載Task對象列表的屏幕實例。
當然,我決定用一個基本的控制器類,ViewChildItemController處理繼承。然後我從ViewObjective,ViewStrategy和ViewTactic中擴展。 (ViewTask沒有意義,因爲Task是沒有孩子的最低級別的項目)。
問題是,當我使用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 2014-08-27 18:45:46
我只有1個FXML文件和5個不同的控制器用於同一個FXML。如果我直接設置FXML,它將被連接到一個且只有一個控制器。我必須爲每個深度級別動態地設置一個新的控制器。 – 2014-08-27 19:05:00