Java/SWT мышь наводит курсор мыши на столбец дерева

У меня есть TreeViewer где некоторые ячейки оформлены в виде ссылок. Дерево заполнено поставщиком контента и StyledCellLabelProviders, Мне нужно знать, когда эти конкретные ячейки "ссылки" находятся (так что я переключаю мышь на курсор в виде руки) и щелкаем (так что я действительно что-то делаю с этими "ссылками").

Я не смог найти решение, поэтому любая помощь будет высоко оценена.

Спасибо орен

РЕДАКТИРОВАТЬ: Больше объяснений у меня есть дерево и просмотрщик деревьев. Есть 4 TreeColumns с TreeViewerColumn для каждого. Данные заполняются поставщиком контента и двумя типами поставщиков меток (для простого текста и текста в стиле). Мне нужно знать, когда мышь щелкает на элементе в 4-м столбце и когда он наводится на него. Когда это происходит - мне нужно знать ячейку, по которой она нажата, к какому TreeItem она принадлежит, данные в этом элементе и т. Д.

Моя проблема в том, что я не могу понять это. Когда я использую прослушиватель мыши или прослушиватель выбора, они работают только в первом столбце. Я не могу "добраться" до 4-го.

Я не могу изменить порядок столбцов, иначе это не будет иметь смысла.

Любая идея?

1 ответ

Я бы следовал этому подходу:

  1. прикрепить MouseMoveListener к дереву

  2. определить, с каким 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

  3. один у вас есть TreeItem, вы можете получить элемент, который он показывает с TreeItem.getData(), Имейте в виду, что это деталь реализации TreeViewer, но я не знаю, что есть другой способ получить элемент для данного TreeItem.

Другие вопросы по тегам