2015-05-17 107 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

相關問題