JButtonにActionListenerを介していくつかのアクションを実行させています。アクションを使用してキーボードショートカットをバインドしようとすると(これに続いて)、ボタンをクリックしても機能しますが、キーボードに反応しません。
前のコード
パネル内に作成されたボタン、actionListenerが追加されました。
private FooActionListener actionListener = new FooActionListener();
buttonLeft = new JButton("Left");
up.addActionListener(actionListener);
次に、メインクラス外のFooActionListenerクラス内のactionPerformedメソッド:
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == buttonLeft) { thing.move(Direction.LEFT); }
}
後のコード
final String leftText = "Left";
final Action left = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
thing.move(Direction.LEFT);
}
};
buttonLeft = new JButton(left);
buttonLeft.setText(leftText);
KeyStroke keyLeft = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0);
buttonLeft.getInputMap(buttonLeft.WHEN_IN_FOCUSED_WINDOW).put(keyLeft,
"Left");
buttonLeft.getActionMap().put("Left", left );
更新:新しいコードが実際にマウスで正常に機能するかどうかはよくわかりません。オブジェクトがワンクリックで25ピクセル移動することになっていて、元のコードで移動するとします。しかし、新しいアクションでは、クリックするたびに2回、または3回も移動するように見えます。これは、アクションの奇妙な動作を示唆しています。