MouseListener для JPanel пропавшие без вести событий, по которым щелкают мышью,

У меня есть JPanel, для которого я создал MouseListener, и я вижу некоторое поведение, которое я не могу объяснить.

Обычно, когда я щелкаю мышью в JPanel, я вижу следующий огонь событий:

mousePressed
mouseReleased
mouseClicked

В некоторых случаях я не вижу огонь события, по которому щелкают мышью, я только вижу:

mousePressed
mouseReleased

Я не думаю, что делаю что-либо необычное, когда я нажимаю эти времена. Кто-либо мог объяснить, почему я не мог бы видеть событие, по которому щелкают мышью?

Я не уверен, релевантно ли это, но у меня действительно есть анимация, работающая в панели с помощью javax.swing. Таймер.

Любая справка ценится.

Править: добавление тестового кода, который копирует проблему. Я не уверен, но интересно, имеет ли моя мышь какое-либо отношение к нему. У меня есть одна из тех супер чувствительных играющих мышей (с моих старых дней 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);
    }

}
9
задан BillMan 1 August 2010 в 15:18
поделиться

1 ответ

Думаю, я нашел здесь проблему. Я получал промежуточные события mouseDragged между mousePress и mouseRelease. mouseMoved, похоже, не вызывала проблемы, а mouseDragged - вызывала.

Сейчас я не уверен в правильном решении, но по крайней мере теперь я могу объяснить, что происходит.

Ура

- Билл

3
ответ дан 4 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: