我的TableView
填充了对象列表中的数据。第一列是布尔值。
我不想在单元格中显示True
或False
,而是在True
显示图片,如果是False
则将单元格留空。
这就是我填充TableView
:
colStarred.setCellValueFactory(new PropertyValueFactory<>("starred"));
colDate.setCellValueFactory(new PropertyValueFactory<>("date"));
colTime.setCellValueFactory(new PropertyValueFactory<>("time"));
我知道我需要使用自定义TableCell
和CellValueFactory
,但我很难绕过文档(我以前没有使用过Java工厂)。
关于several answers,我的研究导致similar situations,但它们似乎都只是在单元格中显示图像。我一直无法找到检查布尔值的方法来确定是否应该显示图像。
如何查看对象的starredProperty
并显示图片True
?
感谢大家过去为我提供的所有帮助!
答案 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}}方法。