JavaFX TreeView подсказка конфликтует с подсказкой TreeCell
При поиске в Интернете я не смог найти подсказки, как решить следующую проблему: у меня есть панель JavaFX, содержащая TreeView. В самом начале этот 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 и добавил больше TreeCells. Оказывается, поведение зависит от направления движения мыши и от положения TreeCells. Если мышь выходит из области Treeview и перемещается по последней TreeCell, я получаю неверную подсказку. Если я переместлю мышь еще выше, через второй последний TreeCell через некоторое время я получу правильную подсказку. Если я затем вернусь к последнему TreeCell, я снова получу нужную подсказку. Звучит как ошибка в Javafx?! Как вы думаете?
1 ответ
Я предполагаю, что вам просто нужно установить всплывающую подсказку дерева на ноль, когда она не пустая. В контроллере вы можете сделать
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()));