问题标签 [keyrelease]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
20966 浏览

java - 如何知道用户何时真正释放了 Java 中的密钥?

(为清楚起见进行了编辑)

我想检测用户何时按下并释放 Java Swing 中的键,忽略键盘自动重复功能。我还想要一个纯 Java 方法在 Linux、Mac OS 和 Windows 上工作。

要求:

  1. 当用户按下某个键时,我想知道那是什么键;
  2. 当用户释放某个键时,我想知道那是什么键;
  3. 我想忽略系统自动重复选项:我希望每次按键只接收一个按键事件,每个按键释放只接收一个按键释放事件;
  4. 如果可能的话,我会使用项目 1 到 3 来了解用户是否一次持有多个键(即,她点击“a”并且没有释放它,她点击“Enter”)。

我在 Java 中面临的问题是,在 Linux 下,当用户按住某个键时,会触发许多 keyPress 和 keyRelease 事件(因为键盘重复功能)。

我尝试了一些没有成功的方法:

  1. 获取最后一次按键事件发生的时间——在 Linux 中,按键重复的次数似乎为零,但在 Mac OS 中则不然;
  2. 仅当当前 keyCode 与上一个不同时才考虑一个​​事件 - 这样用户就不能连续两次击中相同的键;

这是代码的基本(非工作)部分:

当用户持有一个键(即'p')时,系统会显示:

至少在 Linux 下,当一个键被持有时,JVM 会不断地重新发送所有的键事件。为了让事情变得更加困难,在我的系统(Kubuntu 9.04 Core 2 Duo)上,时间戳不断变化。JVM 发送具有相同时间戳的键新版本和新按键。这使得很难知道何时真正释放了密钥。

有任何想法吗?

谢谢

0 投票
2 回答
2243 浏览

opengl - OpenGL/Gtkmm 游戏 - 键盘移动

我正在“OpenGL”中编写游戏并使用“Gtkmm”作为窗口管理器。我想使用键盘来移动相机(因此,“向上键”向前移动,“向下键”向后移动,等等......)

前段时间,当我用 Java 编程时,我使用这种技术来“移动”:
当应用程序接收到例如“UP- keypress ”信号时,它随后将标志“shouldMoveForward”设置为“true”,当它后来收到“UP-key- release ”信号,它把标志设置回“false”。
并且“游戏循环”不断检查该标志,如果是真的,它会向前移动相机,否则它什么也不做。

所以我想在“Gtkmm”中使用相同的技术。所以我只是覆盖了我的"Gtk::DrawingArea"的这些功能:

但问题在于:例如,当我按下“UP”键并按住 5 秒钟时,会发出以下信号序列:

当我在“在 Linux 上”运行我的游戏时,会出现之前的情况。

当我“在 Windows 上”时,它就像我想要的那样,因此:

所以这似乎是在 Gtkmm 中移动相机的“非便携式”解决方案。

那么是否有任何其他(“PORTABLE”)解决方案可以使用 Gtkmm 作为窗口管理器来实现相机移动?

0 投票
1 回答
621 浏览

unit-testing - QT:何时使用 QT::keyRelease

我正在编写一个测试应用程序,用一堆菜单测试另一个应用程序。我使用 QT::keyPress 来模拟 keyPresses。但是,在某些时候它不再接受 keyPresses,直到我了解到您也需要使用 keyRelease (根据对我来说有点模糊的文档,它说“注意:在某些时候您应该使用keyRelease()。” --- 但是什么时候?在每次按键之后?)

在每个 keyPress 之后调用 keyRelease 也会模拟 keyPress,这很奇怪。在第一次调用 keyPress 后调用 keyRelease 一次,使其余的 keyPresses 工作,其余的 keyPresses 不起作用。

我很困惑。有人能告诉我什么时候使用 keyRelease 合适吗?

0 投票
1 回答
1552 浏览

ruby - 一个 Ruby 模块来模拟按键和按键释放事件?

我想创建一个模拟各种用户的应用程序,但我需要这个“幽灵”用户在键盘上键入,如何在 Ruby 上模拟按键和 keyrealease 事件?

0 投票
4 回答
6006 浏览

python - 监听键盘事件而不捕获它们?

我正在编写一个命令行应用程序,它在 X Windows 中侦听 Control 键释放事件,并在检测到它们时提醒另一个进程。

作为 GNU/Linux 的新手,我宁愿避免摸索 GCC,因此我正在寻找基于脚本的解决方案。由于我对 Python 有所了解,因此选择基于 Python 的解决方案似乎很自然,并且在搜索 Internet 以获取示例并阅读 Python Xlib 文档之后,我整理了这个可行的程序,但有一个警告:它陷阱事件而不是仅仅监听它们(我的意思是这些事件不再传递给它们最初被定向到的应用程序)。

