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

时间:2015-05-17 12:19:33

标签: xml javafx fxml

大家好,

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

这里我要显示菜单名称"文件"用其他语言(比如德语),所以我必须从控制器文件(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>

如何在

上面的第1行使用fileMenuName变量
<Menu mnemonicParsing="false" text="File">

所以我得到了

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

当我用谷歌搜索时,我只是如何使用JavaFX Scene Builder工具在FXML中构建UI组件,而不是如何说FXML使用java文件的变量

请提前帮助我

1 个答案:

答案 0 :(得分:3)

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

  

fileMenuName =文件

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

  

fileMenuName = Datei

更改你的fxml:

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

注意%将指示fxml loader这是需要在资源中找到的变量。

现在在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");