为什么Table.getItem(Point)总是返回零列中的项目?
问题描述:
我已经实现了一个类,为我提供了一个更灵活的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);
无论我该怎么错了?
答
答案最终是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,而不是比较。