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

时间:2017-06-28 03:42:35

标签: image javafx tableview tablecell

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

我不想在单元格中显示TrueFalse,而是在True显示图片,如果是False则将单元格留空。

这就是我填充TableView

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

我知道我需要使用自定义TableCellCellValueFactory,但我很难绕过文档(我以前没有使用过Java工厂)。

关于several answers,我的研究导致similar situations,但它们似乎都只是在单元格中显示图像。我一直无法找到检查布尔值的方法来确定是否应该显示图像。

如何查看对象的starredProperty并显示图片True

感谢大家过去为我提供的所有帮助!

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

当项目为imageFalse = null时,您当然可以使用false作为空单元格。

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将项目分配给单元格。这些项目可能会多次更改。填充后,细胞也可能变空。发生这种情况时,会调用updateItem的{​​{1}}方法。