首页 > 解决方案 > TableCell 不使用自定义 CellFactory 显示 item.toString() 值

问题描述

我在我的 TableColumn 上安装了自定义 CellValueFactory 和 CellFactory:我正在编写地址簿,Salutation 是一个具有值“先生”和“夫人”的枚举。

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

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

谢谢 :)

谢谢

标签: javajavafxtableviewtablecolumn

解决方案


注意:其实我是想用一个自定义的TableCell,我只用了TableCell进行测试

这正是问题所在。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());
    }

});

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


推荐阅读