SWT - 如何监听鼠标事件,并检索其绝对位置?

时间:2012-11-14 14:00:51

标签: java swt

我通过添加过滤器来捕获带有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
        }
    });

4 个答案:

答案 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);
        }
    });