なぜTable.getItem(ポイント)が常に列ゼロからアイテムを返すのですか?
-
21-08-2019 - |
質問
私は私にorg.eclipse.swt.widgets.Tableクラスのためのより柔軟なtooptipを与えるためにクラスを実装しました。私はあなたのすべてを知っていると確信しているとして、デフォルトで使用すると、1つのテーブル全体のツールヒントを得る - 。と各セルのない個々のヒントを。
私のオブジェクトは、私は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の比較を使用しました。
。所属していません StackOverflow