这看起来是一个简单的行为,但我很难实现。我正在开发绘制数据图的软件。我想在用户点击回车键时重新绘制图形。更准确地说,我想在用户点击回车并且没有选择文本字段时绘制图形;但现在,只要用户点击回车键,我就会对绘图感到满意。
我尝试先在框架中安装一个基本的KeyListener
,但这不起作用,因为接收事件的是JFrame
子级,而不是框架。
然后我尝试使用KeyEventDispatcher
,但事实证明它是一个过于全局的概念。我可以同时在屏幕上显示两个图,并且可以关闭旧图或用新图替换旧图。使用KeyEventDispatcher
,我无法简单地知道我想在一次打开的多个图中激活哪个图,并且当前打开的图可能不是我实例化密钥分配器时打开的图。我知道这个解决方案仍然可以工作,但它需要我存储额外的数据,以了解当前活动的绘图不适合程序体系结构。
似乎应该有一种更容易的方法来捕获分派给JFrame/JPanel
或任何JFrame's
子代的任何KeyEvents
;但忽略分派到其他帧的事件。优选的是一种可以添加到框架并因此在设置框架时自动设置的方法。有人能提出一个比我尝试过的更简单的方法吗?
不要使用KeyListener。
将键绑定添加到图形面板。
This works very well
this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "fecharAction");
this.getRootPane().getActionMap().put("fecharAction", new AbstractAction() {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
int resp = JOptionPane.showConfirmDialog(MainForm.this, "Encerrar sistema?", "Confirmação", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (resp == 0) {
MainForm.this.setVisible(false);
MainForm.this.dispose();
}
}
});