• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JDialogをESCキーで閉じる
#navi(../)
RIGHT:Posted by [[aterai]] at 2004-03-15
#tags()
RIGHT:Posted by &author(aterai); at 2004-03-15
*JDialogをESCキーで閉じる [#v1b20b60]
ESCキーを押すと閉じるJDialogを作成します。大部分を[http://forums.sun.com/thread.jspa?threadID=468363 Swing (Archive) - JDialog says ESC key is already registered--where?]から、そのまま引用しています。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTOj22ObUI/AAAAAAAAAck/b5izKCmGkHk/s800/InputMap.png)

**サンプルコード [#k02432cf]
#code{{
#code(link){{
final JDialog dialog = new JDialog(frame, "title", true);
AbstractAction act = new AbstractAction("OK") {
  public void actionPerformed(ActionEvent e) {
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);
}}

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

**参考リンク [#x13c393a]
-[http://forums.sun.com/thread.jspa?threadID=468363 Swing (Archive) - JDialog says ESC key is already registered--where?]
-[http://forums.sun.com/thread.jspa?threadID=449624 Swing (Archive) - ESC Key to Close a JFrame]
-[[JComponentのKeyBinding一覧を取得する>Swing/KeyBinding]]

**コメント [#u5283c56]
- メモ: [http://www.javaroad.jp/bbs/answer.jsp?q_id=20100528123134643 Javaの道>掲示板(JDialogが最小化されてしまう)]。1.7.0だと、JDialogなどのTitleBarを右クリックすると、「Java Result: -1073741819」で落ちる? -- [[aterai]] &new{2010-06-17 (木) 17:28:06};

#comment