Чтобы добавить пример к моему комментарию выше. Вы можете просто создать класс, реализующий AbstractAction, сохранить переменную i в экземпляре и предоставить ее через конструктор:
private void createGameLevelMenuItems(JMenu menu){
for (int i = 0; i<10; i++) {
JMenuItem item = new JMenuItem(new LoadAction(i));
menu.add(item);
}
}
private class LoadAction extends AbstractAction {
private int i;
public LoadAction(int i) {
super("Level-" + i);
this.i = i;
}
@Override
public void actionPerformed(ActionEvent e) {
game.loadGame(i);
board.refresh();
pack();
}
};
Предполагается, что игра и доска являются окончательными переменными в классе инкапсуляции, но, поскольку у вас просто проблема с i
, я полагаю, что это так.