如何在 FXML 文件中使用 java 变量?

How to use a java variables in FXML file?

大家好,

我了解 Java Swings 和 Applets,但我刚开始使用 JavaFX 和 FXML,因为我正在编写一个示例示例,我被困在这里。

这里我想用其他语言(比如德语)显示菜单名称 "File" 所以我必须从控制器文件中的变量中获取它的值(德语)(java代码)。

MenuCtrl.java
   public class MenuCtrl extends BorderPane{
      public static String fileMenuName = "Datei";
  }


   Menu.fxml
   <Menu mnemonicParsing="false" text="File">
            <items>
                  <MenuItem mnemonicParsing="false" text="Open" />
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
    </Menu>

如何使用上面第一行中的 fileMenuName 变量

<Menu mnemonicParsing="false" text="File">

所以我得到

<Menu mnemonicParsing="false" text="Datei">

当我用谷歌搜索时,我只知道如何使用 JavaFX Scene Builder Tool 在 FXML 中构建 UI 组件,但不知道如何使用 java 文件的变量

请帮助我提前谢谢

你做错了。我假设您的代码在 com.abc.def 包中。现在为包 com.abc.bundles 中的翻译创建文件 MyStrings.properties:

fileMenuName=File

并在同一个地方创建 MyStrings_de.properties:

fileMenuName=Datei

更改您的 fxml:

<Menu mnemonicParsing="false" text="%fileMenuName">

注意 %,它将指示 fxml 加载器这是一个需要在资源中找到的变量。

现在在 java 添加这样的东西(我假设你的 fxml 文件在 com.abc.view):

Locale locale = Locale.getDefault(); // or: Locale locale = new Locale("de");
ResourceBundle bundle = ResourceBundle.getBundle("com.abc.bundles.MyStrings", locale);
FXMLLoader loader = new FXMLLoader();
loader.setResources(bundle);
loader.setLocation(MyMain.class.getResource("/com/abc/view/Menu.fxml"));
/* do something with result */ loader.load();

这样一来,您就不必在代码中对翻译进行硬编码,以后翻译应用程序也会更容易。 MyStrings.properties 是默认文件,如果找不到更好的匹配项,将使用该文件。所以例如如果您没有 MyStrings_pl.properties 并且将使用 pl 语言,那么它将回退到默认值。但是既然你有 MyStrings_de.properties 并且将使用 de 语言,那么它将使用它。

如果您需要使用代码的翻译,只需使用这个:

String name = bundle.getString("fileMenuName");