TableCell 不显示带有自定义 CellFactory 的 item.toString() 值

TableCell doesn't show item.toString() value with custom CellFactory

我在我的 TableColumn 上安装了一个自定义的 CellValueFactory 和 CellFactory:我正在编写地址簿,Salutation 是一个枚举值 "Mr" 和 "Mrs"。

salutation.setCellValueFactory(c->new ReadOnlyObjectWrapper<>(c.getValue().getSalutation()));
salutation.setCellFactory((tableColumn)->new TableCell());

不幸的是,我的 CellFactory 设置的单元格没有显示任何内容。 (注意:其实我想用自定义的TableCell,我只用TableCell做测试)。 在每个单元格上显示 item.toString() 字符串的最佳方式是什么?

谢谢:)

谢谢

Note: actually I want to use a custom TableCell, I only used TableCell for testing

这正是问题所在。 TableCell 与默认细胞工厂生产的细胞类型不同,它只是更新细胞的 empty 属性。删除此初始化或将工厂的分配替换为

salutation.setCellFactory(TableColumn.DEFAULT_CELL_FACTORY);

将显示在单元格项上调用 toString 的结果,如下 cellFactory:

salutation.setCellFactory((tableColumn)->new TableCell() {

    @Override
    protected void updateItem(Object item, boolean empty) {
        super.updateItem(item, empty);
        setText(item == null ? "" : item.toString());
    }

});

注意:我建议不要使用原始类型,但由于缺乏对所涉及类型的了解,我决定在上面的代码片段中继续使用原始类型。