【问题标题】:How can I populate a javafx ChoiceBox with strings from a resourcebundle in an fxml document如何使用 fxml 文档中资源包中的字符串填充 javafx ChoiceBox
【发布时间】:2018-08-20 12:23:49
【问题描述】:

我正在创建一个 JavaFX 8 应用程序和一个 ComboBox(我实际上使用了来自 JFoenix JavaFX Material Design Library 的等效 JavaFX 控件),我想用字符串值填充它的项目,但我希望这些值来自资源包我已经创建了。当我在场景构建器中预览 FXML 文档时,组合框的所需更改不会发生在场景构建器预览器中。下面是 FXML 代码。

<JFXComboBox fx:id="languageBox" prefHeight="25.0" prefWidth="321.0" promptText="%select-language-text">
        <items>
           <FXCollections fx:factory="observableArrayList">
              <String fx:value="%english-text" />
              <String fx:value="%french-text" />
              <String fx:value="%spanish-text" />
              <String fx:value="%german-text" />
           </FXCollections>
        </items>
     </JFXComboBox>

我指出这些值应该来自资源包,但它们不是从资源包中加载的。下面是预览图。 请有人帮我解决这个问题,我们将不胜感激。

【问题讨论】:

  • 您是否给FXMLLoader 提供了适当的ResourceBundle?
  • 是的,我做到了。正如您在其他节点中看到的那样,文本是德语
  • 根据stackoverflow.com/questions/12153446/…,似乎无法通过fx:value 使用本地化。而且他们似乎还没有开始实施它:JDK-8090733

标签: java javafx


【解决方案1】:

正如我在my comment 中提到的,似乎不支持将% 语法与fx:value 一起使用。对此有一个 feature request,但它尚未实施并且可能永远不会实施(问题自 2015 年 6 月以来未更新)。

但是,您可以在控制器类中做您想做的事情。

public class Controller {

    @FXML private JFXComboBox<String> languageBox;
    @FXML private ResourceBundle resources;

    @FXML
    private void initialize() {
        languageBox.getItems().addAll(
            resources.getString("english-text"),
            resources.getString("french-text"),
            resources.getString("spanish-text"),
            resources.getString("german-text")
        );
    }

}

resources 字段将被注入ResourceBundle 给FXMLLoader。或者你可以实现Initializable 接口。

public class Controller implements Initializable {

    @FXML private JFXComboBox<String> languageBox;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        languageBox.getItems().addAll(
            resources.getString("english-text"),
            resources.getString("french-text"),
            resources.getString("spanish-text"),
            resources.getString("german-text")
        );
    }

}

【讨论】:

  • 哇。非常感谢您的帮助
猜你喜欢
  • 2020-02-20
  • 2013-11-05
  • 2016-02-16
  • 1970-01-01
  • 2015-03-04
  • 2014-12-20
相关资源
最近更新 更多