【问题标题】:MouseListener is not firing fast enoughMouseListener 的触发速度不够快
【发布时间】:2010-09-03 19:12:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我没有看到延迟;其他东西正在减慢它的速度。

标签: java swing awt


【解决方案1】:

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

【讨论】:

  • 澄清一下,mouseClicked() 收到的MouseEvent 报告了主机的本机驱动程序提供的点击计数。后者可能会或可能不会考虑用户偏好,正如@aperkins 回答后的 cmets 中所讨论的那样。
  • 你是我的英雄。
【解决方案2】:

希望这对 3.5 年后寻找相同问题答案的人有所帮助 :)

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

  1. 鼠标按下
  2. MouseDragged(如果您按下的力度足以移动鼠标 光标略)
  3. 鼠标已释放
  4. 鼠标点击

我遇到了这个问题,使事件在 Netbeans 中使用他们的 Forms 实用程序变得懒惰。 我发现在 Press 和 Release 之间意外拖动鼠标是导致 click 事件的原因。 是按预期工作还是 JVM 和 Netbeans 的小故障?我不知道。


我使用的解决方法是注册一个 MousePressed 和 MouseReleased 事件来模拟点击。 如果新闻和释放发生在同一个对象上,MouseReleased 将什么也不做。

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

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

【讨论】:

    【解决方案3】:

    稍微扩展一下@Ricky Clarkson 所说的:每次按下鼠标按钮时,MousePressed 都会触发; MouseReleased 将在每次释放鼠标按钮时触发,并且 MouseClicked 事件将在每次操作系统感觉用户完成点击时触发(即他们点击的次数足以溢出点击次数或距离他们最后一次点击有足够的时间算作完成点击)。用户按下并释放鼠标事件。

    如果您想获得有关鼠标按下的信息,请使用 MousePressed 事件。否允许双击)。

    希望这有助于澄清。


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

    【讨论】:

    • 我认为如果你“双击”你会得到两个鼠标点击事件,一个点击计数为 1,一个点击计数为 2?
    • 真的认为这个答案应该被否决,但我只能在 Windows 上测试。系统设置与生成多少 mouseClicked 事件无关。在同一鼠标坐标处为每个按下/释放事件生成一个 mouseClicked 事件。系统设置只控制“点击次数”。如果您单击缓慢,则计数将始终为 1。如果您快速单击(在系统设置内),则单击计数会不断增加。试试教程演示:download.oracle.com/javase/tutorial/uiswing/events/…
    • @camickr:在 Mac OS X 上使用MouseEventDemo,当我调整主机的双击速度时,我看到getClickCount() 的行为发生了明显变化;但正如@aperkins 所建议的那样,我认为报告事件没有延迟。我无法解释接受的答案如何影响问题中断言的延迟。
    • @trashgod,有什么明显的变化?我总是以相同的顺序(按下/释放/单击)获得 3 个事件。不同之处在于点击次数。当我缓慢点击(即每秒)时,点击次数始终为 1。当我点击得更快时,点击次数不断增加(1、2、3、4、5、6...)。没有丢失的事件,事件立即生成。
    • @camickr:我在 Mac OS 和 Windows 上得到了你的结果。此外,调整主机的双击速度会更改重复单击以增加getClickCount() 的结果与返回计数的间隔。例如,较长的双击间隔允许我通过以悠闲的速度单击(如您所见)看到递增的getClickCount(),而较短的间隔需要快速单击才能看到除一个之外的任何内容。在 Ubuntu 上,主机偏好似乎被忽略了;但是,与 Mac OS 和 Windows 一样,事件会及时报告。
    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2019-03-08
    相关资源
    最近更新 更多