我通过运行“xev”找到了控制键代码。由于我重新映射了修饰键,因此在您的系统上它们可能会有所不同。

为了简单起见,我省略了处理外部进程的代码。

谢谢您的帮助。

软件:

  • Python 2.7.2

  • Python Xlib 0.15 RC1

  • Perl v5.10.1

  • Debian GNU/Linux 版本:6.0.3

  • 内核版本:Linux debian 2.6.32-5-686

编辑:我无法弄清楚的是键盘事件不会被捕获,除非它们被处理(在我的程序中,这意味着'print“KeyRelease”'行被执行)。因为在我的代码中我没有在 Xlib 或事件对象上调用任何方法,所以我不明白处理的区别在哪里。

EDIT2:除了使用 Xlib 之外,也欢迎提出关于替代解决方案的建议。

EDIT3:我也知道 Perl,也欢迎有关 Perl 库的建议,只要它们不需要最新版本的系统库,因为 Debian 在其存储库中可用的包和编译方面落后是出了名的落后如果它们有很多依赖项,那么安装最新版本的库可能会很困难(我尝试安装 PyGTK,但在未能引用我安装的最新 GLib 后放弃了)。

0 投票
3 回答
5097 浏览

java - 处理多次按键忽略重复键

我在另一个问题的评论部分提出了这个问题(>如何在 Java 中处理同时按下的按键?),并被要求完全提出一个新问题。

我的问题是,当我创建按键的 ArrayList 时,如果用户按住按键,它们不会通过 keyReleased 事件足够快地删除。我希望运动与“asdf”和北,东,南,西,东北......等一起。

这是我的两个事件的代码:

直到我通过 lastKey(String) 变量在那里添加第二次检查,金字塔创建的规模是巨大的。即使进行第二次检查,列表也会增加,并且几乎总是有两到三个重复项。由于我的角色笨拙地移动,因此对此的任何帮助都会很棒。:(

此外,任何删除对 char、string、arrayList 的重复转换的方法都会很棒,因为我很紧张我为“简单”的东西使用了太多类型。

0 投票
0 回答
122 浏览

java - Java Applet 强制密钥释放

我有一个游戏,当游戏结束时会显示“游戏结束”屏幕。为了从游戏结束屏幕开始新游戏,提示用户按空格键。在我的游戏中,用户按下(并且可以按住)空格键来执行攻击。在我的线程中,如果(以及何时)用户或 AI 的健康减少到/或低于零,则显示游戏结束屏幕。因此,很有可能当空格键上的游戏结束时,游戏结束时屏幕会闪烁一秒钟,然后游戏开始(为了使事情更流畅,而不是我正在使用的传统 keyPress 语句影响运行 repaint() 函数的线程的布尔值)。我的问题是我需要输入什么语法或命令来“模仿”正在释放的屏幕?

0 投票
1 回答
3453 浏览

python - PyQt4 - 按住一个被检测为频繁按下和释放的键?

当 QApplication 处理关键事件时,我注意到一些不寻常的行为,这危及了我希望制作的小游戏。

按住一个键会导致keyPressEventthenkeyReleaseEvent方法被重复(并且非常频繁地)调用,而不是触发keyPressEvent一次并等待键被释放以触发另一个键(这是期望的和公认的预期行为)。

这会导致巨大的性能问题,以至于按住多个键会导致程序完全忽略某些键,这可能是因为事件队列正在遭受损失。

该程序演示了重复调用:

这个程序(我用来测试 Qt 游戏潜力的一个愚蠢的图形工具)演示了在按住现有键时忽略新按下的键。

通过运行上述程序可以观察到,按住超过 3 或 4 个键将导致不会建立新的尖峰,直到释放当前持有的键。

我怎样才能防止这种行为,例如keyPressEvent只为尚未物理释放的密钥触发一次?

0 投票
1 回答
1548 浏览

java - JComboBox KeyReleased 事件不起作用

我正在使用 aJComboBox从 sql DB 中搜索查询。我想在输入字母时搜索查询。我正在使用网豆 IDE。这是自动代码。

但什么也没有发生。我起诉搜索代码没有错误。请给我代码来执行此操作,而无需来自 IDE 的自动代码。的名字JComboBoxsrch。组合框可编辑=true。谢谢你。

0 投票
3 回答
1265 浏览

javascript - 如何在密钥释放时更改图像

我正在使用 HTML5 画布和 javascript 开发一个小游戏。现在我想做的是让图像从左向右移动,当按下一个键时,它会改变图像以使其看起来更像是在移动。

现在我开始工作了,但我有点卡住了。代码是,当您按下左键时,他将 player.image 更改为 player.imgLeft 并在释放时将其更改回正常图像。

压制有效,但释放无效..我做错了什么?

简而言之,这是代码