如何在一个 class 中加载多个 FXML?
How to load several FXML in one class?
我用 SceneBuilder 创建了几个组件,我现在的目标是使用所有这些文件创建一个完整的window .但是我无法加载多个 FXML,这是我尝试做的 :
private MenuBar menuBar;
private Pane filtersView;
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainWindow.class.getResource("../component/menuBar/MenuBar.fxml"));
menuBar = (MenuBar) loader.load();
loader.setLocation(MainWindow.class.getResource("../component/filtersView/FiltersView.fxml"));
filtersView = (Pane) loader.load();
这是返回错误:
Root value already specified.
我是否必须为每个组件创建一个加载程序?
FXMLLoader
实例具有许多相互依赖的属性(例如 root
和 controller
),这些属性通过解析 FXML 文件或以编程方式设置。这些中的每一个还以各种方式与 FXMLLoader
实例持有的 namespace
地图进行交互。
因为 FXMLLoader
的生命周期如果可以重复使用会非常复杂,所以多次设置 root
或 controller
是错误的. (如果 root
设置为新值,controller
会发生什么情况?namespace
中的属性会怎样?)。
因此,您应该只使用一次 FXMLLoader
实例。为每个要加载的 FXML 文件创建一个新的加载器:
FXMLLoader menuLoader = new FXMLLoader();
menuLoader.setLocation(MainWindow.class.getResource("../component/menuBar/MenuBar.fxml"));
menuBar = (MenuBar) menuLoader.load();
FXMLLoader filtersLoader = new FXMLLoader();
filtersLoader.setLocation(MainWindow.class.getResource("../component/filtersView/FiltersView.fxml"));
filtersView = (Pane) filtersLoader.load();
我用 SceneBuilder 创建了几个组件,我现在的目标是使用所有这些文件创建一个完整的window .但是我无法加载多个 FXML,这是我尝试做的 :
private MenuBar menuBar;
private Pane filtersView;
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainWindow.class.getResource("../component/menuBar/MenuBar.fxml"));
menuBar = (MenuBar) loader.load();
loader.setLocation(MainWindow.class.getResource("../component/filtersView/FiltersView.fxml"));
filtersView = (Pane) loader.load();
这是返回错误:
Root value already specified.
我是否必须为每个组件创建一个加载程序?
FXMLLoader
实例具有许多相互依赖的属性(例如 root
和 controller
),这些属性通过解析 FXML 文件或以编程方式设置。这些中的每一个还以各种方式与 FXMLLoader
实例持有的 namespace
地图进行交互。
因为 FXMLLoader
的生命周期如果可以重复使用会非常复杂,所以多次设置 root
或 controller
是错误的. (如果 root
设置为新值,controller
会发生什么情况?namespace
中的属性会怎样?)。
因此,您应该只使用一次 FXMLLoader
实例。为每个要加载的 FXML 文件创建一个新的加载器:
FXMLLoader menuLoader = new FXMLLoader();
menuLoader.setLocation(MainWindow.class.getResource("../component/menuBar/MenuBar.fxml"));
menuBar = (MenuBar) menuLoader.load();
FXMLLoader filtersLoader = new FXMLLoader();
filtersLoader.setLocation(MainWindow.class.getResource("../component/filtersView/FiltersView.fxml"));
filtersView = (Pane) filtersLoader.load();