0

我有TreeViewer一些单元格的样式看起来像链接。树中充满了内容提供者和StyledCellLabelProviders. 我需要知道那些特定的“链接”单元格何时悬停(所以我将鼠标更改为手形光标)并单击(所以我实际上对这些“链接”做了一些事情)。

我未能找到解决方案,因此我们将不胜感激任何帮助。

谢谢,奥伦

编辑:更多解释我有一棵树和一个treeviewer。有 4TreeColumnsTreeViewerColumn,每个都有一个。数据填充有内容提供者和 2 种类型的标签提供者(用于简单文本和样式文本)。我需要知道鼠标何时单击第 4 列中的某个项目以及何时将鼠标悬停在该项目上。发生这种情况时 - 我需要知道它被单击的单元格、它属于哪个 TreeItem、该项目中的数据等。

我的问题是我无法弄清楚。当我使用鼠标侦听器或选择侦听器时,它们仅适用于第一列。我无法“到达”第四个。

我无法更改列顺序,否则将没有意义。

任何想法?

4

1 回答 1

1

我会遵循这种方法:

  1. 将 a 附加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;
    }
    

    x < tree.getBounds().x如果找不到项目,可能需要添加进一步的条件(例如)以防止无限循环。

  3. 一旦你有了TreeItem,你就可以获得它所显示的元素TreeItem::getData。请注意,这是TreeViewer- 但我不知道还有另一种方法可以获取给定的元素TreeItem

于 2014-10-06T15:29:17.197 回答