2010-04-06 7 views
1

Je suis curieux de savoir pourquoi j'ai obtenu le "bon" mais "mauvais" nombre de résultat lorsque je clique avec la souris. Je suppose d'imprimer sur la console mouseClickedune fois chaque fois que la souris est cliquée. Cependant, j'ai obtenu beaucoup d'entre eux imprimé chaque fois que j'ai cliqué sur la souris ... parfois 5 par exemple.Obtenir le bon résultat de clic de souris événement

mouseClicked 
mouseClicked 
mouseClicked 
mouseClicked 
mouseClicked 

Au lieu de

mouseClicked 

Pourquoi?

public class GUI extends JFrame implements MouseListener, ActionListener { 
..... 
    public GUI { 
     GridBagLayout m = new GridBagLayout(); 
     Container c = getContentPane(); 
     c.setLayout (m); 
     GridBagConstraints con = new GridBagConstraints(); 
     .... 
     JPanel pDraw = new JPanel(new GridLayout(ROWS,COLS,2,2)); 
     con = new GridBagConstraints(); 
     ... 
     m.setConstraints(pDraw, con); 

     pDraw.addMouseListener(this);  
     pack();   
     setVisible(true);  
    } 

    public void mouseClicked(MouseEvent arg0) { 
     System.out.println("mouseClicked");  
    } 
} 
+1

Pourriez-vous fournir un peu plus de contexte? Plus précisément, où votre MouseEventHandler est ajouté en tant qu'auditeur? Il semble que vous l'ajoutiez plus d'une fois en tant qu'auditeur. – Frederik

+1

Il est difficile de dire sans savoir à quoi vous attachez votre auditeur. Veuillez fournir plus de détails sur le contexte. – Gnoupi

+1

@Jessy: Pourriez-vous également fournir le code où 'addMouseListener' est appelé? –

Répondre

0

Merci pour tous les commentaires, puisque je n'ai pas implémenté toutes les méthodes de mouseEvent, je devrais utiliser new mouseAdapter() pour qu'il ne soit pas mélangé entre mousepressed et mouseClicked.

public class GUI extends JFrame implements MouseListener, ActionListener { 
..... 
    public GUI { 
     GridBagLayout m = new GridBagLayout(); 
     Container c = getContentPane(); 
     c.setLayout (m); 
     GridBagConstraints con = new GridBagConstraints(); 
     .... 
     JPanel pDraw = new JPanel(new GridLayout(ROWS,COLS,2,2)); 
     con = new GridBagConstraints(); 
     ... 
     m.setConstraints(pDraw, con); 

     pDraw.addMouseListener(new MouseAdapter(){ 
     public void mouseClicked(MouseEvent e) { 
      System.out.println("mouseClicked"); 
     } 
     }); 

     pack();   
     setVisible(true);  
    } 
} 
1

Jetez un oeil à cette méthode dans MouseEvent:

getClickCount

public int getClickCount() Renvoie le nombre de clics de souris associés à cet événement. Renvoie: valeur entière pour le nombre de clics

+0

J'ai essayé le if (e.getClickCount() == 1) mais j'ai encore beaucoup de résultats – Jessy

1

L'exemple que vous avez fourni semble correct et devrait fonctionner.

Étant donné que vous implémentez l'interface MouseListener, vous pouvez vérifier si vous n'imprimez pas accidentellement "mouseClicked" dans les méthodes mousePressed/mouseReleased.

Questions connexes