Java 使用键绑定将操作绑定到3个或更多键的组合

Java 使用键绑定将操作绑定到3个或更多键的组合,java,swing,key-bindings,modifiers,Java,Swing,Key Bindings,Modifiers,我知道如何使用带有键绑定的修饰符,比如CTRL\u DOWN\u MASK+some Key,但我希望能够在按下控件、某些字母(即“W”)和向上箭头时将特定动作绑定到。类似于CTRL\u DOWN\u MASK+some key+Up Arrow 我会用这个来改变某个声音片段的音量。因此,当我按下CTRL\u DOWN\u MASK+W+Up Arrow时,分配给W按钮的声音剪辑的音量将增大,如果我按下CTRL\u DOWN\u MASK+W+DOWN Arrow时,所述声音剪辑的音量将减小

我知道如何使用带有键绑定的修饰符,比如
CTRL\u DOWN\u MASK+some Key
,但我希望能够在按下控件、某些字母(即“W”)和向上箭头时将特定动作绑定到。类似于
CTRL\u DOWN\u MASK+some key+Up Arrow

我会用这个来改变某个声音片段的音量。因此,当我按下
CTRL\u DOWN\u MASK+W+Up Arrow
时,分配给W按钮的声音剪辑的音量将增大,如果我按下
CTRL\u DOWN\u 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);
            }
        });
     }

你需要更多的人手。。。我想这就是为什么他们把它限制在修改器和主键上。您是否考虑过ctrl+w启动界面,然后按向上或向下调整音量


另一个选项是在ctrl+w和ctrl+up键上映射键绑定。然后,无论何时他们都很活跃,都要采取行动。您需要设置标志并有两个映射—一个用于按下,另一个用于释放。有关设置映射键的更多详细信息,请参见。

您需要更多人手。。。我想这就是为什么他们把它限制在修改器和主键上。您是否考虑过ctrl+w启动界面,然后按向上或向下调整音量


另一个选项是在ctrl+w和ctrl+up键上映射键绑定。然后,无论何时他们都很活跃,都要采取行动。您需要设置标志并有两个映射—一个用于按下,另一个用于释放。有关设置映射键的更多详细信息,请参见。

谢谢@kleopatra,我会检查。@kleopatra在那篇文章中给出了答案,您将如何在现有的操作映射中实现这一点。我不明白你在扩展你创建的AbstractAction时做了什么,以及你是如何将一个操作分配给A+S+D键的映射的。谢谢你@kleopatra我会查出来的。@kleopatra在那篇文章中给出了答案,你将如何在现有的操作映射中实现它。我不明白你在扩展你创建的AbstractAction时做了什么,以及你是如何将一个动作分配给A+S+D键的映射的。我有两只手,所以用另一只手按Crtl+W,然后向上或向下箭头是可行的。但是谢谢你的建议,我会尝试添加这两个映射,看看我能做些什么。当你说设置标志时,你是什么意思?@Alex是的-你完全正确,这是可行的。它通常不那么方便(这通常是绑定的目标)——这可能就是为什么不构建它的原因。当我说标志时,我指的是布尔变量,它告诉你们是否和事件发生了。因此,ctrl+w有两个事件(一个用于按下,一个用于释放)将设置一个布尔变量,指示它被按下。“向上”和“向下”将有自己的事件,首先检查该标志-如果该标志已设置(true),它将继续调整音量。我有两只手,所以可以用另一只手按下Crtl+W,然后向上或向下箭头。但是谢谢你的建议,我会尝试添加这两个映射,看看我能做些什么。当你说设置标志时,你是什么意思?@Alex是的-你完全正确,这是可行的。它通常不那么方便(这通常是绑定的目标)——这可能就是为什么不构建它的原因。当我说标志时,我指的是布尔变量,它告诉你们是否和事件发生了。因此,ctrl+w有两个事件(一个用于按下,一个用于释放)将设置一个布尔变量,指示它被按下。“向上”和“向下”将有自己的事件,首先检查该标志-如果该标志已设置(true),它将继续调整音量。否则它什么也不做。