Java/SWT мышь наводит курсор мыши на столбец дерева
У меня есть TreeViewer
где некоторые ячейки оформлены в виде ссылок. Дерево заполнено поставщиком контента и StyledCellLabelProviders
, Мне нужно знать, когда эти конкретные ячейки "ссылки" находятся (так что я переключаю мышь на курсор в виде руки) и щелкаем (так что я действительно что-то делаю с этими "ссылками").
Я не смог найти решение, поэтому любая помощь будет высоко оценена.
Спасибо орен
РЕДАКТИРОВАТЬ: Больше объяснений у меня есть дерево и просмотрщик деревьев. Есть 4 TreeColumns
с TreeViewerColumn
для каждого. Данные заполняются поставщиком контента и двумя типами поставщиков меток (для простого текста и текста в стиле). Мне нужно знать, когда мышь щелкает на элементе в 4-м столбце и когда он наводится на него. Когда это происходит - мне нужно знать ячейку, по которой она нажата, к какому TreeItem она принадлежит, данные в этом элементе и т. Д.
Моя проблема в том, что я не могу понять это. Когда я использую прослушиватель мыши или прослушиватель выбора, они работают только в первом столбце. Я не могу "добраться" до 4-го.
Я не могу изменить порядок столбцов, иначе это не будет иметь смысла.
Любая идея?
1 ответ
Я бы следовал этому подходу:
прикрепить
MouseMoveListener
к деревуопределить, с каким TreeItem наведен указатель мыши
Tree.getItem( Point )
,Для дерева с несколькими столбцами getItem() будет возвращать элемент, только если позиция мыши находится в первом столбце. Либо создайте дерево с
SWT.FULL_SELECTION
флаг стиля, или используйте обходной путь как этот, чтобы определить элемент:TreeItem item = tree.getItem( new Point( event.x, event.y ) ); int x = 0; while( item == null ) { item = tree.getItem( new Point( x, event.y ) ); x += 5; }
Возможно, в цикле while может потребоваться дополнительная секция (например, x
один у вас есть TreeItem, вы можете получить элемент, который он показывает с
TreeItem.getData()
, Имейте в виду, что это деталь реализации TreeViewer, но я не знаю, что есть другой способ получить элемент для данного TreeItem.