java - 当鼠标进入组件控件时,如何阻止 SWT 复合控件触发 MouseExit 事件?

标签 java events eclipse-plugin swt

我对 org.eclipse.swt.widgets.Composite 进行了子类化以创建新的复合控件。我想捕获此控件中的 MouseEnter 和 MouseExit 事件,但我遇到的问题是,当鼠标悬停在控件中的某个组件(例如标签)上时,即使标签是整个组件的一部分,也会触发 MouseExit 事件复合。

有什么办法可以阻止此事件被触发吗?我只想在鼠标离开控件的总边界时查看事件。这里有一些示例代码来向您展示我的意思。

public class MyControl extends Composite{

Label label;

public MyControl(Composite parent, String label) {
    super(parent, SWT.NONE);
    label = new Label(this,0);
    label.setText(label);

    this.addListener(SWT.MouseEnter, new Listener() {
        @Override
        public void handleEvent(Event event) {
            // handle this event
        }           
    });
    this.addListener(SWT.MouseExit, new Listener() {
        @Override
        public void handleEvent(Event event) {
            // handle this event
        }           
    });
}

}

最佳答案

您可以简单地将逻辑放入事件处理程序中,以查看该控件是否是新控件的子控件并忽略它。类似以下内容:(我尚未测试代码,但我认为这应该适合您)

    this.addListener(SWT.MouseExit, new Listener() {
        @Override
        public void handleEvent(Event event) {
            for (Control control : ParentClass.this.getChildren()) {
                if (control == event.item)
                    return;
            }
            // handler logic goes here
        }           
    });

关于java - 当鼠标进入组件控件时,如何阻止 SWT 复合控件触发 MouseExit 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2400222/

相关文章:

java - 如何安全地将通用通配符 "?"转换为 Java 中的已知类型参数?

java - 如何使用数据库导航器插件 intelliJ 连接到 mysql 服务器

javascript - mozilla 和 webkit 触摸事件有什么区别?

eclipse-plugin - 我如何使用 "org.eclipse.debug.ui.launchShortcuts"?

eclipse 3.8 : where is the download site?

java - Rest Api 负载测试 Zerocode tdd 给出错误消息

java - mysql jdbc 不成功回滚

javascript - 哪个事件用于调用函数

java - JPA:保留/更新子项期间的事件通知?

java - 将 Canvas 设置为 Eclipse View ?