打开SubDialog后,InputMap / ActionMap不起作用

时间:2013-04-18 09:24:06

标签: java dialog keystroke

我按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的输入,但我不确定。

2 个答案:

答案 0 :(得分:0)

当组件聚焦时,shorcuts工作。我认为焦点不在您之前打开的窗口中。尝试将焦点恢复到需要快捷方式才能正常工作的窗口。尝试克隆该窗口并应用快捷方式。也许它会起作用。否则你必须处理get focus to the window

答案 1 :(得分:0)

我知道了!

阅读http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html告诉我,有三个InputMaps:

  • JComponent.WHEN_FOCUSED
  • JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • JComponent.WHEN_IN_FOCUSED_WINDOW

通过调用getRootPane.getInputMap(),我得到了“默认”WHEN_FOCUSED输入映射, 但是通过调用Subdialog,rootPane似乎失去了焦点而没有任何帮助 让焦点回来。

现在我正在使用getRootPane()。getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(...) 它的工作原理。

我有点惊讶,它在打开Subdialog之前一直有效。