如何在JavaFX中创建表格单元工厂以显示ChoiceBox?

时间:2014-12-27 04:47:14

标签: javafx tableview

我正在尝试在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的列表,然后我可以继续显示我自己的数据。

1 个答案:

答案 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);
         }
    });