JavaFX多个FXML和1个共享控制器
我创建了一个根FXML,它是一个BorderPane,它有自己的根控制器。 我想动态地将FXML添加到此边框窗格的中心 每个fxml共享同一个控制器,根控制器。在netbeans中,我在创建空FXML文件时选择了一个现有的控制器 我还为节点指定了不同的id名称,但根控制器无法识别这些fxml中的节点 是否可以为不同的fxml共享同一控制器JavaFX多个FXML和1个共享控制器,javafx,fxml,Javafx,Fxml,我创建了一个根FXML,它是一个BorderPane,它有自己的根控制器。 我想动态地将FXML添加到此边框窗格的中心 每个fxml共享同一个控制器,根控制器。在netbeans中,我在创建空FXML文件时选择了一个现有的控制器 我还为节点指定了不同的id名称,但根控制器无法识别这些fxml中的节点 是否可以为不同的fxml共享同一控制器 提前感谢背景 我不知道是否真的建议共享控制器实例,至少我以前从未见过这样做 即使将要加载的每个fxml中的控制器类设置为相同的值,它也不会共享相同的控制器实例
提前感谢背景 我不知道是否真的建议共享控制器实例,至少我以前从未见过这样做 即使将要加载的每个fxml中的控制器类设置为相同的值,它也不会共享相同的控制器实例,因为每次加载控制器时,它都会创建控制器类的新实例(对象)(这似乎不是您想要的) 潜在解决方案 我没有尝试过这两种解决方案,但我相信它们会奏效 每次加载新的fxml文件时,都可能会调用initialize方法。因此,您需要在逻辑中通过使initialize来说明这一点 A.手动设置控制器实例
MyController controller = new MyController();
FXMLLoader loader = new FXMLLoader();
loader.setController(controller);
Panel panel = (Panel) loader.load("myfxml.fxml");
您可以在fxml加载程序上,让控制器工厂始终返回相同的控制器实例。为什么要删除对控制器类的所有引用?因为,如果要在代码中设置控制器类,您不需要在fxml中引用它。如果不从fxml中删除控制器引用,则可能会造成混淆。例如,fxml加载器实现可能会看到您在fxml中引用的控制器类,并实例化所引用控制器类的新实例,而不是使用您在代码中设置的实例。对于fxml中的控制器引用,它可能会像您期望的那样工作,也可能不会。