2010-03-08 33 views
1

我已经子类org.eclipse.swt.widgets.Composite创建一个新的复合控件。我想在此控件中捕获MouseEnter和MouseExit事件,但是我遇到的问题是,当鼠标悬停在控件的某个组件(例如Label)上时,MouseExit事件被触发,即使标签是整体的一部分综合。如何在鼠标进入组件控件时阻止SWT组合控件发出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 
     }   
    }); 
} 

}

回答

2

您可以简单地把一个逻辑在事件处理程序,以查看是否控制是你的新控制的孩子,忽略它。类似以下内容:(我没有测试代码,但我认为这应该适用于您)

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 
     }   
    }); 
+0

非常好,非常感谢。 – 2010-03-08 20:15:35