我有一个TreeViewer
,其中一些单元格的样式看起来像链接。树中充满了内容提供者和StyledCellLabelProviders
。我需要知道这些特定的“链接”单元何时悬停(所以我将鼠标更改为手形光标)并单击(所以我实际上用这些“链接”做了一些事情)。
我找不到解决方案,所以任何帮助都将受到高度赞赏。
谢谢, 奥伦
编辑:更多解释 我有一棵树和一个树木观察者。每个TreeColumns
有TreeViewerColumn
个{{1}}。数据由内容提供者和两种类型的标签提供者填充(用于简单文本和样式文本)。我需要知道何时在第4列中的项目上单击鼠标以及何时将鼠标悬停在其上。当发生这种情况时 - 我需要知道它被点击的单元格,它所属的TreeItem,这个项目中的数据等等。
我的问题是我无法解决这个问题。当我使用鼠标监听器或选择监听器时,它们只能在第一列上工作。我不能“达到”第四个。
我无法更改列顺序,也没有意义。
有什么想法吗?
答案 0 :(得分:0)
我会遵循这种方法:
将MouseMoveListener
附加到树
使用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)可能是必要的,以防止无法找到任何项目时无限循环。
你有一个TreeItem,你可以获得它用TreeItem.getData()
显示的元素。请注意,这是TreeViewer的实现细节 - 但我不知道有另一种方法可以获取给定TreeItem的元素。