2012-12-20 42 views
0

我瞭解如何使用帶鍵綁定的修改器,如CTRL_DOWN_MASK + some key,但我希望能夠將特定動作綁定到控件時,某個字母(即'W' )和向上箭頭都被按下。像CTRL_DOWN_MASK + some key + Up Arrow使用鍵綁定將動作綁定到3個或更多鍵的組合

我會用它來改變某個聲音片段的音量。所以當我有CTRL_DOWN_MASK + W + Up Arrow所有按下的音量將增加分配給W JButton的聲音片段,如果我有CTRL_DOWN_MASK + W + Down Arrow音量將減少所述聲音片段。

public void bindKey(JPanel base) 
    { 

     base.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key, InputEvent.CTRL_DOWN_MASK),"Volume"+key); 
     base.getActionMap().put("Volume"+key, new AbstractAction(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       //if(Up Arrow is being pressed.) 
       setGain(currentGain() + 1.0f); 

       //if(Down Arrow is being pressed.) 
       setGain(currentGain() - 1.0f); 
      } 
     }); 
    } 
+0

你有[自己做邏輯](http://stackoverflow.com/a/13440608/203657) – kleopatra

+0

謝謝@kleopatra我會檢查出來。 – Alex

+0

@kleopatra隨着你在這篇文章中的回答,你將如何將它實現到現有的動作地圖中。我不明白你在擴展你創建的AbstractAction以及你如何爲鍵A + S + D的映射指定一個動作時所做的事情。 – Alex

回答

3

你需要更多的手......我認爲這就是爲什麼他們將其限制爲修飾符和主鍵。你有沒有考慮ctrl + w啓動界面,然後按向上或向下調整音量?

您的其他選項是在ctrl + w和ctrl +向上鍵上映射鍵綁定。然後,無論何時他們都活躍,請執行您的操作。你需要設置標誌並有兩個映射 - 一個用於按下,一個用於釋放。您可以看到Keystroke class瞭解更多關於設置映射關鍵的細節。

+0

那麼我確實有2隻手,所以按Crtl + W和然後用另一隻手向上或向下箭頭。但是,謝謝你的建議,我會嘗試添加這些映射,看看我能做些什麼。 – Alex

+0

當你說設置標誌,你是什麼意思? – Alex

+0

@Alex是的 - 你說得對,這是可行的。它通常不那麼方便(這通常是綁定的目標) - 這可能是爲什麼它沒有構建它。 當我說標誌,我的意思是布爾變量告訴你如果和事件發生。所以你有兩個ctrl + w事件(一個用於按下,另一個用於釋放)會設置一個布爾變量來指示它被按下。上下會有他們自己的事件,首先檢查標誌 - 如果標誌設置(真),它會繼續調整音量。否則,它什麼都不做。 –