在搜索网页时,我找不到任何提示如何解决以下问题:我有一个包含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中的一个错误?!你觉得怎么样?
答案 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()));