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

Posted

技术标签:

【中文标题】使用键绑定将操作绑定到 3 个或更多键的组合【英文标题】:Bind an action to a combination of 3 or more keys using Key Bindings 【发布时间】:2012-12-20 19:14:47 【问题描述】:

我了解如何将修饰符与 CTRL_DOWN_MASK + some key 之类的键绑定一起使用,但我希望能够将特定操作绑定到当 Control、某个字母(即“W”)和向上箭头都被按下时。像CTRL_DOWN_MASK + some key + Up Arrow 这样的东西。

我会用它来改变某个声音片段的音量。因此,当我按下 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);
            
        );
     

【问题讨论】:

你有to do logic yourself 谢谢@kleopatra,我会检查一下。 @kleopatra 有了您在那篇文章中的回答,您将如何将其实施到现有的行动地图中。我不明白您在扩展您创建的 AbstractAction 以及如何将操作分配给键 A + S + D 的映射。 【参考方案1】:

你需要更多的手...我认为这就是他们将其限制为修饰符和主键的原因。您是否考虑过 ctrl+w 启动界面,然后您可以向上或向下调整音量?

您的另一个选择是在 ctrl+w 和 ctrl+up 键上映射键绑定。然后,只要它们都处于活动状态,请执行您的操作。您需要设置标志并有两个映射 - 一个用于按下,一个用于释放。您可以查看Keystroke class,了解有关设置映射键的更多详细信息。

【讨论】:

好吧,我确实有两只手,所以用我的另一只手按 Crtl + W 然后向上或向下箭头是可行的。但是谢谢你的建议,我会尝试添加这两个映射,看看我能做什么。 当你说设置标志时,你是什么意思? @Alex 是的 - 你说得对,它是可行的。它通常不那么方便(这通常是绑定的目标) - 这可能就是它没有构建它的原因。当我说标志时,我的意思是布尔变量,它告诉您是否发生了事件。因此,您有两个 ctrl+w 事件(一个用于按下,一个用于释放)将设置一个布尔变量,指示它被按下。 Up 和 down 将有自己的事件首先检查标志 - 如果标志设置 (true),它会继续调整音量。否则它什么也不做。

以上是关于使用键绑定将操作绑定到 3 个或更多键的组合的主要内容,如果未能解决你的问题,请参考以下文章

javascript和绑定键的问题

D3.js 将对象绑定到数据并为每个键附加

Sublime Keymap 设置

具有多个路由键的Spring引导流绑定队列

使用查找组合框 c# 绑定 Datagridview 多列排序

如何在不使用 datagridview 的情况下编辑绑定到组合框的数据表中的数据?