带有单元工厂和绑定的JavaFX TableView多行工具提示

时间:2018-09-30 02:23:39

标签: javafx tableview tooltip bind factory

我已经使用此代码段为我通过单元格工厂传播的每个tableView单元格创建工具提示:

    private <T> void addFileTooltipToCells(TableColumn<FileTableBean,T> column) {
Callback<TableColumn<FileTableBean, T>, TableCell<FileTableBean,T>> existingCellFactory  = column.getCellFactory();
    column.setCellFactory(c -> {
        TableCell<FileTableBean, T> cell = existingCellFactory.call(c);
        Tooltip tooltip = new Tooltip();
        tooltip.textProperty().bind(cell.itemProperty().asString());
        tooltip.setShowDuration(Duration.seconds(30)); 
        tooltip.setStyle("-fx-font-size: 12");
        cell.setTooltip(tooltip);
        return cell;
    });
}

问题是工具提示有时可能包含很多数据,应该多行显示。从这里我发现,应该简单地将工具提示包装在一起,并在必要时设置
。但是,上面仔细复制并经过错误测试的代码段不喜欢这个想法。我尝试过:

tooltip.textProperty().bind("<html>"+cell.itemProperty().asString()+"</html>");
tooltip.setText("<html>"+cell.itemProperty().asString()+"</html>");

首先在IDE中说:不兼容的字符串不能转换为ObservableValue 第二个生成器遵循以下工具提示:“字符串绑定[无效]”:)

在有人开始使用通常的“错误消息说明一切,请阅读”东西之前,我知道可能有一个简单的答案,但是将这些lambda与绑定概念和单元工厂结合在一起,放弃并尝试从此处获得一些指导。

1 个答案:

答案 0 :(得分:0)

回答那些面临相同问题的人。您可以使用“常规”绑定,但只需通过定义以下内容即可将工具提示首选项应用于cellfactory创建的每个工具提示:

tooltip.setMaxWidth(750);
tooltip.setWrapText(true);

如果数据短于宽度,则设置最佳宽度将创建带有大量额外空白的工具提示。最大宽度的作用就像一种魅力。下一步可能是使宽度参数动态化,以便它根据载物台分辨率计算最大宽度。