如何在FXML中显示和访问Java类中的ComboBox?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在FXML中显示和访问Java类中的ComboBox?相关的知识,希望对你有一定的参考价值。
我正在使用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方法吗?我注意到它在申请国籍/国家时有比表格更多的选项,而且还没有完全按字母顺序排列。谢谢大家。
在浏览了一些有关类似问题的其他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中。
以上是关于如何在FXML中显示和访问Java类中的ComboBox?的主要内容,如果未能解决你的问题,请参考以下文章
java文件中的setText如何更新fxml文件中的文本字段?