Java / SWT鼠标悬停/单击树查看器的列

时间:2014-10-06 13:31:22

标签: java hover swt jface treeviewer

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

我找不到解决方案,所以任何帮助都将受到高度赞赏。

谢谢, 奥伦

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

我的问题是我无法解决这个问题。当我使用鼠标监听器或选择监听器时,它们只能在第一列上工作。我不能“达到”第四个。

我无法更改列顺序,也没有意义。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我会遵循这种方法:

  1. MouseMoveListener附加到树

  2. 使用Tree.getItem( Point )确定鼠标指针所在的TreeItem。

    对于多列树,如果鼠标位置在第一列内,则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< tree.getBounds()。x)可能是必要的,以防止无法找到任何项目时无限循环。

  3. 你有一个TreeItem,你可以获得它用TreeItem.getData()显示的元素。请注意,这是TreeViewer的实现细节 - 但我不知道有另一种方法可以获取给定TreeItem的元素。