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

时间:2018-04-22 17:14:14

标签: javafx treeview tooltip treecell

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

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

这很好用。但是,当鼠标悬停在TreeView中的某个项目上时,显示了相同的工具提示 - 换句话说就是在TreeCell上。因此,我向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);
            }
        }

..
}

但是当鼠标悬停在TreeCell上时,仍会显示TreeView中的工具提示。当鼠标悬停在TreeView的空白区域时,如何从TreeView中显示工具提示,如果鼠标位于TreeCell上方,则显示TreeCell的工具提示?

提前谢谢!!

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

1 个答案:

答案 0 :(得分:0)

我猜你只需要将树的工具提示设置为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()));