TableView - 如果单元格布尔值为真则显示图像

TableView - Display Image If Cell Boolean Value Is True

我的 TableView 填充了对象列表中的数据。第一列是布尔值。

我不想在单元格中显示 TrueFalse,我想在 True 时显示图像,而在 False 时将单元格留空。

这就是我填充 TableView:

的方式
colStarred.setCellValueFactory(new PropertyValueFactory<>("starred"));
colDate.setCellValueFactory(new PropertyValueFactory<>("date"));
colTime.setCellValueFactory(new PropertyValueFactory<>("time"));

我知道我需要使用自定义 TableCellCellValueFactory 但我很难理解文档(我没有使用 Java过去的工厂)。

我的研究导致 several answers regarding similar situations,但它们似乎都只处理在单元格中显示图像的问题。我一直无法找到检查布尔值以确定是否应显示图像的解决方案。

如何检查我的对象的 starredProperty 并显示图像(如果是 True

感谢大家过去对我的帮助!

我假设该列是 TableColumn<MyItemClass, Boolean>

您只需创建 TableCell 即可根据传递给 updateItem 方法的项目调整外观。

在这种情况下,我们将使用 ImageView 作为单元格的 graphic

根据单元格的项目显示以下图像:

  • 如果单元格为空或包含 null
  • ,则无图像
  • imageTrue 如果项目是 true
  • imageFalse否则

当项目为 false.

时,您当然可以使用 imageFalse = null 作为空单元格
final Image imageTrue = ...
final Image imageFalse = ...

// set cellfactory
colStarred.setCellFactory(col -> new TableCell<MyItemClass, Boolean>() {

    private final ImageView imageView = new ImageView();

    {
        // initialize ImageView + set as graphic
        imageView.setFitWidth(20);
        imageView.setFitHeight(20);
        setGraphic(imageView);
    }

    @Override
    protected void updateItem(Boolean item, boolean empty) {
        if (empty || item == null) {
            // no image for empty cells
            imageView.setImage(null);
        } else {
            // set image for non-empty cell
            imageView.setImage(item ? imageTrue : imageFalse);
        }
    }

});

程序显示的时候是这样的:

  • TableView 使用 cellfactories 创建显示项目所需的单元格。
  • TableView 将项目分配给单元格。这些项目可能会更改多次。单元格也可能在填充后变空。发生这种情况时,将调用 TableCellupdateItem 方法。