我对 JavaFX 相当陌生,我正在尝试弄清楚 FXML 文件和 Controller 之间的链接到底是如何工作的。我的问题是我正在使用 ControlsFX 中的 CheckComboBox创建对象时,需要获取组合框中可能选项的字符串集。
private void initializeComboBoxes() {
final ObservableList<String> projects = FXCollections.observableArrayList();
for (String x : db.getProjectBag()) {
projects.add(x);
}
comboBoxProject = new CheckComboBox<String>(projects);
...
问题是,当我将 FXML 链接的 CheckedComboBox 字段设置为该新对象时(就我而言,每次可能的选项发生变化时都需要执行此操作,例如基于数据库中的值) ,它不会显示在用户界面上。
也许我错过了如何将用户界面控件动态链接到其底层对象,但我们将非常感谢您的帮助。
最诚挚的问候,
威斯
最佳答案
切勿在 Java 中为 FXMLLoader
已创建的对象( Controller 中具有标记为 @FXML
的引用的任何对象)创建新对象。
默认情况下,组合框将使用一个空的项目列表创建,只需获取该列表并设置您想要的值。
例如,在 Controller 代码中使用以下代码,根据需要调用 initializeComboBox()
方法:
@FXML
CheckComboBox comboBoxProject;
private void initializeComboBox() {
final List<String> projects = new ArrayList();
for (String x : db.getProjectBag()) {
projects.add(x);
}
comboBoxProject.getItems().setAll(projects);
}
关于JavaFX:将新对象链接到控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59256420/