小编Tor*_*bye的帖子

当存在Drag Source时,MouseUp事件直到MouseUp才会传递

我有一个老鼠听众.它有一些代码来响应mouseUp和mouseDown事件.这工作正常.

但是,只要我添加一个DragSource,我的mouseDown事件就不再发送 - 直到我释放鼠标按钮!

重现这一点很简单 - 下面是一个简单的程序,它包含一个只有鼠标监听器和拖动监听器的普通shell.当我运行它(在Mac上),然后按住鼠标按钮时,没有任何反应 - 但是一旦我释放鼠标按钮,我立即看到鼠标按下和鼠标按下事件.如果我注释掉拖动源,那么鼠标事件将以它们应该的方式传递.

我搜索过其他有类似问题的人,而我最接近解释的是:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=26605#c16 "如果您挂钩拖动检测,操作系统需要吃掉鼠标事件,直到它确定您是否已拖动."

但是,我不明白为什么这是真的 - 为什么操作系统必须吃掉鼠标事件以确定我是否有阻力?在我按下按钮的鼠标移动事件之前,拖动才会开始.

更重要的是:有人可以建议解决方法吗?(当我按下鼠标时,我尝试动态添加和删除我的拖动源,但是我无法通过拖放操作正常,因为它从未看到初始按键 - 我找不到以编程方式启动的方法拖动.)

这是示例程序:

    package swttest;

    import org.eclipse.swt.dnd.DND;
    import org.eclipse.swt.dnd.DragSource;
    import org.eclipse.swt.dnd.DragSourceEvent;
    import org.eclipse.swt.dnd.DragSourceListener;
    import org.eclipse.swt.events.MouseEvent;
    import org.eclipse.swt.events.MouseListener;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;

    public class SwtTest {
        public static void main(String[] args) {
            final Display display = new Display();
            final Shell shell = new Shell(display);
            shell.addMouseListener(new MouseListener() {
                public void mouseUp(MouseEvent e) {
                    System.out.println("mouseUp");
                }

                public void mouseDown(MouseEvent e) {
                    System.out.println("mouseDown");
                }

                public void mouseDoubleClick(MouseEvent e) …
Run Code Online (Sandbox Code Playgroud)

swt eclipse-rcp

17
推荐指数
1
解决办法
5529
查看次数

标签 统计

eclipse-rcp ×1

swt ×1