【问题标题】:Set tooltip on TableColumn(JavaFX) without side effect在无副作用的 TableColumn(JavaFX) 上设置工具提示
【发布时间】:2017-01-29 10:21:11
【问题描述】:

有一种方法可以像这样设置工具提示

if (tooltipText != null) {
    Label lb = new Label(column.getText());
    lb.setTooltip(new Tooltip(tooltipText));
    column.setText(null);
    column.setGraphic(lb);
}

不幸的是会存在丑陋的副作用。

我们将 null 设置为列的文本,但 menuItems 调用 column.getText()。如果我们不这样做,header中就会出现双重名称。如何解决?假设通过 css..

这个答案不会消除副作用 How to add a tooltip to a TableView header cell in JavaFX 8

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    注意:以下代码依赖于TableView 皮肤的内部结构。这些可能会发生变化,因为它们位于 com.sun 包中。

    CSS 查找可用于在TableView 的第一次布局传递后访问TableColumnHeader 节点。这些可用于检索用于显示TableColumntext 属性的Label

    @Override
    public void start(Stage primaryStage) {
        TableView tv = createTableView();
    
        Scene scene = new Scene(tv);
        
        // generate layout pass
        tv.applyCss();
        tv.layout();
    
        // assign tooltips to headers
        tv.lookupAll(".column-header").stream().forEach(n -> {
            TableColumnHeader header = (TableColumnHeader) n;
            Tooltip tooltip = new Tooltip("Tooltip: " + header.getTableColumn().getText());
            ((Control) header.lookup(".label")).setTooltip(tooltip);
        });
    
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-29
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      相关资源
      最近更新 更多