我创建了一个根FXP,它是一个BorderPane,它有自己的根控制器.我想动态地将FXML添加到此边框的中心.
这些fxml中的每一个共享相同的控制器,根控制器.我在netbeans中通过在创建空FXML文件时选择一个现有控制器来完成此操作.
我也给了节点不同的id名称,但根控制器不识别这些fxml中的节点.
是否有可能为不同的fxml共享相同的控制器?
提前致谢
背景
我不知道真的推荐共享控制器实例,至少我以前从未见过它.
即使您在每个fxml中设置控制器类,您要加载到相同的值,它也不会共享同一个控制器实例,因为每次加载控制器时,它都会创建一个新的实例(对象)控制器类(似乎不是你想要的).
潜在解决方案
我没有尝试过这些解决方案,但相信它们会起作用.
每次加载新的fxml文件时,都可能会调用initialize方法.因此,您需要通过初始化幂等来解释逻辑中的问题.
A.手动设置控制器实例.
手动创建控制器类的实例.
MyController controller = new MyController();
Run Code Online (Sandbox Code Playgroud)在加载每个fxml之前,将控制器设置为控制器实例.
FXMLLoader loader = new FXMLLoader();
loader.setController(controller);
Panel panel = (Panel) loader.load("myfxml.fxml");
Run Code Online (Sandbox Code Playgroud)对每个fxml文件重复步骤3,每次使用相同的控制器引用.
B.使用控制器工厂.
您可以在fxml加载器上设置控制器工厂,并让控制器工厂始终返回相同的控制器实例.
| 归档时间: |
|
| 查看次数: |
7706 次 |
| 最近记录: |