回答編集履歴

1

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

2015/12/01 21:40

投稿

argius
argius

スコア9388

test CHANGED
@@ -11,3 +11,91 @@
11
11
  Swingの記事を見つけたいなら、キーワードに "Swing" を入れるか、
12
12
 
13
13
  今回の場合ならそのまま "jbutton keylistener" で検索すれば見つかると思います。
14
+
15
+
16
+
17
+ ---
18
+
19
+
20
+
21
+ (追記)
22
+
23
+
24
+
25
+ `KeyStroke`と`InputMap`,`ActionMap`の組み合わせで、キーバインドのアクションを定義できます。
26
+
27
+
28
+
29
+ 例:
30
+
31
+
32
+
33
+ ```lang-java
34
+
35
+ // (JFrameのコンストラクター内)
36
+
37
+
38
+
39
+ // import java.awt.event.*;
40
+
41
+ // import javax.swing.*;
42
+
43
+
44
+
45
+ InputMap imap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
46
+
47
+ ActionMap amap = getRootPane().getActionMap();
48
+
49
+
50
+
51
+ // キーバインド: Wキー
52
+
53
+ KeyStroke ksW = KeyStroke.getKeyStroke(KeyEvent.VK_W, 0);
54
+
55
+ // アクションキー
56
+
57
+ String akDoSomething = "do-something";
58
+
59
+ // アクション
60
+
61
+ Action action = new AbstractAction() {
62
+
63
+ @Override
64
+
65
+ public void actionPerformed(ActionEvent evt) {
66
+
67
+ System.out.println(evt);
68
+
69
+ }
70
+
71
+ };
72
+
73
+ imap.put(ksW, akDoSomething);
74
+
75
+ amap.put(akDoSomething, action);
76
+
77
+ ```
78
+
79
+
80
+
81
+
82
+
83
+ 参考リンク:
84
+
85
+
86
+
87
+ JDialogをESCキーで閉じる - Java Swing Tips
88
+
89
+ [http://ateraimemo.com/Swing/InputMap.html](http://ateraimemo.com/Swing/InputMap.html)
90
+
91
+
92
+
93
+ javax.swing.KeyStroke,InputMap,ActionMap - Java SE 8 API ドキュメント
94
+
95
+ [http://docs.oracle.com/javase/jp/8/api/javax/swing/KeyStroke.html](http://docs.oracle.com/javase/jp/8/api/javax/swing/KeyStroke.html)
96
+
97
+ [http://docs.oracle.com/javase/jp/8/api/javax/swing/InputMap.html](http://docs.oracle.com/javase/jp/8/api/javax/swing/InputMap.html)
98
+
99
+ [http://docs.oracle.com/javase/jp/8/api/javax/swing/ActionMap.html](http://docs.oracle.com/javase/jp/8/api/javax/swing/ActionMap.html)
100
+
101
+