Действие не имеет доступа к нажатию клавиши.Вам необходимо создать отдельное действие для каждой привязки ключа.Примерно так:
class SimpleAction extends AbstractAction
{
public SimpleAction(String name)
{
putValue( Action.NAME, "Action " + name );
}
public void actionPerformed(ActionEvent e)
{
System.out.println( getValue( Action.NAME ) );
}
}
Затем вы создаете действия вроде:
Action up = new SimpleAction("Up");
Однако у вас все еще будут проблемы, потому что InputMap по умолчанию получает ключевые события только тогда, когда он имеет фокус ипо умолчанию JPanel не фокусируется.Таким образом, у вас есть два варианта:
a) сделать панель фокусируемой:
panel.setFocusable( true );
b) использовать другую InputMap:
inputMap = panel.getInputMap(JPanel.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
Привязки клавиш В статье делается попытка упростить некоторые концепции привязки клавиш из учебника Swing.