MouseListener的触发速度不够快

时间:2010-09-03 19:12:43

标签: java swing awt

我有一个扩展JFrame的类,它正在任何地方观察鼠标点击:

addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e){
        System.out.println("mouse was clicked");
    }
});

我通常需要在点击之间等待近一秒才能触发事件。如果我在一秒内进行2或3次点击,则只会触发一个事件。你如何看待快速点击事件?

这是我第一次使用Java而我正在使用NetBeans。

3 个答案:

答案 0 :(得分:14)

尝试使用mousePressed而不是mouseClicked。 mouseClicked查找多个按钮单击,因此它将合并一些事件。

答案 1 :(得分:2)

希望这可以帮助任何寻找同一问题答案的人在3。5年后:)

当您点击鼠标时,您将触发以下事件。

  1. 的mousePressed
  2. MouseDragged(如果你用力按压移动的话) 光标咯)
  3. 的mouseReleased
  4. 的mouseClicked
  5. 我遇到了这个问题,使用他们的Forms实用程序使事件成为Netbeans的懒惰方式。 我发现在Press和Release之间意外拖动我的鼠标是杀死click事件的原因。 按预期工作或JVM和Netbeans的次要故障?我不知道。


    我使用的解决方法是注册MousePressed和MouseReleased事件来模拟点击。 如果在同一个对象上发生按下并释放 ,则MouseReleased将不执行任何操作。

    如果Press和Release发生在同一个Object上,我会使用适当的参数调用我的方法来使用该事件。

    请注意,因为我正在处理JFrame上的点击,所以它是唯一的swing对象,所以我传递鼠标坐标的Point对象并比较两者,确保它们落在指定的矩形内。

答案 2 :(得分:1)

要扩展@Ricky Clarkson所说的内容:每次按下鼠标按钮时,MousePressed都会触发;每次释放鼠标按钮时都会触发MouseReleased,每次操作系统认为用户完成了点击(即他们已点击足以溢出点击次数或从他们的最后一次点击有足够的时间)时,鼠标点击事件将触发因为它可以算作完成的点击。)用户按下并释放鼠标事件。

如果您想要鼠标按下的信息,请使用MousePressed事件。否则,每当操作系统想要将其提供给Java时,您将获得MouseClicked事件,这可能在很大程度上取决于系统的设置(即在系统选项中设置延迟的时间长度 - 如控制面板 - 到允许双击)。

希望这有助于澄清。


编辑:删除了与操作系统信息相关的陈述 - 似乎我在回忆这是如何工作的时候错了。道歉。