我实现了一个类来给我的org.eclipse.swt.widgets.Table类更灵活tooptip。正如我敢肯定,你们都知道,在默认情况下你会得到整个表的一个提示 - 然后对每个Cell不是单个提示

我的对象创建许多听众来实现它自己的位置敏感的提示,但是,当我打电话Table.getItem(点),以获得表项(或单元)在其鼠标悬停它总是从列返回细胞正确行的0。

所讨论的表由TableViewer中与此咒语创建...

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

无论我该怎么错了?

有帮助吗?

解决方案

答案,到底是表项表示一个行,而不是行内的细胞。这个小方法获取列数你...

/**
 * 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;
}

NB:如果悬停恰好在桌子边缘Rectangle.intersects(点)可能会失败,因此我用一个简单的X比较,而不是

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top