我尝试这个简单的代码,而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);
答案 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);
这样组件不需要具有焦点,当窗口具有焦点时它们将起作用