用于JPanel的MouseListener缺少mouseClicked事件

Bil*_*Man 9 swing event-handling jpanel mouseevent

我有一个JPanel,我已经创建了一个MouseListener,我看到一些我无法解释的行为.

通常当我在JPanel中单击鼠标时,我会看到以下事件:

mousePressed
mouseReleased
mouseClicked
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我没有看到mouseClicked事件触发,我只看到:

mousePressed
mouseReleased
Run Code Online (Sandbox Code Playgroud)

当我点击这些时间时,我认为我没有做任何与众不同的事情.谁能解释为什么我可能没有看到mouseClicked事件?

我不确定它是否相关,但我确实在面板中使用javax.swing.Timer运行动画.

任何帮助表示赞赏.

编辑:添加复制问题的测试代码.我不确定,但我想知道我的鼠标是否与它有关.我有一个超级敏感的游戏鼠标(来自我旧的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);
    }

}
Run Code Online (Sandbox Code Playgroud)

And*_*rew 16

根据http://download.oracle.com/javase/tutorial/uiswing/events/mouselistener.html:

"你会看到一个鼠标释放的事件.如果你没有移动鼠标,将会出现一个鼠标点击的事件."

我刚遇到这个问题.如果您将鼠标移动到所有位置,则不会发生单击的事件.我真的不知道有什么好的mouseClicked给了这个知识.我使用mouseReleased修复它并检查鼠标是否在对象内:

public void mouseReleased(MouseEvent e) {
    if(objectWithListener.contains(e.getPoint())){
        doClickAction();
    }
}
Run Code Online (Sandbox Code Playgroud)