在TableColumn(JavaFX)上设置工具提示而不产生副作用
有一种方法可以这样设置工具提示在TableColumn(JavaFX)上设置工具提示而不产生副作用,java,javafx,Java,Javafx,有一种方法可以这样设置工具提示 if (tooltipText != null) { Label lb = new Label(column.getText()); lb.setTooltip(new Tooltip(tooltipText)); column.setText(null); column.setGraphic(lb); } 不幸的是,这样会存在丑陋的副作用 我们将null设置为列的文本,但menuItems调用column.getText()。
if (tooltipText != null) {
Label lb = new Label(column.getText());
lb.setTooltip(new Tooltip(tooltipText));
column.setText(null);
column.setGraphic(lb);
}
不幸的是,这样会存在丑陋的副作用
我们将null设置为列的文本,但menuItems调用column.getText()。如果我们不这样做,标题中会出现双重名称。如何解决?假设通过css
这个答案并不能消除副作用
注意:以下代码依赖于
表视图的内部结构。这些可能会发生更改,因为它们位于com.sun
包中
CSS查找可用于在TableView
上的第一次布局传递之后访问TableColumnHeader
节点。这些可用于检索用于显示表格列
的文本
属性的标签
@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();
}