Java 在帧内捕捉按键
这似乎是一个简单的行为,但我很难做到这一点。我正在开发一个可以绘制数据的软件。我想在用户点击enter键时重新绘制图形。更准确地说,我想在用户点击enter并且没有选择文本字段时绘制图形;但现在,只要用户点击回车键,我就会对绘图感到满意 我试着先在框架上安装一个基本的Java 在帧内捕捉按键,java,swing,user-interface,key-bindings,keylistener,Java,Swing,User Interface,Key Bindings,Keylistener,这似乎是一个简单的行为,但我很难做到这一点。我正在开发一个可以绘制数据的软件。我想在用户点击enter键时重新绘制图形。更准确地说,我想在用户点击enter并且没有选择文本字段时绘制图形;但现在,只要用户点击回车键,我就会对绘图感到满意 我试着先在框架上安装一个基本的keylister,但这不起作用,因为接收事件的是JFrame子对象,而不是框架 然后我尝试使用KeyEventDispatcher,但事实证明这是一个过于全局的概念。我可以同时在屏幕上显示两个图形,一个旧图形可以关闭或替换为一个新
keylister
,但这不起作用,因为接收事件的是JFrame
子对象,而不是框架
然后我尝试使用KeyEventDispatcher
,但事实证明这是一个过于全局的概念。我可以同时在屏幕上显示两个图形,一个旧图形可以关闭或替换为一个新图形。使用KeyEventDispatcher
我无法简单地知道我想在一次打开的多个绘图中激活哪个绘图,而当前打开的绘图可能不是我实例化key dispatcher时打开的绘图。我知道这个解决方案仍然可以工作,但它需要我存储额外的数据,以确定哪些绘图当前处于活动状态,而这些绘图不适合程序体系结构
似乎应该有一种更简单的方法来捕获分派给
JFrame/JPanel
或JFrame的任何子对象的KeyEvents
;但忽略发送到其他帧的事件。优选地,提供一种方法,该方法可以被添加到帧中,从而在帧被布置时被自动布置。有谁能推荐一种比我尝试过的更简单的方法吗?不要使用键盘监听器
将a添加到图形面板。这非常有效
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();
}
}
});
非常感谢。我知道必须有一个更简单的方法,但我似乎不能靠自己偶然发现它。