2008-12-30 104 views
5

什麼是F1和CTRL F1 SHIFT之間即 + 各自分離的正確方法 - 背後即一個JButton註冊的KeyListener的內CTRL F1 + 的Java:處理合並鍵盤輸入

public void keyPressed(KeyEvent event) { 
    int key = event.getKeyCode(); 

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")"); 
} 

..總是給我112 F1,113 F2等。我明白,我可以通過採取的keyPressed()爲各自的的keyReleased小心處理它CTRL/SHIFT/ALT /等我自己,但我希望有一個更好的辦法。

很多很多感謝!

+0

@ThomasAbraham請停止關注單個編輯任務 - 這個問題還有很多可以做的事情(標題中的標籤,最後感謝關鍵字可能會突出顯示),任何編輯都應該試圖修復它的所有*,而不僅僅是一件事。 =) – 2013-01-15 08:10:52

回答

4

解決辦法在於KeyEvent的(InputEvent的)的父

  1. 使用isAltDown,isControlDown,isShiftDown方法或
  2. 使用getModifiers方法
+0

非常感謝,那正是我一直在尋找的! – MrG 2008-12-30 18:20:44

0

顯然,每當某個鍵被關閉時,就會調用關鍵事件。 它不是一個多鍵按下事件,並沒有這樣的事情,所以沒有多個鍵被關閉的鍵碼。

你只需要使用一個變量來跟蹤被按下的crtl鍵。這意味着你也將不得不使用鍵盤事件來跟蹤控制鍵何時被釋放。

在pusedo代碼:

 
// CRTLKeyCode is whatever the code is for the ctrl key 
private boolean ctrlPressed = false; 

onKeyDown(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = true; 
    else if(ctrlPressed && key == 112) 
     //Perform your action 
} 
onKeyUp(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = false; 
} 
+0

非常感謝,但我認爲按照Midhat/bcash的建議,使用isXxxDown()根據需要獲取狀態要容易得多,以便自行管理狀態。 – MrG 2009-01-01 11:02:09

1

KeyEvent s的一個Swing控件打交道時,可能是有點低的水平。相反,請通過InputMapActionMap