【问题标题】:JavaFX TableView multiline tooltip with cell factory and bindings带有单元工厂和绑定的 JavaFX TableView 多行工具提示
【发布时间】:2018-09-30 02:23:38
【问题描述】:

我使用此代码 sn-p 为我通过单元工厂传播的每个 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;
    });
}

问题是工具提示有时可能包含大量数据并且应该是多行的。从这里我发现应该简单地用
包装工具提示,并可能在必要时设置。但是,上面在某处仔细复制并经过试错测试的代码 sn-p 不喜欢这个想法。我试过了:

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

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

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

【问题讨论】:

  • 看看 ControlsFx PopOver 是不是更适合在这里使用的节点。
  • 请提供一个minimal reproducible example 来说明问题。
  • wrapText + prefWidth 怎么样? html 部分应该如何解决任何问题?如果您真的想显示包含这些子字符串的字符串,请使用Bindings.concat("&lt;html&gt;", cell.itemProperty(), "&lt;/html&gt;") 创建ObservableValue&lt;String&gt;,而不是String,因为bind 不允许作为参数。
  • 感谢@fabian,我在阅读工具提示文档时错过了 wrapText 部分。 html 的想法来自以下几个主题: [link|(stackoverflow.com/questions/868651/multi-line-tooltips-in-java) 此外,我对 StackOverflow 最近的水平有点失望。你需要非常小心,不要问一个“愚蠢的问题”,否则你会被遗忘或垃圾邮件同样的“请提供最少的blablabla”。上面的代码 sn-p 足以让 Fabian 给我很好的答案。当问题与少数人真正相关时,无需发送数百行代码
  • 请注意,您链接到的问题与工具提示等支持 HTML 内容的 Swing 有关。 JavaFX 的控件(例如TooltipLabelTextArea 等)不支持 HTML(至少,它们的默认外观不支持)。这就是 HTML 标记不起作用的原因。

标签: javafx tableview tooltip bind factory


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2020-06-29
    • 2016-04-22
    • 2012-05-18
    • 2016-04-03
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多