2012-12-20 40 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事件(一个用于按下,另一个用于释放)会设置一个布尔变量来指示它被按下。上下会有他们自己的事件,首先检查标志 - 如果标志设置(真),它会继续调整音量。否则,它什么都不做。 –