【发布时间】:2016-09-28 13:17:07
【问题描述】:
我有课:
public class Element {
private final IntegerProperty id;
private final StringProperty name;
...constructors...
public Integer getId() {
return id.get();
}
public void setId(Integer id) {
this.id.set(id);
}
public IntegerProperty idProperty() {
return id;
}
public String getName() {
return name.get();
}
public void setName(String name) {
this.name.set(name);
}
public StringProperty nameProperty() {
return name;
}
@Override
public String toString() {
return name.get();
}
我尝试在 ComboBox 中显示这些元素的列表。在我的控制器中,我有:
@FXML
private ComboBox<Element> combo;
然后我在函数中有以下代码来填充其他 GUI 元素:
ObservableList<Element> elements = FXCollections.observableArrayList(ElRep.getElements());
combo = new ComboBox<Element>(elements);
combo.getSelectionModel().selectFirst();
我也试过了:
combo.setItems(elements);
似乎没有任何效果。我得到空的组合框。
【问题讨论】:
-
这里有几个这样的问题;我现在无法通过快速搜索找到它们。但是不要初始化
@FXML-annotated 字段。 IE。删除行combo = new ComboBox<>(...)。您正在创建一个新的组合框(即不是您在 FXML 文件中定义的组合框)并在其上设置项目,而不是您在 FXML 中创建的组合框。 -
然后我的组合变量设置为 null,即使我的 ComboBox 的 fx:id 已设置,我也会得到 NullPointerException。
-
那你做错了。但是通过创建一个新的组合框来“修复”它肯定是行不通的。 Edit 你的问题显示minimal reproducible example,带有最小的控制器和 FXML 文件。