2016-10-07 15 views
0

私はいくつかの静的な選択肢でFXMLで定義されたChoiceboxを持っています。 FXMLの各値の翻訳を何らかの形で定義することは可能ですか?これが動作しない悲しいことFXML choicebox with translations

<ChoiceBox fx:id="category"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
      <String fx:value="%category.message" /> 
      <String fx:value="%category.request" /> 
      <String fx:value="%category.error" /> 
     </FXCollections> 
    </items> 
</ChoiceBox> 

<ChoiceBox fx:id="category"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
      <String fx:value="Message" /> 
      <String fx:value="Request" /> 
      <String fx:value="Error" /> 
     </FXCollections> 
    </items> 
</ChoiceBox> 

今、私が直接このような翻訳を使用したい:

私の現在のコードは次のようになります。

類似するものはありますか?どうやって?

代わりに、コントローラ#initメソッドでそのリストを作成することもできますが、そうしない方がよいでしょう。

+1

)。おそらくコントローラでこれを行う必要があります。 –

+0

ええ、まあ、私は回避策があるかもしれません... –

答えて

3

属性はリテラル文字列のみを解釈するため、リソースや式を解決できません。 IMHOこれはデザイン上の欠陥です。

私はこのやや迂回的な回避策を見つけました。あなたはあなたが必要とするリソースを持つマップを作成し、ちょうどマップの要素にアクセスするために<fx:reference>を使用することができます。

ResourceTest.fxml:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.layout.BorderPane?> 
<?import javafx.scene.control.ChoiceBox?> 
<?import javafx.collections.FXCollections?> 

<?import java.lang.String ?> 
<?import java.util.HashMap ?> 

<BorderPane xmlns:fx="http://javafx.com/fxml/1"> 

    <fx:define> 
     <HashMap fx:id="rscBndl" 
      message="%category.message" 
      request="%category.request" 
      error="%category.error" /> 
    </fx:define> 
    <top> 
     <ChoiceBox > 
      <items> 
       <FXCollections fx:factory="observableArrayList"> 
        <fx:reference source="rscBndl.message" /> 
        <fx:reference source="rscBndl.request" /> 
        <fx:reference source="rscBndl.error" /> 
       </FXCollections> 
      </items> 
     </ChoiceBox> 
    </top> 
</BorderPane> 
ここ

<fx:define> 
    <HashMap fx:id="rscBndl" 
     message="%category.message" 
     request="%category.request" 
     error="%category.error" /> 
</fx:define> 

<ChoiceBox > 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
      <fx:reference source="rscBndl.message" /> 
      <fx:reference source="rscBndl.request" /> 
      <fx:reference source="rscBndl.error" /> 
     </FXCollections> 
    </items> 
</ChoiceBox> 

をSSCCEです

resources.properties:

category.message = Message 
category.request = Request 
category.error = Error 
[値](悲しいこと:私はこれは私が今それを見つけることができないものの、最近尋ねた、と結論は資源解像度がFX `で動作しないことがあったと思う

ResourceTest.java

import java.io.IOException; 
import java.util.ResourceBundle; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class ResourceTest extends Application { 

    @Override 
    public void start(Stage primaryStage) throws IOException { 
     ResourceBundle resources = ResourceBundle.getBundle("resources"); 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("ResourceTest.fxml"), resources); 
     Scene scene = new Scene(loader.load(), 600, 600); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

enter image description here

+0

Thx。その解決策をどうやって見つけましたか?試してみて、エラーが出たり、このトピックに関する良い本やドキュメントがありますか? –

+1

私は[FXMLドキュメント](https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html)を使用して残りの部分をまとめました –

関連する問題