Java - 密钥绑定不起作用

时间:2014-04-20 18:26:20

标签: java swing key-bindings

我尝试这个简单的代码,而System.out.println在未按下缩放按钮时有效。但按下缩放按钮后System.out.println不起作用。为什么呢?

    zoomFree.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            isZoomFree = true;
            chartPanel.setDomainZoomable(true);
            chartPanel.setRangeZoomable(true);
            zoomIn.setEnabled(false);
            zoomFree.setEnabled(false);
        }
    });

    Action escapeZoom = new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("ESCAPE pressed! yahoo!");
        }
    };

    panel.getInputMap().put(KeyStroke.getKeyStroke("ESCAPE"), "escape pressed");
    panel.getActionMap().put("escape pressed", escapeZoom);

1 个答案:

答案 0 :(得分:3)

当您不向getInputMap方法传递任何参数时,只有在关注组件时,您的键绑定才会起作用。

请尝试使用getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)

panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "escape pressed");
panel.getActionMap().put("escape pressed", escapeZoom);

这样组件不需要具有焦点,当窗口具有焦点时它们将起作用