如何在我的FXML中显示和访问在Java类中创建的组合框?



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

我的问题是:如何从我的 FXML 文件中访问我在 Main.java 中制作的 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 返回填充的 ComboBox 的方法在 FXML 中创建的空组合框上设置 onAction 属性.java但正如预期的那样,这不起作用。

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

我也尝试过用不同的方式制作ComboBox(参见Keyuri Bhanderi的答案:链接),但这也没有奏效。

现有场景的代码:

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(),是询问国籍时使用的最佳区域设置方法吗?我注意到它在询问国籍/国家时比表格有更多的选择,而且也不完全按字母顺序排列。提前谢谢大家。

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

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

它只是充当组合框的容器。然后,我在控制器的初始化方法中执行以下操作:

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

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

相关内容

  • 没有找到相关文章

最新更新