0

org.eclipse.swt.widgets.Tableクラスのより柔軟なtooptipを提供するクラスを実装しました。ご存知のとおり、デフォルトでは、テーブル全体に対して1つのツールチップが表示されますが、セルごとに個別のヒントは表示されません。

私のオブジェクトは、独自の場所に依存するツールチップを実装するために多数のリスナーを作成しますが、Table.getItem(Point)を呼び出して、マウスがホバーしているTableItem(またはセル)を取得すると、常に、正しい行。

問題のテーブルは、この呪文を使用して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 に答える