JavaFX-裁剪TableColumn内容时的通知?

JavaFX-裁剪TableColumn内容时的通知?,java,javafx,tableview,Java,Javafx,Tableview,如果TableColumn的内容被裁剪,JavaFX是否提供任何激发的侦听器 我有一个可调整大小的TableColumn,我想添加一个仅在列的内容不完全可见时显示的工具提示。但现在我无法确定文本是完全显示还是裁剪 在我的表列中,我使用了标签并设置lblText.setWrapText(true) +------------------+ | | +--------------------------+ |这是一个非常|的解决方案,此解决方案需要私有AP

如果TableColumn的内容被裁剪,JavaFX是否提供任何激发的侦听器

我有一个可调整大小的TableColumn,我想添加一个仅在列的内容不完全可见时显示的工具提示。但现在我无法确定文本是完全显示还是裁剪

在我的表列中,我使用了
标签
并设置
lblText.setWrapText(true)

+------------------+
|                  |      +--------------------------+

|这是一个非常|的解决方案,此解决方案需要私有API(未建议)

它使用标签的实际视图
com.sun.javafx.scene.control.skin.LabeledText
,来获取任何更改的通知

显示表后,我们可以使用lookupAll查找所有这些节点,因为它们使用
text
作为CSS选择器。然后,我们添加一个侦听器,用于侦听文本中的任何更改(即表中显示的文本)

在该侦听器中,您可以添加显示工具提示所需的代码

@Override
public void start(Stage primaryStage) {
    TableView<Label> table = new TableView<>();

    Scene scene = new Scene(table);        
    primaryStage.setScene(scene);
    primaryStage.show();

    table.lookupAll(".text").stream()
            .filter(t->t instanceof LabeledText)
            .map(t->(LabeledText)t)
            .forEach(t->{
                t.textProperty().addListener((obs, s0, s1) -> {
                    System.out.println(((Label)t.getParent()).getText()+" -> "+s1);
                });
            });
}
@覆盖
公共无效开始(阶段primaryStage){
TableView table=新TableView();
场景=新场景(表);
初级阶段。场景(场景);
primaryStage.show();
表.lookupAll(“.text”).stream()
.filter(标签文本的t->t实例)
.map(t->(LabeledText)t)
.forEach(t->{
t、 textProperty().addListener((obs、s0、s1)->{
System.out.println(((Label)t.getParent()).getText()+“->”+s1);
});
});
}

我不确定您是否真的想要一个侦听器/事件,因为它只会在创建长文本时触发。我敢打赌,您不希望表格中的所有长文本都弹出工具提示,但可能是您正在悬停的文本。然后,事件将悬停在表单元格上,您希望将“长文本”作为属性进行检查。这里我没有明确的答案,但我假设文本组件的宽度大于列的宽度。所以你不能简单地比较这两个吗?使用工具提示,将文本添加到工具提示中。我的列中的文本换行。我无法比较文本长度和列宽。如果JavaFX可以直接告诉我,它在剪切文本(和添加点)时会更有用。
@Override
public void start(Stage primaryStage) {
    TableView<Label> table = new TableView<>();

    Scene scene = new Scene(table);        
    primaryStage.setScene(scene);
    primaryStage.show();

    table.lookupAll(".text").stream()
            .filter(t->t instanceof LabeledText)
            .map(t->(LabeledText)t)
            .forEach(t->{
                t.textProperty().addListener((obs, s0, s1) -> {
                    System.out.println(((Label)t.getParent()).getText()+" -> "+s1);
                });
            });
}