MouseListener für JPanel fehlt mouseClicked-events

Habe ich ein JPanel, dass ich erstellt habe einen MouseListener und ich sehe einige Verhalten, das ich nicht erklären kann.

In der Regel, wenn ich auf die Maus innerhalb des JPanel, sehe ich die folgenden Ereignisse ausgelöst:

mousePressed
mouseReleased
mouseClicked

Einige Male, ich sehe nicht, das mouseClicked event Feuer, ich sehe nur:

mousePressed
mouseReleased

Glaube ich nicht, ich mache nichts außergewöhnliches, wenn ich auf diese Zeiten. Könnte jemand erklären, warum ich vielleicht nicht sehen werden, sind die mouseClicked-event?

Ich bin mir nicht sicher, ob es relevant ist, aber ich habe eine animation läuft in der Systemsteuerung mithilfe eines javax.swing.Timer.

Jede Hilfe ist willkommen.

EDIT: hinzufügen von test-code, der sich repliziert problem. Ich bin mir nicht sicher, aber ich Frage mich, ob meine Maus hat nichts damit zu tun. Ich habe eine dieser super-sensitive gaming-Mäuse (von meinem alten COD4 Tagen).

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);
    }

}
  • Kannst du etwas code ?
  • Gerade Hinzugefügt eine Klasse, die repliziert das problem. Ich dachte, es könnte sein, dass meine Maus war zu empfindlich, und ich war immer B. mousemoved-events zwischen den mousePressed und mouseReleased-events, aber ich habe einen listener für B. mousemoved, und ich konnte das problem reproduzieren, ohne zu sehen, ein mouseMove-Ereignis in der Mitte.
  • Vielen Dank für diese Frage, zusammen mit all den Antworten. Ich hatte genau das gleiche problem!!! (Wahrscheinlich meine sensible Maus).
InformationsquelleAutor BillMan | 2010-08-01
Schreibe einen Kommentar