0

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

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

这工作正常。但是,当鼠标悬停在 TreeView 中的某个项目上时,会显示相同的工具提示 - 换句话说,在 TreeCell 上。因此,我像这样向 TreeCell 添加了不同的 ToolTip

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 中的 ToolTip。当鼠标悬停在 TreeView 的空白区域时,如何使 TreeView 中的 Tooltip 显示出来,如果鼠标悬停在 TreeCell 上,如何显示 TreeCell 的 Tooltip?

先感谢您!!

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

4

1 回答 1

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()));
于 2018-04-22T17:42:08.570 回答