swing - JPanel的MouseListener缺少mouseClicked事件

标签 swing event-handling mouseevent jpanel

我有一个为它创建了MouseListener的JPanel,并且看到了一些我无法解释的行为。

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

mousePressed
mouseReleased
mouseClicked

在某些情况下,我看不到mouseClicked事件触发,仅看到:
mousePressed
mouseReleased

当我单击这些时间时,我认为我没有做任何异常的事情。谁能解释为什么我可能看不到mouseClicked事件?

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

任何帮助表示赞赏。

编辑:添加可复制问题的测试代码。我不确定,但是我想知道我的鼠标是否与它有关。我有一只 super 敏感的游戏鼠标(从我以前的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);
    }

}

最佳答案

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

“您将看到一个鼠标释放的事件。如果您不移动鼠标,那么将发生一个鼠标单击的事件。”

我只是有这个问题。如果完全移动鼠标,将不会发生单击事件。我真的不知道该给什么好的mouseClicked知识。我通过使用mouseReleased并检查鼠标是否在对象中来解决此问题:

public void mouseReleased(MouseEvent e) {
    if(objectWithListener.contains(e.getPoint())){
        doClickAction();
    }
}

关于swing - JPanel的MouseListener缺少mouseClicked事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3382330/

相关文章:

java - 在小程序中选择自定义颜色

java - JFileChooser 文件夹选择问题

cocoa - NSWindowController 的红色关闭按钮的事件

Javascript 返回触发事件的元素的 id

jquery - 用指针移动外部区域中的对象

java - 从 Netbeans 环境运行 正确打印文本。直接运行同一个JAR不会

java GUI 窗体打开其他窗体 onclick 按钮

javascript - jQuery 为每个元素分配超时事件处理程序

.net - Windows 窗体处理程序在计算机唤醒时被忽略

javascript - 动态内容鼠标悬停