• 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?からの引用です。

サンプルコード

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

解説

JOptionPane.showMessageDialog()メソッドなどで作成したダイアログはEscキーを押すと閉じますが、デフォルトのJDialogの場合はそのような設定はされていません。JDialogEscキーを押すと閉じるようにするには、JDialogからInputMapを取得してActionを設定する必要があります。

参考リンク

コメント