2012-10-24 55 views
-1

我正在試圖在面板上實現鍵綁定,該面板會聽取是否按下箭頭鍵。鍵綁定不起作用Java Swing

如果他們被按下,他們會採取行動。 我的代碼:

private void createKeyBindings(){ 
     actionMap = this.getActionMap(); 
     inputMap = this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
     this.getInputMap().put(KeyStroke.getKeyStroke("a"), 
       "pressedUpArrow"); 
     this.getInputMap().put(KeyStroke.getKeyStroke("released UP"), 
       "releasedUpArrow"); 
     this.getActionMap().put("pressedUpArrow", 
       new PressedUpArrowAction()); 
     this.getActionMap().put("releasedUpArrow", 
       new ReleasedUpArrowAction()); 
    } 

的行動工作(當我將它們映射到一個按鈕,按下按鈕,它做什麼動作是應該做的)。

這些鍵綁定被稱爲我的面板(這是一個tabbedpane中的選項卡)。我試着用擊鍵向上和只是一個(以確保這不是問題)。 當問題標籤處於焦點時,我鍵入這些鍵。

有什麼建議嗎?

+2

請在哪裏輸出到GUI,以便更好地幫助發佈[SSCCE](http://sscce.org/) – mKorbel

+2

除了@Stephen的回答 - 在上面的代碼片段中,您正在註冊擊鍵錯誤的inputMap:替換this.getInputMap()。put(..)with inputMap.put(...) – kleopatra

+0

謝謝,修正了,但它沒有解決它。 GUI沒有任何輸出。 PressedUpArrowAction即刻打印一條錯誤消息。該行動的作品,因爲當我將它綁定到一個鍵(使用setAction)它按下時工作。 – Sven

回答

3

你的問題的一個可能的原因是:

this.getInputMap().put(KeyStroke.getKeyStroke("a"), 
      "pressedUpArrow"); 

它不應該是這樣?

this.getInputMap().put(KeyStroke.getKeyStroke("UP"), 
      "pressedUpArrow"); 

,你已經當前已編碼的方式,將PressedUpArrowAction()ReleasedUpArrowAction()火一個鍵的按下和不同的密鑰的釋放。

+0

是的,如果不是濫用Up鍵的原因,那麼a僅用於測試。 – Sven