2015-05-17 71 views
0

大家好,如何在FXML文件中使用java变量?

我有关于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> 

如何使在1号线使用fileMenuName变量的上述

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

让我得到

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

当我用Google搜索,我只得到如何在FXML构建UI组件使用JavaFX场景生成器工具,但不是如何说FXML使用Java文件的变量

请帮助我,谢谢提前

回答

3

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

fileMenuName =文件

而且在同一个地方创建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"); 
+1

我已经使用资源包,但为了简单起见,我已经很难它编码为“Datei”。猜猜我将不得不使用“%fileMenuName”,并执行loader.setLocation(MyMain.class.getResource(“/ com/abc/view/Menu.fxml”)),我知道。谢谢:-)我会检查今晚 – HkFreaKuser1673718

相关问题