Tengo un JPanel para el que he creado un MouseListener y estoy viendo un comportamiento que no puedo explicar.MouseListener para JPanel mouse missing Eventos clonados
Por lo general, al hacer clic en el ratón dentro del JPanel, veo los siguientes eventos de incendios:
mousePressed
mouseReleased
mouseClicked
En algunas ocasiones, no veo el fuego mouseClicked caso, sólo veo:
mousePressed
mouseReleased
No creo que esté haciendo nada fuera de lo común cuando hago clic en estos momentos. ¿Alguien podría explicar por qué podría no estar viendo el evento MouseClicked?
No estoy seguro si es relevante, pero sí tengo una animación ejecutándose en el panel usando javax.swing.Timer.
Cualquier ayuda es apreciada.
EDIT: agregando el código de prueba que replica el problema. No estoy seguro, pero me pregunto si mi mouse tiene algo que ver con eso. Tengo uno de esos ratones de juego súper sensibles (de mis viejos días de 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);
}
}
¿Se puede publicar algún código? –
Acaba de agregar una clase que replica el problema. Pensé que podría ser que mi mouse fuera demasiado sensible y obtuviera eventos MouseMoved entre los eventos MousePressed y mouseReleased, pero agregué un detector para mouseMoved y pude replicar el problema sin ver un mouseMove en el medio. – BillMan
Gracias por esta pregunta, junto con todas las respuestas. ¡Tuve exactamente el mismo problema! (Probablemente mi ratón sensible también). – Hidde