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

Composants Java Discussion :

Problème sur les MouseListener


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut Problème sur les MouseListener
    Bonjour,

    J'utilise deux interfaces "MouseListener" et "MouseMotionListener" pour traiter les effets de drag & released. L'effet marche quand on utilise le bouton gauche de la souris, mais il marche aussi quand on utilise le bouton droit
    J'ai essayé avec les méthodes "getButton()" et "isPopupTrigger()", mais rien à faire, soit ça marche pour les deux bouttons, soit aucun ne fonctionne. Comment puis-je faire ?

    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
    /** Surcharge de mouseReleased
     */
    public void mouseReleased(MouseEvent e) {
    	// L'évènement "e.isPopupTrigger()" (bouton menu) est traité par la classe NDateAreaMenu (balises menu)
    	//if ( !e.isPopupTrigger() ) {
    		if ( e.getButton() == MouseEvent.BUTTON1 ) {
    			if ( isListenerActivity )
    				isListenerActivity = false;
    			else
    				this.mouse_DragAndReleased(true);
    		}
    	//}
    }
     
    /** Surcharge de mouseDragged
     */
    public void mouseDragged(MouseEvent e) {
    	if ( !isListenerActivity )
    		this.mouse_DragAndReleased(false);
    }

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Salut voici le code d'un mouseListener qui te dit qui est enfoncé et qui est relaché

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    addMouseListener(new MouseListener() {
     
          public void mouseClicked(MouseEvent e)
          {
     
          }
     
          public void mousePressed(MouseEvent e)
          {
            switch(e.getButton())
            {
              case MouseEvent.BUTTON1:
                System.out.println("Button 1 pressed");
                break;
              case MouseEvent.BUTTON2:
                System.out.println("Button 2 pressed");
                break;
              case MouseEvent.BUTTON3:
                System.out.println("Button 3 pressed");
                break;
            }
          }
     
          public void mouseReleased(MouseEvent e)
          {
            switch (e.getButton())
            {
              case MouseEvent.BUTTON1:
                System.out.println("Button 1 released");
                break;
              case MouseEvent.BUTTON2:
                System.out.println("Button 2 released");
                break;
              case MouseEvent.BUTTON3:
                System.out.println("Button 3 released");
                break;
            }
          }
     
          public void mouseEntered(MouseEvent e)
          {
     
          }
     
          public void mouseExited(MouseEvent e)
          {
     
          }
        });
    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Si c'est la même classe qui implémente "MouseListener" et "MouseMotionListener", tu peux utiliser l'interface MouseInputListener, ça revient au même

    Après, je pense que ton problème vient du fait que le test du bouton se trouve dans le release uniquement.
    As-tu essayé de tester le bouton dans la méthode dragged?
    C'est plutôt ce que j'aurais commencé par faire vu la Javadoc.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Merci pour vos réponses !
    Effectivement, c'est une classe de listener implémentant les deux interfaces, du coup je n'implémente que MouseInputListener. Pour mon traitement, je n'ai besoin que des deux méthodes mises dans le code de mon premier post.
    La première méthode (mouseReleased) fonctionne, car j'ai bien le test "getButton() == MouseEvent.BUTTON1".

    Par contre, dans l'autre méthode, j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /** Surcharge de mouseDragged
     */
    public void mouseDragged(MouseEvent e) {
    NSession.logMuet("Bouton : "+e.getButton() + " | isPopup : "+e.isPopupTrigger());
    	// if ( e.getButton() == MouseEvent.BUTTON1 ) -> Ne marche plus
    	// if ( !e.isPopupTrigger() )
    	if ( !isListenerActivity )
    		this.mouse_DragAndReleased(false);
    }
    Mais sans succès. Dès que je "drag", le traitement est déclenché. J'obtiens toujours le message "Bouton : 0 | isPopup : false". Bouton : 0 signifie donc que l'évènement est MouseEvent.NOBUTTON, ce qui explique que le test du button rend inactif le traitement.
    Je ne sais plus trop quoi essayer. Peut être ajouter un boolean dans le mousePressed pour savoir si l'action en cours concerne un certain boutton ? Mais dans ce cas, ne vais-je pas entrer en conflit avec d'autres listener ?

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    J'allais le dire aussi, ma première réponse j'étais pas bien réveillé et j'ai fait un peu court

    Si tu ne veux pas d'effet drag'n drop avec le bouton droit il faut détecter à l'appui quand c'est le bouton gauche et seulement pour celui là démarrer l'effet.

    Pour les effets drag'n drop tu as jeté un oeil à ça: http://gfx.developpez.com/tutoriel/java/swing/drag/



    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Merci !
    J'ai ajouté le bouton utilisé dans la méthode "mousePressed()" :
    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
    protected class DateAreaListener implements MouseInputListener {
    	/** Indique le bouton sur lequel le traitement se fait */
    	private int numBouton = -1;
    /** Surcharge de mousePressed
     */
    public void mousePressed(MouseEvent e) {
    	// L'évènement "e.isPopupTrigger()" (bouton menu) est traité par la classe NDateAreaMenu (balises menu)
    	this.numBouton = e.getButton();
    }
    /** Surcharge de mouseReleased
     */
    public void mouseReleased(MouseEvent e) {
    	// L'évènement "e.isPopupTrigger()" (bouton menu) est traité par la classe NDateAreaMenu (balises menu)
    	if ( this.numBouton == MouseEvent.BUTTON1 ) {
    		if ( isListenerActivity )
    			isListenerActivity = false;
    		else
    			this.mouse_DragAndReleased(true);
    	}
    }
    /** Surcharge de mouseDragged
     */
    public void mouseDragged(MouseEvent e) {
    	if ( this.numBouton == MouseEvent.BUTTON1 && !isListenerActivity )
    		this.mouse_DragAndReleased(false);
    }
    Serait-il préférable d'avoir "this.numBouton = e.getButton();" dans chacune des méthodes des interfaces MouseInputListener, ou est-ce inutile ?
    Et pour info, MouseEvent.BUTTON3 correspond à la roulette, ou au deux boutton simultané ?

  7. #7
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Chez moi sur mon exemple et ma souris 2 boutons + mollette centrale

    Button 1 = bouton de gauche
    Button 2 = mollette central quand on appui dessus
    Button 3 = bouton de droite

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Merci, ça marche nickel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Les MouseListener
    Par ohhh.gringo dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 01/12/2006, 14h06
  2. Problème sur les dates
    Par Littlecoda dans le forum Oracle
    Réponses: 7
    Dernier message: 07/07/2006, 11h39
  3. problème sur les threads et les sémaphores
    Par ramislebob dans le forum Windows
    Réponses: 1
    Dernier message: 29/06/2006, 11h52
  4. Réponses: 6
    Dernier message: 31/03/2006, 17h05
  5. j'ai un problème sur les hinstances
    Par ramaro dans le forum C++
    Réponses: 9
    Dernier message: 26/02/2006, 14h32

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