我按ESC时尝试关闭对话框,按ENTER时尝试接受。 所以我使用Input / ActionMap构建了一个超类“CloseableDialog”,如下所示:
getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "accept");
getRootPane().getActionMap().put("accept", acceptAction);
getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel");
getRootPane().getActionMap().put("cancel", cancelAction);
现在我构建了几个扩展CloseableDialog的Dialog。它在第一时间工作(按ESC时关闭,按ENTER时接受),但是当我打开SubDialog(对话框中的对话框)时,只有按下ESC才能关闭Subdialog(ESC - > SubDialog关闭,其他Dialog Visible - > ESC->没有发生。)
有什么想法吗?
我认为,被放弃的SubDialog仍然是另一个Dialog的输入,但我不确定。
答案 0 :(得分:0)
当组件聚焦时,shorcuts工作。我认为焦点不在您之前打开的窗口中。尝试将焦点恢复到需要快捷方式才能正常工作的窗口。尝试克隆该窗口并应用快捷方式。也许它会起作用。否则你必须处理get focus to the window
答案 1 :(得分:0)
我知道了!
阅读http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html告诉我,有三个InputMaps:
通过调用getRootPane.getInputMap(),我得到了“默认”WHEN_FOCUSED输入映射, 但是通过调用Subdialog,rootPane似乎失去了焦点而没有任何帮助 让焦点回来。
现在我正在使用getRootPane()。getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(...) 它的工作原理。
我有点惊讶,它在打开Subdialog之前一直有效。