JavaFX TreeView工具提示与TreeCell工具提示冲突

JavaFX TreeView工具提示与TreeCell工具提示冲突,javafx,treeview,tooltip,treecell,Javafx,Treeview,Tooltip,Treecell,在搜索web时,我找不到任何关于如何解决以下问题的提示:我有一个包含TreeView的JavaFX窗格。在最开始的时候,这个树视图是空的,因此我在fxml文件中添加了一个工具提示,它建议用户使用鼠标右键访问上下文菜单 <TreeView fx:id="requirementsTreeView" prefWidth="1000.0"> <tooltip> <Tooltip text="Right mouse click to crea

在搜索web时,我找不到任何关于如何解决以下问题的提示:我有一个包含TreeView的JavaFX窗格。在最开始的时候,这个树视图是空的,因此我在fxml文件中添加了一个工具提示,它建议用户使用鼠标右键访问上下文菜单

<TreeView fx:id="requirementsTreeView"  prefWidth="1000.0">
     <tooltip>
           <Tooltip text="Right mouse click to create root requirements" />
     </tooltip>
</TreeView>

这个很好用。但是,当鼠标位于树状视图中的某个项目上时,也会显示相同的工具提示,换句话说,鼠标位于树状视图中的某个项目上。因此,我向TreeCell添加了一个不同的工具提示,如下所示

private final class RequirementTreeCell extends TreeCell<UserRequirement> {

        @Override
        protected void updateItem(UserRequirement userRequirement, boolean empty) {
            super.updateItem(userRequirement, empty);
            if (!empty && userRequirement != null) {
                setText(userRequirement.toString());
                setGraphic(getTreeItem().getGraphic());
                setContextMenu(getContextMenu(userRequirement));
                setTooltip(new Tooltip("Right click to add sub-requirements"));
            } else {
                setText(null);
                setGraphic(null);
                setTooltip(null);
                setContextMenu(null);
            }
        }

..
}
private final class RequirementTreeCell扩展了TreeCell{
@凌驾
受保护的void updateItem(UserRequirement UserRequirement,布尔空){
super.updateItem(userRequirement,空);
如果(!empty&&userRequirement!=null){
setText(userRequirement.toString());
setGraphic(getTreeItem().getGraphic());
setContextMenu(getContextMenu(userRequirement));
设置工具提示(新工具提示(“右键单击以添加子需求”);
}否则{
setText(空);
设置图形(空);
设置工具提示(空);
setContextMenu(空);
}
}
..
}
但是,当鼠标位于TreeCell上时,仍然会显示TreeView中的工具提示。当鼠标位于树视图的空白区域上时,如何从正在显示的树视图生成工具提示,如果鼠标位于树单元格上,如何显示树单元格的工具提示

提前谢谢你

编辑:
我继续测试TreeView的功能,并添加了更多的TreeCells。事实证明,这种行为取决于鼠标移动的方向和树细胞的位置。如果鼠标来自Treeview区域并移动到最后一个TreeCell上,我会得到错误的工具提示。如果我将鼠标进一步向上移动,过了最后一个树,我会在一段时间后得到正确的工具提示。如果我在最后一棵树上向下移动,我会再次得到正确的工具提示。听起来像是Javafx中的一个bug?!你觉得怎么样?

我想你只需要在树的工具提示不为空时将其设置为null。在控制器中,您可以执行以下操作:

Tooltip treeTooltip = new Tooltip("Right mouse click to create root requirements");
requirementsTreeView.tooltipProperty().bind(Bindings.createObjectBinding(() -> {
    if (requirementsTreeView.getRoot() == null) return treeTooltip ;
    return null ;
}, requirementsTreeView.rootProperty()));

如果
TreeView
中有内容,则最后填充的
TreeCell
下方没有空白区域。视口的其余部分用空的
TreeCell
s填充。可能为空单元格设置“TreeView工具提示”并从
TreeView
本身删除工具提示会起作用(除非您还想在滚动条上显示工具提示…),这不是预期的行为,因为在TreeView的空白处单击鼠标右键将有助于在TreeView中创建新的根元素,而右键单击元素将有助于向该元素添加子元素。工具提示旨在指导用户了解不同的行为。