我已经创建了一个根的FXML这是一个BorderPane,它有他自己的根控制器。 我想动态地将FXML添加到此边框的中心。JavaFX多FXML和1个共享控制器
每个这些FXML的共享相同的控制器,根控制器。我在netbeans中通过在创建一个空的FXML文件时选择一个exsisting控制器来完成此操作。
我也给了不同的节点ID名称,但根本控制器不会在这些FXML的识别节点。
是否有可能分享不同的FXML的同一控制器?
在此先感谢
我已经创建了一个根的FXML这是一个BorderPane,它有他自己的根控制器。 我想动态地将FXML添加到此边框的中心。JavaFX多FXML和1个共享控制器
每个这些FXML的共享相同的控制器,根控制器。我在netbeans中通过在创建一个空的FXML文件时选择一个exsisting控制器来完成此操作。
我也给了不同的节点ID名称,但根本控制器不会在这些FXML的识别节点。
是否有可能分享不同的FXML的同一控制器?
在此先感谢
背景
我不知道,共享控制器实例实在是推荐,至少我从来没有见过它之前完成。
即使您在每个fxml中设置了控制器类,但您将加载到相同的值,但它不会共享相同的控制器实例,因为每次加载控制器时,都会创建一个新实例(对象)的控制器类(这似乎不是你想要的)。
可能的解决方案
我还没有尝试过这两种解决方案,但相信他们会工作。
初始化方法很可能会在每次加载新FXML文件调用。所以你会想通过初始化idempotent来解释你的逻辑。
A.手动设置控制器实例。
手动创建控制器类的实例。
MyController controller = new MyController();
在加载每个fxml之前,将控制器设置为您的控制器实例。
FXMLLoader loader = new FXMLLoader();
loader.setController(controller);
Panel panel = (Panel) loader.load("myfxml.fxml");
对每个fxml文件重复步骤3,每次使用相同的控制器参考。
B.使用一个控制器工厂。
您可以在您的fxml加载器上使用set a controller factory,并让控制器工厂始终返回相同的控制器实例。
谢谢你,你的信息真的很有帮助 – user1786646