2010-03-08 1 views
1

J'ai sous-classé org.eclipse.swt.widgets.Composite pour créer un nouveau contrôle composite. Je veux capturer les événements MouseEnter et MouseExit dans ce contrôle mais le problème que j'ai est que lorsque la souris survole un composant dans le contrôle (par exemple, un Label) l'événement MouseExit est déclenché, même si l'étiquette fait partie de l'ensemble Composite.Comment puis-je empêcher un contrôle composite SWT de déclencher un événement MouseExit lorsque la souris entre dans un contrôle de composant?

Y a-t-il un moyen d'arrêter cet événement? Je veux seulement voir l'événement si la souris quitte la limite totale du contrôle. Voici un exemple de code pour vous montrer ce que je veux dire.

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

}

Répondre

2

Vous pouvez simplement mettre une logique dans votre gestionnaire d'événements pour voir si le contrôle est un enfant de votre nouveau contrôle et l'ignorer. Quelque chose comme ce qui suit: (Je n'ai pas testé le code, mais je pense que cela devrait fonctionner pour vous)

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

Excellent, merci beaucoup. –

Questions connexes