如何在FXML中显示和访问Java类中的ComboBox?

问题描述 投票:1回答:1

我正在使用Java和FXML为学校项目制作应用程序。我不允许使用场景构建器。在应用程序中,用户将其信息输入到表单中。然后,此信息用于创建三个可能类之一的实例。表单的一个字段是“国籍”,因此我想使用包含国家/地区的下拉列表来进行选择。我在我的Main.java类中创建了一个ComboBox(最初是在我的控制器中),在MBec回答这个问题的帮助下:link

我的问题是:如何从我的FXML文件中访问我在Main.java中创建的ComboBox并将其显示在我现有的场景中?我目前有一个占位符ComboBox,但它没有填充。

Main.java中填充的ComboBox:

ObservableList<String> all_countries = Stream.of(Locale.getISOCountries())
                .map(locales -> new Locale("", locales))
                .map(Locale::getDisplayCountry)
                .collect(Collectors.toCollection(FXCollections::observableArrayList));

final ComboBox<String> country_list = new ComboBox<>(all_countries);  

我尝试在FXML中创建一个空的ComboBox上设置一个onAction属性,该方法创建并从Main.java返回填充的ComboBox,但正如预期的那样,这不起作用。

我确实设法通过将ComboBox设置为新场景的根来验证它是否正常工作。这只是为了确保自己ComboBox本身不是问题的原因。用于测试的新场景:

我也试过尝试以不同的方式制作ComboBox(参见Keyuri Bhanderi的回答:link),但这也没有用。

我现有场景的代码:

Parent root = FXMLLoader.load(getClass().getResource("view/sample.fxml"));
primaryStage.setTitle("form");
primaryStage.setScene(new Scene(root, 600, 600));

我期望能够从sample.fxml中访问ComboBox'country_list'并将其显示在我现有的场景中,因此这是我的目标。我是Java和FXML的新手,所以答案可能很明显,但我已经坚持了一两天。对任何糟糕的格式表示歉意;这是我第一次使用SO。如果有人有空闲时间,我还有一个额外的问题。 getISOCountries()是在询问国籍时使用的最佳Locale方法吗?我注意到它在申请国籍/国家时有比表格更多的选项,而且还没有完全按字母顺序排列。谢谢大家。

java combobox fxml countries
1个回答
0
投票

在浏览了一些有关类似问题的其他SO问题后,我设法弄明白了。我在我的FXML中制作了一个HBox,如下所示:

<HBox
    id="country_container"
    fx:id="country_container"
    GridPane.columnIndex="1"
    GridPane.rowIndex="12"
    />

它只是作为ComboBox的容器。然后我在Controller的Initialize方法中执行了以下操作:

countries_combo();
combo_box.getChildren().add(country_list);

第一行调用创建并返回ComboBox的方法,第二行将其作为子项添加到手动创建的HBox中。

© www.soinside.com 2019 - 2024. All rights reserved.