TableView - 如果单元格布尔值为真则显示图像
TableView - Display Image If Cell Boolean Value Is True
我的 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 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
将项目分配给单元格。这些项目可能会更改多次。单元格也可能在填充后变空。发生这种情况时,将调用 TableCell
的 updateItem
方法。
我的 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 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
将项目分配给单元格。这些项目可能会更改多次。单元格也可能在填充后变空。发生这种情况时,将调用TableCell
的updateItem
方法。