2008-12-12 100 views
0

我已经实现了一个类,为我提供了一个更灵活的org.eclipse.swt.widgets.Table类的tooptip。我相信你们都知道,默认情况下,你会得到整个表格的一个工具提示 - 而不是每个单元格的个别提示。为什么Table.getItem(Point)总是返回零列中的项目?

我的对象创建了许多侦听器来实现它自己的位置敏感工具提示,但是,当我调用Table.getItem(Point)以获取鼠标悬停的TableItem(或单元格)时,它始终返回单元格正确行的第0列。

有问题的表是由与此咒语一个TableViewer的创建...

viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); 

无论我该怎么错了?

回答

3

答案最终是TableItem表示一行,而不是一行内的单元格。这个小方法获取列数你...

/** 
* Get the column from the given TableItem and Point objects 
* @param pt 
* @param item 
* @return -1 if no column is found 
*/ 
public static int getColumn(Point pt, TableItem item) 
{ 
    int columns = item.getParent().getColumnCount(); 
    for (int i=0; i<columns; i++) 
    { 
     Rectangle rect = item.getBounds (i); 
     if (pt.x >= rect.x && pt.x < rect.x + rect.width) return i; 
    } 
    return -1; 
} 

注意:如果你正好徘徊在桌子边缘Rectangle.intersects(点)可能会失败,所以我用一个简单的X,而不是比较。