繁体   English   中英

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

[英]SWT - how to listen for mouse events, and retrieve their absolute position?

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

保存了我的一天:

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

您可以使用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()来获得绝对鼠标位置。

我能想到的唯一方法是使用getLocation()方法来获取窗口小部件与其父级的侦听器的相对位置。 递归使用该方法,直到到达顶部合成和/或显示。 添加事件的相对坐标以获取绝对坐标。 但这只是猜测。

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM