JPanel中的Java swing快捷键/键绑定

时间:2013-05-02 23:26:14

标签: java swing keyboard

我有一个包含大量组件的JPanel。当用户按下“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);
            }
        });

1 个答案:

答案 0 :(得分:2)

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

您正在侦听keyPressed事件。文本组件侦听keyTyped事件。这就是为什么两个绑定仍然有效。尝试:

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