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

时间:2019-04-18 21:47:45

标签: java combobox fxml countries

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

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

Main.java中的填充组合框:

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);  

我尝试用一​​种创建并从Main.java返回填充的ComboBox的方法在FXML制成的空ComboBox上设置onAction属性,但是按预期无法正常工作。

我确实通过将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方法吗?我注意到,在询问国籍/国家/地区时,它比表格所提供的选择要多得多,而且它也不是完全按字母顺序排列。谢谢大家。

1 个答案:

答案 0 :(得分:0)

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

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

它只是在这里充当ComboBox的容器。然后,我在控制器的Initialize方法中执行了以下操作:

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

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