JPanel で Java でキー バインディングを作成しようとしています。「w」ボタンを押したときに特定のアクションを実行したい。バインディングの作成に関する Java チュートリアルに従いましたが、actionPerformed メソッドが実行されません (つまり、テキストが出力されません)。以下は、テスト GUI のコード全体で、関連する部分が強調表示されています。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
@SuppressWarnings("serial")
public class Test extends JFrame{
private JPanel panel;
public Test(){
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,500);
setLayout(new BorderLayout());
setVisible(true);
panel = new JPanel();
// HERE ARE THE KEY BINDINGS
panel.getInputMap().put(KeyStroke.getKeyStroke('w'),"forward");
panel.getActionMap().put("forward", new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e){
System.out.println("test");
}
});
// END OF KEY BINDINGS
add(panel, BorderLayout.CENTER);
}
public static void main(String[] args){
new Test();
}
}
テキスト「テスト」は印刷されません。さまざまなバリエーション、さまざまなキーで何度も試しましたが、パネルに焦点が合っていることを確認しましたが、うまくいきませんでした。私は何を間違っていますか?