在JavaFX中的所有表格单元格上设置工具提示

时间:2016-11-18 12:27:33

标签: javafx javafx-8

我的应用包含TableView。根据每行中特定单元格的值,通过为此列设置setCellFactory的自定义单元格工厂来更改行样式。这很好。

现在我想使用setTooltip()添加一个没什么大不了的工具提示。但是,此工具提示应设置为表中的每个单元格,而不仅仅是为其指定的列。我该如何实现呢?

1 个答案:

答案 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);