0

我已经实现了一个类来为 org.eclipse.swt.widgets.Table 类提供更灵活的提示。我相信你们都知道,默认情况下,您会为整个表格获得一个工具提示 - 而不是每个单元格的单独提示。

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

有问题的表是由具有此咒语的 TableViewer 创建的...

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

我哪里错了?

4

1 回答 1

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( Point ) 如果您将鼠标准确地悬停在表格边缘上,则可能会失败,因此我使用了简单的 X 比较。

于 2008-12-16T13:18:50.713 回答