1

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 を拡張するいくつかのダイアログを作成しました。最初はアスペクトとして機能します(ESCを押すと閉じ、ENTERを押すと受け入れます)が、サブダイアログ(ダイアログ内のダイアログ)を開いたとき、ESCを押すとサブダイアログのみを閉じることができました(ESC->サブダイアログが閉じ、他のダイアログが表示されます-> ESC-> 何も起こりません)。

何か案は?

破棄された SubDialog はまだ他のダイアログの入力を取得していると思いますが、よくわかりません。

4

2 に答える 2

0

私はそれを持っている!

http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.htmlを読むと、3 つの InputMap があることがわかりました。

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

getRootPane.getInputMap() を呼び出すことで、「デフォルト」の WHEN_FOCUSED 入力マップを取得しましたが、サブダイアログを呼び出すと、rootPane がフォーカスを失ったように見え、フォーカスを取り戻すのに何の助けにもなりませんでした。

今私は getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(...) を使用していますが、動作します。

サブダイアログを開くまでは機能していたことに、少し驚いています。

于 2013-04-19T12:52:55.770 に答える