我的应用包含TableView
。根据每行中特定单元格的值,通过为此列设置setCellFactory
的自定义单元格工厂来更改行样式。这很好。
现在我想使用setTooltip()
添加一个没什么大不了的工具提示。但是,此工具提示应设置为表中的每个单元格,而不仅仅是为其指定的列。我该如何实现呢?
答案 0 :(得分:11)
一旦设置了表(即创建并添加了列,并且在所有列上设置了单元工厂),您就可以“装饰”"列'细胞工厂:
private <T> void addTooltipToColumnCells(TableColumn<TableDataType,T> column) {
Callback<TableColumn<TableDataType, T>, TableCell<TableDataType,T>> existingCellFactory
= column.getCellFactory();
column.setCellFactory(c -> {
TableCell<TableDataType, T> cell = existingCellFactory.call(c);
Tooltip tooltip = new Tooltip();
// can use arbitrary binding here to make text depend on cell
// in any way you need:
tooltip.textProperty().bind(cell.itemProperty().asString());
cell.setTooltip(tooltip);
return cell ;
});
}
此处只需将TableDataType
替换为您用于声明TableView
的任何类型,即此假设您已
TableView<TableDataType> table ;
现在,在之后创建了列,将它们添加到表中,并设置了所有的单元工厂,只需要:
for (TableColumn<TableDataType, ?> column : table.getColumns()) {
addTooltipToColumnCells(column);
}
或者如果您更喜欢&#34; Java 8&#34;方式:
table.getColumns().forEach(this::addTooltipToColumnCells);