gpt4 book ai didi

java - 在 Swing 中禁用按键重复

转载 作者:行者123 更新时间:2023-11-30 08:01:33 25 4
gpt4 key购买 nike

我正在开发一个 Java/Swing 应用程序,我正在使用 JFrame 上的 KeyListener 自行处理关键事件。

我的问题是,当我按住一个键时,操作系统的按键重复功能导致多个 keyPressed 事件发生,而我只想接收一个。

一种解决方案是将键的状态保存在一个数组中,并且仅在状态发生变化时才接受事件。

private boolean keysDown[] = new boolean[0x10000];
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (0 <= key && key <= 0xFFFF) {
if (keysDown[key]) return;
keysDown[key] = true;
}
// ...
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (0 <= key && key <= 0xFFFF) {
if (!keysDown[key]) return;
keysDown[key] = false;
}
// ...
}

这行得通,但非常笨拙,虽然我似乎只能找到 0 到 216-1 范围内的键码,但我不确定是否可以存在超出该范围的键码。 (getKeyCode() 返回 int。)另一个问题是按下一个键,在另一个窗口中释放它,然后在我的应用程序中再次按下它不会注册事件.

那么,有没有更好的办法呢

  • 在我的应用程序中禁用按键重复或
  • 可靠地检测重复事件?

最佳答案

将 boolean 数组替换为 HashSet<Integer>TreeSet<Integer> .按键重复是操作系统的一项功能,因此无法禁用它,只能考虑它。

关于java - 在 Swing 中禁用按键重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490551/

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