Bonjour,
Jai un petit problème de listeners,
Voici mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
tablev.addListener(SWT.MouseMove, new Listener(){
private Runnable timer = null;
public void handleEvent(final Event e) {
/*Récupération du TableItem à la position du curseur*/
final TableItem item = tablev.getItem(new Point(e.x, e.y));
if (item != null) { /*Si le TableItem existe --> != null . On vérifie si il y avait déjà un timer lancé.
Si c'est le cas, on le stoppe*/
stopTimer();
/*Et on en crée un nouveau... */
timer = new Runnable() {
public void run() {
final Shell s = new Shell(SWT.CLOSE);//test a
s.addListener(SWT.MouseMove, new Listener(){
public void handleEvent(Event ee) {
System.out.println("voili voilou");
s.dispose();
}});
System.out.println("xxxxxxxxxxx");
}
};
tablev.getDisplay().timerExec(2000, timer);
} else {
System.out.println("else");
stopTimer();
}
}
private void stopTimer() {
if (timer != null)
tablev.getDisplay().timerExec(-1, timer);
}
}); |
Explication rapide du code :
Je récupère donc un item qui se trouve sous le curseur, et après 2000ms un shell apparaît. (J'ai supprimé les lignes de code spécifique à la construction de ce shell (composite, labels etc...)).
Je voudrais que ce shell popup se ferme si on bouge la souris. J'y ai donc attaché un écouteur de type "mousemove" avec un dispose() dans le handelEvent.
Le problème :
Mon problème est que cet écouteur -->
s.addListener(SWT.MouseMove, new Listener...
n'est pas pris en compte.
Au final cela donne que mon popup s'ouvre bien après les 2secondes comme je le souhaite mais ne se ferme pas si je bouge la souris une fois le shell affiché.
Quelqu'un pourrait-il m'expliquer pourquoi parce que je ne vois vraiment pas :-( ?
Une solution alternative ou n'importe quelle piste intéressante serait également la bienvenue :-)
Merci Beaucoup...
Partager