J'ai un JPanel pour lequel j'ai créé un MouseListener et je vois un comportement que je ne peux pas expliquer.MouseListener pour JPanel missing mouseClicked événements
Habituellement, lorsque je clique sur la souris dans le JPanel, je vois les événements qui ont suivi le feu:
mousePressed
mouseReleased
mouseClicked
À certaines occasions, je ne vois pas vu le feu de l'événement mouseClicked, je ne:
mousePressed
mouseReleased
Je ne pense pas que je fais quelque chose hors de l'ordinaire quand je clique ces fois. Quelqu'un pourrait-il expliquer pourquoi je ne pourrais pas voir l'événement mouseClicked?
Je ne sais pas si c'est pertinent, mais j'ai une animation qui s'exécute dans le panneau en utilisant un javax.swing.Timer.
Toute aide est appréciée.
EDIT: Ajout d'un code de test qui réplique le problème. Je ne suis pas sûr, mais je me demande si ma souris a quelque chose à voir avec ça. J'ai une de ces souris de jeu super sensibles (de mes vieux jours COD4).
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args) {
final Test test = new Test();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
test.createAndShowGUI();
}
});
}
protected void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(1024, 768));
frame.setTitle("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
System.out.println(":MOUSE_RELEASED_EVENT:");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("----------------------------------\n:MOUSE_PRESSED_EVENT:");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println(":MOUSE_EXITED_EVENT:");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println(":MOUSE_ENTER_EVENT:");
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(":MOUSE_CLICK_EVENT:");
}
});
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
Pouvez-vous poster du code? –
Juste ajouté une classe qui réplique le problème. Je pensais que ma souris était trop sensible et que je recevais des événements mouseMoved entre les événements mousePressed et mouseReleased, mais j'ai ajouté un écouteur pour mouseMoved et j'ai pu répliquer le problème sans voir un mouseMove au milieu. – BillMan
Merci pour cette question, avec toutes les réponses. J'ai eu exactement le même problème! (Probablement ma souris sensible aussi). – Hidde