とりあえず、私の環境では正しく動作しているように見えます。
OSが違うのでしょうか? 私はWindows7+Java8で確認しました。
(念のためですが、著作権とかご注意くださいね。)
...
KeyListener
の制御は、コンポーネントがフォーカスされている場合の操作であることが明らかな場合には使えますが、フォーカスの所在があやふやな場合には使いにくいです。
ActionMap
とInputMap
の組み合わせを使うと、子がフォーカスされていても親のキーバインドを有効にしたりできます。
詳しくは、下記の質問を参考にしていただければ。
Java - java キー入力(23651)|teratail
https://teratail.com/questions/23651
ActionMap
とInputMap
はKeyListener
と同時に使えると思いますので、
少なくともEscキーの制御だけはActionMap
とInputMap
にしてみたらどうでしょうか。
...
以下、JFrame
にESCキー→changeMenu
をバインドして、交互に(トグルで)切り替える例を示します。
lang
1// Mainクラス
2
3//
4public static void main(String[] args) {
5 Main frame = new Main();
6 final String actionSwitchMenu = "actionSwitchMenu";
7 frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), actionSwitchMenu);
8 frame.getRootPane().getActionMap().put(actionSwitchMenu, new AbstractAction() {
9 @Override
10 public void actionPerformed(ActionEvent e) {
11 changeMenu();
12 }
13 });
14
15 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
16 frame.setVisible(true);
17}
...
参考リンク:
JDialogをESCキーで閉じる - Java Swing Tips
http://ateraimemo.com/Swing/InputMap.html
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/13 04:27
2016/07/13 05:19
2016/07/13 05:28
2016/07/13 13:41