这似乎是一种简单的行为,但我很难实现它。我正在研究绘制数据图表的软件。我想在用户点击进入时重绘图表。更确切地说,当用户点击进入并且没有选择文本字段时,我想绘制图形;但是现在,只要用户点击进入,我就会对绘图感到满意。
我首先尝试在框架中安装基本KeyListener
,但这不起作用,因为JFrame
子项而不是框架会收到该事件。
然后我尝试使用KeyEventDispatcher
,但它证明了全球性的概念。我可以同时在屏幕上显示两个图表,可以关闭旧图表或用新图表替换旧图表。使用KeyEventDispatcher
我没有简单的方法可以知道我想要激活多个绘图中的哪个绘图,而现在打开的绘图可能不是我实例化密钥调度程序时打开的绘图。我知道这个解决方案仍然可以工作,但它需要我存储额外的数据,以确定当前活动的情节不适合程序架构。
似乎应该有一种更简单的方法来捕获派遣到KeyEvents
或JFrame/JPanel
个孩子的任何JFrame's
;但忽略调度到其他帧的事件。优选的是可以添加到框架中并因此在框架被布置时自动设置的方法。任何人都可以建议一种更简单的方法然后我尝试过吗?
答案 0 :(得分:2)
不要使用KeyListener。
在图表面板中添加Key Binding。
答案 1 :(得分:0)
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();
}
}
});