Ptrikl957:
Estoy escribiendo una oscilación aplicación y tratando de hacer un menú en el que cada elemento de menú tiene su propia acción :
Así es como yo quería resolver esto:
private void createGameLevelMenuItems(JMenu menu){
for (int i = 0; i<10; i++) {
JMenuItem item = new JMenuItem(new AbstractAction("Level-" + i) {
@Override
public void actionPerformed(ActionEvent e) {
game.loadGame(i);
board.refresh();
pack();
}
});
menu.add(item);
}
}
Sin embargo, no puedo usar loadGame(i)
, porque dice que i
tendría que ser final. Yo entiendo la razón de esto, pero no sé cómo funciona mi manera alrededor de ella.
Bruno:
Truco rápida: definir una variable final en cada iteración del bucle que toma el valor (no final) de i
y usarlo:
private void createGameLevelMenuItems(JMenu menu){
for (int i = 0; i<10; i++) {
final int j = i; // <--- this line do the thing
JMenuItem item = new JMenuItem(new AbstractAction("Level-" + j) {
@Override
public void actionPerformed(ActionEvent e) {
game.loadGame(j);
board.refresh();
pack();
}
});
menu.add(item);
}
}