背景:SWTテーブルにコンテキストメニューをプログラムで作成しようとしています。私は、行の項目ではなく、クリックされたセルに基づいてメニューを非表示にする必要があるため、プログラムで実行しています。MouseDownイベントの座標がMenuDetectイベントと異なるのはなぜですか?
イベントクラスのx、y座標を使用してクリックされたセルを見つける予定だったので、型なしのMouseDownイベントと型なしのMenuDetectイベントの両方をキャプチャしています。イベントハンドラにロギングメッセージを入れて、何が起こっているのかよく分かりました。ここに私のコードは次のとおりです。同じクリックすると
tree.addListener(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(final Event event) {
System.out.println("Mouse down: (" + event.x + ", " + event.y + ")");
handleMouseDown(event);
}
});
tree.addListener(SWT.MenuDetect, new Listener() {
@Override
public void handleEvent(final Event event) {
System.out.println("Menu Detect: (" + event.x + ", " + event.y + ")");
handleMenuDetect(event);
}
});
次のように私は、セルの列を下にクリックしたとき、私は同じ結果を確認することが期待、しかし、私の出力がされた:
マウスダウン:( 334、11)メニュー検出:ダウン(1270、255)
マウス:(331、37)メニュー検出:(1267、281)
マウスダウン:(329、55)メニュー検出:(1265、 299)
マウスダウン:(324、77)メニュー検出:(1260、321)
マウスダウン:(324、100)メニューを検出:(1260、344)
をここで何が起こっていますか?彼らは同じ正確なポイントを指していないのですか?彼らは異なる起源からx、yを計算していますか?
ありがとう!それはうまくいった。私はしばらくこの頭を掻いてきました。 – chama
@chamaようこそ。私は試してみるまで彼らが違うとは思わなかった。 Javadocはそれをうまく説明します。私の答えにそれを加えました。 – Baz