teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記:KeyStroke, InputMap, ActionMapを使った方法

2015/12/01 21:40

投稿

argius
argius

スコア9396

answer CHANGED
@@ -4,4 +4,47 @@
4
4
  同じように使えるので、古くからたくさんあるAppletのほうがヒットしてしまうのでしょう。
5
5
 
6
6
  Swingの記事を見つけたいなら、キーワードに "Swing" を入れるか、
7
- 今回の場合ならそのまま "jbutton keylistener" で検索すれば見つかると思います。
7
+ 今回の場合ならそのまま "jbutton keylistener" で検索すれば見つかると思います。
8
+
9
+ ---
10
+
11
+ (追記)
12
+
13
+ `KeyStroke`と`InputMap`,`ActionMap`の組み合わせで、キーバインドのアクションを定義できます。
14
+
15
+ 例:
16
+
17
+ ```lang-java
18
+ // (JFrameのコンストラクター内)
19
+
20
+ // import java.awt.event.*;
21
+ // import javax.swing.*;
22
+
23
+ InputMap imap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
24
+ ActionMap amap = getRootPane().getActionMap();
25
+
26
+ // キーバインド: Wキー
27
+ KeyStroke ksW = KeyStroke.getKeyStroke(KeyEvent.VK_W, 0);
28
+ // アクションキー
29
+ String akDoSomething = "do-something";
30
+ // アクション
31
+ Action action = new AbstractAction() {
32
+ @Override
33
+ public void actionPerformed(ActionEvent evt) {
34
+ System.out.println(evt);
35
+ }
36
+ };
37
+ imap.put(ksW, akDoSomething);
38
+ amap.put(akDoSomething, action);
39
+ ```
40
+
41
+
42
+ 参考リンク:
43
+
44
+ JDialogをESCキーで閉じる - Java Swing Tips
45
+ [http://ateraimemo.com/Swing/InputMap.html](http://ateraimemo.com/Swing/InputMap.html)
46
+
47
+ javax.swing.KeyStroke,InputMap,ActionMap - Java SE 8 API ドキュメント
48
+ [http://docs.oracle.com/javase/jp/8/api/javax/swing/KeyStroke.html](http://docs.oracle.com/javase/jp/8/api/javax/swing/KeyStroke.html)
49
+ [http://docs.oracle.com/javase/jp/8/api/javax/swing/InputMap.html](http://docs.oracle.com/javase/jp/8/api/javax/swing/InputMap.html)
50
+ [http://docs.oracle.com/javase/jp/8/api/javax/swing/ActionMap.html](http://docs.oracle.com/javase/jp/8/api/javax/swing/ActionMap.html)