Java SWT: убрать выделение элемента дерева - PullRequest
1 голос
/ 08 марта 2011


Мне нужно создать всплывающее меню для дерева в Java SWT.Но меню должно появляться только тогда, когда элементы не выбраны (когда я нажимаю на пустое место TreeViewer).Если я сейчас выберу элемент дерева, я не смогу отменить его снова.TreeViewer находится внутри Composite.
Моей первой идеей было добавить MouseListener, чтобы проверить, не выбран ли ни один из элементов, и вызвать deselectAll(), но event.getSource() возвращает только дерево.
Любые идеи о том, какубрать выделенный элемент, если щелкнуть правой кнопкой мыши пробел?

Ответы [ 2 ]

5 голосов
/ 08 марта 2011

Часто вы можете отменить выбор, щелкнув по элементу, удерживая клавишу Ctrl.

Другой вариант - зарегистрировать прослушиватель для щелчков мыши и использовать местоположение события, чтобы найти элемент дерева.Если это возвращает ноль, вы можете позвонить deselectAll().

Но как вы можете получить TreeViewer из Tree?Просто: сохраните ссылку в свойстве data дерева.Затем вы можете использовать этот код в вашем обработчике событий:

TreeViewer view = (TreeViewer) event.getSource().getData();
2 голосов
/ 11 марта 2011

event.getSource (). GetLocation () просто сообщает вам текущее местоположение виджета Tree в родительской системе координат, поэтому оно всегда одинаково.Вам нужно получить координаты щелчка от MouseEvent вместо этого.У него есть x и y, которые должны быть координатами клика.

Подводя итог:

Tree tree = (Tree) event.getSource();
if (tree.getItem(new Point(event.x, event.y)) != null)
    // an item was clicked.
else
    // no item was clicked.
...