我通过添加过滤器来捕获带有Composites的shell内的鼠标事件。
现在事件相对于复合材料定位,它们发生在那里 如何检索MouseEvents的绝对位置? (绝对位置是显示屏左上角的0,0位置。)
parentShell.getDisplay().addFilter(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
//do not know the absolute position here
}
});
答案 0 :(得分:5)
以下保存了我的一天:
System.out.println("Click: " + parentShell.getDisplay().getCursorLocation());
答案 1 :(得分: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()
获取绝对鼠标位置。
答案 2 :(得分:1)
我能想到的唯一方法是使用getLocation()方法来获取窗口小部件与侦听器到其父窗口的相对位置。递归使用该方法,直到到达顶部合成和/或显示。添加事件的相对坐标以获取绝对坐标。但这只是猜测。
答案 3 :(得分: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);
}
});