gpt4 book ai didi

java - InputMap - 注册一个监控按键的击键,没有虚拟重复

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:39 24 4
gpt4 key购买 nike

显然有人问过这个问题beforebeforebefore ,但要么答案不能解决问题,要么使用我无法理解的语言。

我必须使用 JComponent.WHEN_IN_FOCUSED_WINDOW 注册键盘操作,因此 KeyListener 不是替代方案。我必须跟踪按下和释放键,比如光标键。由于某些内置键重复,我无法进行多次按下/释放触发。我真的很想知道什么时候按键被物理按下和按下。例如,按下时启动计时器,释放时停止计时器(并且不要因为虚拟键重复而多次启动和停止计时器)。

我相信这在 OS X 上工作正常,但我现在在 Linux (OpenJDK 7) 上。

如何?

最佳答案

正如许多人指出的那样,这是 Linux 上的一个怪事(或:错误)。

解决方法如下。假设按下 Action 类称为 ActionPress,释放 Action 类称为 ActionRelease

  • 两者都维护一个 long lastWhen,它在 actionPerformed 中用 e.getWhen 更新。他们有一个公共(public)方法 getLastWhen 可以被对方调用。
  • ActionRelease 维护一个具有几毫秒的 javax.swing.Timer。它是常规的 actionPerformed 重新启动计时器,没有别的。
  • ActionPress 在其actionPerformed 中调用相应的ActionReleasegetLastWhen。如果结果与自己的lastWhen相同,则忽略该 Action 并返回,否则执行该 Action 。
  • ActionReleaseTimer 的附加 ActionListener 中执行实际操作。在其 getLastWhen 实现中,它在返回 lastWhen 之前停止计时器。

关于java - InputMap - 注册一个监控按键的击键,没有虚拟重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com