2012-12-05 75 views
1

如何修改輸入/動作映射,以便當我將動作綁定到特定鍵時,它還會綁定動作到某些修飾符 +特定鍵?鍵綁定中的修飾符(SHIFT +(隨機鍵))

SHIFT_DOWN_MASK + specific key

所以我所有的鍵綁定的工作,沒有修飾。我將一個聲音文件分配給鍵盤上的某個字母,當我按下該鍵時,聲音文件將播放。我也有代碼來循環聲音文件,切換是否循環,並檢查它是否循環。我想要這樣做,除了將play()操作綁定到密鑰外,它還會將toggleLoop()操作綁定到操作SHIFT_DOWN_MASK + specific key

我在哪裏綁定動作:

@SuppressWarnings("serial") 
    public void bindKey(JPanel base) 
    { 
     base.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key),"play"+key); 
     base.getActionMap().put("play"+key, new AbstractAction(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       System.out.println(key + " Pressed"); 
       play(); 

      } 
     }); 

     //assigning action just the key pressed 

     base.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke((char)(key-32), InputEvent.SHIFT_DOWN_MASK),"loop"+(char)(key-32)); 
     base.getActionMap().put("loop"+(char)(key-32), new AbstractAction(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       System.out.println(key + " toggled loop"); 
       toggleLoop(); 
       //fix toggle 

      } 
     }); 

     //^ where I try to assign action to modifier 



    } 
+1

只分享你的代碼的相關問題部分...不是所有的類:) – 2012-12-05 19:22:41

+0

+1給ALJI Mohamed。請[閱讀此](http://sscce.org) – durron597

+0

修復它,並解決我的問題反正。我會發布我是如何解決它爲其他人尋找。 – Alex

回答

1

FIXED:改到(焦炭)(鍵32),所以這將其分配到 小寫字母,因爲它被設置「W」,而不是'w'當我 使用換擋修改器。

+1

@Alex hmm ..考慮在lower/uppercase是一個關閉範圍內的keyBindings:它總是一個單一的加鍵(可選)a修飾符。如何/如果該組合映射到keyChar是無關緊要的。所以,如果這是「解決方案」,那麼設置中的某些東西就會有腥味:-)是/你是如何得到_key_的? – kleopatra

+0

@kleopatra我得到最後一個按鈕的按鍵,我點擊了獲取文本。所以keyboardBtns [i] .getText()。charAt(0),它可能不是非常有效,但我只是試圖找到一個工作原型,我可以回去做出更高效/更合乎邏輯的原型。 – Alex