【发布时间】:2010-08-01 14:18:35
【问题描述】:
我有一个 JPanel,我为它创建了一个 MouseListener,我看到了一些我无法解释的行为。
通常当我在 JPanel 中单击鼠标时,我会看到以下事件触发:
mousePressed
mouseReleased
mouseClicked
在某些情况下,我没有看到 mouseClicked 事件触发,我只看到:
mousePressed
mouseReleased
当我点击这些时间时,我认为我没有做任何不寻常的事情。谁能解释为什么我可能看不到 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);
}
}
【问题讨论】:
-
你能贴一些代码吗?
-
刚刚添加了一个复制问题的类。我认为可能是我的鼠标太敏感了,我在 mousePressed 和 mouseReleased 事件之间收到了 mouseMoved 事件,但是我为 mouseMoved 添加了一个侦听器,我可以复制问题而不会在中间看到 mouseMove。
-
感谢您提出这个问题以及所有答案。我有完全相同的问题! (可能也是我敏感的鼠标)。
标签: swing event-handling mouseevent jpanel