JPanel 中的 java swing 快捷键/键绑定(bind)

标签 java swing keyboard

我有一个 JPanel,里面有很多组件。当用户按下“a”时,我想做点什么并使用“a”,除非用户在文本框(或接受“a”的屏幕的其他部分)中——在那种情况下,我不这样做我不想知道“a”。

在下面的代码中,我收到了“a”的通知,即使焦点在文本框上(在文本框中键入“a”时会将“a”放入文本框中,并且还会通知我“a").

        JComponent jc = the panel...;
        InputMap inputMap = jc.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        ActionMap actionMap = jc.getActionMap();
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "qcAccept");
        actionMap.put("qcAccept", new AbstractAction("qcAccept") {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("A pressed, " + e);
            }
        });

最佳答案

inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "qcAccept");

您正在监听 keyPressed 事件。文本组件监听 keyTyped 事件。这就是为什么两个绑定(bind)仍然有效的原因。尝试:

inputMap.put(KeyStroke.getKeyStroke("typed a"), "qcAccept");

关于JPanel 中的 java swing 快捷键/键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349345/

相关文章:

python - 使用ctypes函数在python中绑定(bind)键事件

java - 当键盘出现时屏幕没有向上滚动

java - 当我按下 1 个按钮时,我希望所有其他按钮都改变状态

swing - Clojure:窗口框架关闭时退出程序

ios - 自定义键盘文本完全替换 UISearchBar 中的文本而不是添加到它 [iOS]

java - 在java中以正确的方式声明单例,并正确初始化私有(private)哈希表

java - 创建两个实现相同接口(interface)的 bean

java - 前导零如何更改 Java 中的数字文字?

java - 当其他 fragment 更改第一个 fragment 模型时刷新 fragment

java - 无法将现有的 GUI 放入可调整大小的 JFrame 中的 JPanel 中?