JDialogをESCキーで閉じる

編集者:Terai Atsuhiro~

作成日:2004-03-15
更新日:2021-09-19 (日) 10:55:00
  • category: swing folder: InputMap title: JDialogをESCキーで閉じる tags: [JDialog, InputMap, ActionMap] author: aterai pubdate: 2004-03-15T08:18:43+09:00 description: Escキーを押すと閉じるJDialogを作成します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTOj22ObUI/AAAAAAAAAck/b5izKCmGkHk/s800/InputMap.png

概要

Escキーを押すと閉じるJDialogを作成します。Swing (Archive) - JDialog says ESC key is already registered--where?からの引用です。

概要

ESCキーを押すと閉じるJDialogを作成します。 大部分をJDialog says ESC key is already registered--where?から、そのまま引用しています。

サンプルコード

#spanend
#spanadd
JDialog dialog = new JDialog(frame, "title", true);
#spanend
#spanadd
AbstractAction act = new AbstractAction() {
#spanend
  @Override public void actionPerformed(ActionEvent e) {
    dialog.dispose();
  }
#spanadd
};
#spanend
#spanadd
InputMap imap = dialog.getRootPane().getInputMap(
#spanend
  JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
#spanadd
imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "close-it");
#spanend
#spanadd
dialog.getRootPane().getActionMap().put("close-it", act);
#spanend
#spanadd
View in GitHub: Java, Kotlin

サンプルコード

final JDialog dialog = new JDialog(frame, "タイトル", true);
AbstractAction act = new AbstractAction("了解") {
  public void actionPerformed(ActionEvent evt) {
    dialog.dispose();
  }
};
InputMap imap = dialog.getRootPane().getInputMap();
imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "close-it");
dialog.getRootPane().getActionMap().put("close-it", act);

解説

  • JOptionPane.showMessageDialog()メソッドなどで作成したダイアログ: Escキーを押すと閉じる
  • デフォルトのJDialog: Escキーを押しても閉じない
    • JDialogEscキーを押すと閉じるには、JDialogからInputMapを取得してActionを設定する必要がある

参考リンク

解説

JOptionPane.showMessageDialog() で作成したダイアログは、ESCキーを押すと閉じますが、JDialogの場合は閉じてくれません。そこでJDialogでもESCキーを押すと閉じるようにInputMapなどを使って設定します。

コメント