我正在尝试在JavaFX中的TableView中显示ChoiceBox。现在我只是想测试一下我是否可以使用它,所以我在单元工厂内生成假数据,但我甚至无法使其工作。
我的IDE给了我错误
forTableColumn (javafx.collections.ObservableList<T>) in ChoiceBoxTableCell cannot be applied
to (javafx.collections.ObservableList<java.lang.String>)
这是我的代码。
private ListView<RequirementsProperty> guiPropertyList;
private TableColumn<RequirementsProperty, String> guiSpecifierColumn;
guiSpecifierColumn.setCellFactory(
new Callback<TableColumn<RequirementsProperty, String>, TableCell<RequirementsProperty, String>>() {
@Override
public TableCell<RequirementsProperty, String> call(TableColumn<RequirementsProperty, String> param) {
ObservableList<String> testlist = FXCollections.observableArrayList("A", "B", "C");
return ChoiceBoxTableCell.forTableColumn(testlist);
}
});
有谁知道我做错了什么?我现在只想显示包含A,B和C的列表,然后我可以继续显示我自己的数据。
答案 0 :(得分:2)
ChoiceBoxTableCell.forTableColumn(...)
会返回Callback
本身(即返回cellFactory
,而不是单元格。)
你可以做到
ObservableList<String> testlist = FXCollections.observableArrayList("A", "B", "C");
guiSpecifierColumn.setCellFactory(ChoiceBoxTableCell.forTableColumn(testlist));
如果您自己实施工厂,其call(...)
方法需要返回实际的单元格。在这种情况下,您只需直接构造ChoiceBoxTableCell
并将其返回:
guiSpecifierColumn.setCellFactory(
new Callback<TableColumn<RequirementsProperty, String>, TableCell<RequirementsProperty, String>>() {
@Override
public TableCell<RequirementsProperty, String> call(TableColumn<RequirementsProperty, String> param) {
ObservableList<String> testlist = FXCollections.observableArrayList("A", "B", "C");
return new ChoiceBoxTableCell(testlist);
}
});