2 回答
TA贡献1963条经验 获得超6个赞
我可以告诉你什么对我有用。首先,FXML 文件应该被视为资源而不是 Java 源文件,因此最好将它们放在自己的目录树中。您的源代码当前位于/src/main/java树中,因此您的 FXML 文件应移至/src/main/resources树中,理想情况下移至名为fxml. (我还有一个名为的子目录i18n,其中包含用于定义多种语言的文本标签的资源包。)
在路径下找到您的 FXML 文件后,/src/main/resources/fxml您应该能够从 JavaFX 控制器加载它们,如下所示:
FXMLLoader loader = new FXMLLoader();
URL fxmlLocation = getClass().getResource("/fxml/main_screen.fxml");
loader.setLocation(fxmlLocation);
loader.setController(mainScreenController);
loader.setResources(ResourceBundle.getBundle("i18n/Text", new Locale("sv", "SE")));
Pane pane = loader.<Pane>load();
Scene scene = new Scene(pane);
(如果您的 FXML 文件的根元素不代表 aPane那么您需要修改调用该load()方法的行,并替换Pane为适当的类型。)
请注意,调用以getResource(String)正斜杠开头的路径表示资源路径 root /src/main/resources/。
还要注意,奇怪的是,调用不是getBundle(String)以正斜杠开头的,即使您的目标是完全相同的路径。我不得不承认我无法解释为什么这两种方法需要像这样稍微区别对待,但是这段代码可以加载“main_screen.fxml”文件和瑞典语资源包文件“Text_sv_SE.properties”。/src/main/resources/
添加回答
举报