Я работаю над небольшой игрой и использую привязки клавиш. В моей игре у меня есть основная JPanel, содержащая все привязки, которые я хочу, так как все ключи должны быть доступны в любое время. После прочтения некоторых примеров у меня есть этот рабочий код:
KeyStroke endTurnKey = KeyStroke.getKeyStroke("F2");
mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(endTurnKey, "endTurnAction");
mainPanel.getActionMap().put("endTurnAction", new EndTurn(this));
for (int i = 0; i < 6; i++) {
KeyStroke selectSpell = KeyStroke.getKeyStroke(49 + i, 0);
mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(selectSpell, "selectSpell" + i);
mainPanel.getActionMap().put("selectSpell" + i, new SelectSpell(this, i));
}
И мой класс SelectSpell:
public class SelectSpell extends AbstractAction {
private static final long serialVersionUID = 1L;
private World w;
private int spellIndex;
public SelectSpell(World w, int spellIndex) {
this.w = w;
this.spellIndex = spellIndex;
}
@Override
public void actionPerformed(ActionEvent arg0) {
// Whatever depending on spellIndex
}
}
То, что я хочу, это класс или что-то, что я мог бы назвать «Привязки» с помощью последовательность "этот ключ делает это, этот делает это ...", чтобы легко их изменить, добавить новые ... Я также нахожу мой наследуемый класс AbstractAction немного ... неправильным в некоторой точке, это нормально? использовать локальную переменную, чтобы указать, что делать в actionPerformed? Другая проблема - я должен создать новый класс для каждого типа действия, это нормально?