1
我正在開發一個Java/Swing應用程序,我正在使用我的JFrame
上的KeyListener
來處理重要事件。在Swing中禁用密鑰重複
我的問題是,當我按住一個鍵時,操作系統的鍵重複功能導致多個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〜2 -1,我不知道是否可以存在超出這個範圍的。 (getKeyCode()
返回int
。)另一個問題是,按下某個鍵,在另一個窗口中釋放它,然後在我的應用程序中再次按下它將不會註冊該事件。
那麼,有沒有更好的辦法來無論是在我的應用程序
- 禁用鍵重複或
- 檢測重複可靠的事件?
用'HashSet'或'TreeSet '替換你的布爾數組。關鍵重複是操作系統的功能,所以無法禁用它,只能解決它。 –
VGR
@VGR我最終這樣做了,用'WindowFocusListener'來清除失去焦點時按下的按鍵。作爲回答,我會繼續接受它。 – Pietu1998