键绑定中的修饰符(SHIFT +(随机键))

Posted

技术标签:

【中文标题】键绑定中的修饰符(SHIFT +(随机键))【英文标题】:Modifiers (SHIFT + (Random Key)) in Key Binding 【发布时间】:2012-12-05 19:16:25 【问题描述】:

如何更改输入/操作映射,以便当我将操作绑定到特定键时,它也会将操作绑定到 Some Modifier + 特定键?

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 给 ALJI Mohamed。请read this 修复它,并解决了我的问题。我将发布我是如何解决的,供其他人查看。 @Alex 你能把你的答案作为答案而不是在问题的底部发布吗? 使用来自KeyEvent的虚拟键值而不是绝对数值,这样可以防止分配发生变化时出现问题 【参考方案1】:

已修复:更改为 (char)(key-32),以便将其分配给 小写字符,因为当我设置 'W' 而不是 'w' 使用了 shift 修饰符。

【讨论】:

@Alex hmm .. 考虑小写/大写在 keyBindings 中的范围有点偏离:它始终是单键加(可选)a-修饰符。该组合如何/是否映射到 keyChar 无关紧要。所以,如果这是“解决方案”,那么设置中的某些东西闻起来很腥:-) 你是/如何获得 key 的? @kleopatra 我正在从我单击的最后一个按钮获取文本中获取密钥。所以keyboardBtns[i].getText().charAt(0),它可能效率不高,但我只是想得到一个工作原型,我可以回去做更高效/更合乎逻辑的原型。

以上是关于键绑定中的修饰符(SHIFT +(随机键))的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 WPF 中的修饰键状态?

XCTest - 如何使用 Command 和 Shift 创建多个键修饰符标志?

检测 UIKit for Mac (Catalyst) 中的单个修饰符键更改

vue-learning:8-template-v-on-and-modifier

vue中的按键修饰符

Vue3 中的模板语法