2010-03-08 36 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