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()));
Другие вопросы по тегам