Vinculações de teclas Java não funcionam
Eu estou tentando fazer ligações em Java em um JPanel. Eu quero uma certa ação para executar quando eu pressionar o botão 'w'. Eu sigo o tutorial Java sobre como fazer ligações, mas o método actionPerformed não é executado (ou seja, nenhum texto é impresso). A seguir, a totalidade do código da minha GUI de teste, com a parte relevante destacada:
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();
}
}
O texto "teste" nunca é impresso. Eu tentei muitas vezes com muitas variantes diferentes, chaves diferentes, e tenho certeza que o painel está em foco, mas sem sorte. O que estou fazendo de errado?