我有一个递归的情况下需要在这里加载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