如何跟踪鼠标 EXIT/ENTER/HOVER 在复合材料上?

Suz*_*ioc 5 java swt eclipse-plugin eclipse-rcp mouseevent

下面的代码表明:

1) 复合时 HOVER 被完全忽略。如何启用?

2) 跟踪 ENTER/EXIT,但是当鼠标进入子控件区域时,父复合材料会收到 EXIT 事件。如何使复合体的中间区域成为复合体的一部分?

public class TryHover {

    public static void main(String[] args) {

        Display display = new Display();

        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());

        Composite composite = new Composite(shell, SWT.BORDER);
        composite.setLayout(new GridLayout(1, false));

        Label label1 = new Label(composite, SWT.BORDER);
        label1.setText("Label 1");

        Label label2 = new Label(composite, SWT.BORDER);
        label2.setText("Label 2");

        composite.addListener(SWT.MouseEnter, new Listener() {

            @Override
            public void handleEvent(Event event) {
                System.out.println("ENTER");

            }
        });

        composite.addListener(SWT.MouseExit, new Listener() {

            @Override
            public void handleEvent(Event event) {
                System.out.println("EXIT");

            }
        });

        composite.addListener(SWT.MouseHover, new Listener() {

            @Override
            public void handleEvent(Event event) {
                System.out.println("HOVER");

            }
        });

        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

更新

是的,同意,如果鼠标速度慢,它也会产生悬停。

那么问题仅与 ENTER/EXIT 有关:如何打开子控件的 EXIT?

Ale*_* K. 1

不知道为什么你会忽略悬停。我可以看到,它已被跟踪(请参阅屏幕截图),并且鼠标在复合材料上悬停至少一秒钟。您的代码已被使用,没有任何修改。

在此输入图像描述

可能与操作系统有某种关系?尝试调用composite.setEnabled(true);,因为禁用的控件不接收鼠标事件。