目前,当我想将翻译包设置为特定的窗格时,我必须在加载之前完成。让我们考虑一个简单的例子:
Bundle_en.properties
key=Sample Text
MainApplication.java
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("sample.fxml"));
fxmlLoader.setResources(ResourceBundle.getBundle("bundles.Bundle",new Locale("en","EN")));
Parent root = fxmlLoader.load();
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
现在我可以使用捆绑包内部的名称:
sample.fxml
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<Label text="%key"/>
</GridPane>
问题:
是否可以将设置资源的过程移动到控制器内的initialize()方法?
Controller.java
public class Controller {
@FXML
private void initialize() {
// setting resources here
}
}
答案 0 :(得分:0)
据我所知,你的应用程序有两种方式。来自fxml docs:
可以在读取文件时本地化FXML文件的内容。对于 例如,如果使用en_US语言环境加载FXML文件,那么它 根据以下内容为标签生成字符串“First Name” 资源字符串:
<Label text="%firstName"/>
如果区域设置更改到fr_FR 和,则会重新加载FXML文件, 标签显示“Prénom。”
另一方面,您可以更改java代码中的值:
Java代码也是如此,因为您必须手动更新 通过获取a,用户界面的每个元素的内容 引用它并调用适当的setter(例如 的setText())。
ResourceBundle也是Initializable接口中initialize方法的输入参数,在加载fxml文件时使用。
所以我认为不可能在initialize方法中设置资源。您可能稍后可以从Controller加载资源并从Java代码中使用它们。不确定它是大型应用程序的最佳解决方案。
希望这有帮助。
答案 1 :(得分:0)