2013-04-18 32 views
1

我试图在按ESC键时接受对话框并按ENTER键接受。 所以我必须建立一个超“CloseableDialog”使用输入/ ActionMap中是这样的:打开子对话框后InputMap/ActionMap不起作用

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几个对话框。它的工作原理与第一次一样(按ESC时接受,按ENTER时接受),但是当我打开一个子对话框(对话框中的对话框)时,只有子对话框可以通过按ESC键关闭(ESC - >子对话框关闭,其他对话框可见 - ESC->没有发生)。

任何想法?

我认为,diposed SubDialog仍然是其他对话框的输入,但我不确定。

回答

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 Inputmap, ,但通过调用一个Subpialog的rootPane似乎l所有的焦点都没有帮助 让焦点回来。

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

我有点惊讶,它已经工作过,直到打开一个Subdialog。

0

的shorcuts工作当这些部件被集中。我觉得重点不是有你先前打开window.Try获取焦点回到你所需要的快捷方式上进行工作fine.Try cliking窗口窗口并应用快捷方式。也许它会工作。否则你必须处理get focus to the window

+0

我忘了提及:关闭子对话框后,单击对话框也不起作用。我试图通过requestFocus()将焦点设置到对话框,但它不起作用。 – user2212120