2012-11-14 74 views
2

我通過添加一個過濾器捕捉複合材料的殼內的鼠標事件。SWT - 如何監聽鼠標事件並檢索其絕對位置?

現在事件的位置相對於它們出現的複合材料。
如何檢索MouseEvents絕對位置? (絕對位置是在顯示屏的左上角有0,0的位置)。

parentShell.getDisplay().addFilter(SWT.MouseDown, new Listener() { 
     @Override 
     public void handleEvent(Event event) { 
      //do not know the absolute position here 
     } 
    }); 
+0

您錯過了這一點,我需要事件的絕對位置,這確實發生在應用程序窗口內部。 – Skip

回答

5

您可以使用Control#toDisplay(int, int)轉換任何相對座標顯示相對絕對值。

public void handleEvent(Event event) { 
    if (event.widget instanceof Control) { 
     Point absolutePos = ((Control) event.widget).toDisplay(event.x, event.y); 
     ... 
    } 
} 

如果您收到的事件是鼠標事件,它將在您的示例中發生。如果您手邊沒有鼠標事件,您還可以在任何時候使用Display#getCursorLocation()以獲取絕對鼠標位置。

1

我能想到的唯一方法就是使用getLocation()方法來獲取控件與其父對象的相對位置。遞歸地使用該方法直到您到達頂層組合和/或顯示。添加事件的相對座標以獲取絕對座標。但這只是一個猜測。

5

以下保存我的一天:

System.out.println("Click: " + parentShell.getDisplay().getCursorLocation()); 
0

試試這個:

parentShell.getDisplay().addFilter(SWT.MouseDown, new Listener() { 
     @Override 
     public void handleEvent(Event event) { 
      Point p = Display.getCurrent().map(null, null, event.x, event.y); 
     } 
    });