IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[SWT]MouseListeners pas pris en compte


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 89
    Points
    89
    Par défaut [SWT]MouseListeners pas pris en compte
    Bonjour,

    Jai un petit problème de listeners,
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  2. #2
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    Bonjour,
    Si cela marche, mais il faut que le curseur atteigne le shell créé. Une fois atteint, il se ferme. Cet écouteur n'est donc utilisé qu'à l'intérieur de ce shell.
    Si tu veux qu'il se ferme si tu bouges la souris après l'avoir créé, il faut faire le dispose avant de créer le timer.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    tablev.addListener(SWT.MouseMove, new Listener(){
    	private Runnable timer = null;
    	private Shell s = 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) {
        	        if (s != null)   
        		    s.dipose;
                    /*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() {
        		        s = new Shell(tablev.getDisplay(), SWT.CLOSE);
        			s.pack();
        			s.open();
        		    }
        		};
        		tablev.getDisplay().timerExec(2000, timer);
        	    } else {
        		System.out.println("else");
        		stopTimer();
        	    } 
            }
            private void stopTimer() {
    		if (timer != null)
    			tablev.getDisplay().timerExec(-1, timer);
    	}
    });

Discussions similaires

  1. getline(cin,s) pas pris en compte ?
    Par FinalSpirit dans le forum SL & STL
    Réponses: 3
    Dernier message: 19/01/2006, 02h18
  2. [Mail] Les sauts de lignes pas pris en compte
    Par Anduriel dans le forum Langage
    Réponses: 15
    Dernier message: 14/12/2005, 20h13
  3. [Plugi][phpeclipse] point d'arrêt pas pris en compte
    Par damjal dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 23/11/2005, 00h58
  4. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo