Доброго времени суток! Имеется следующий код:
for (int i = 0; i <= 6; i++) {
for (int j = 0; j <= 17; j++) {
Cell[i][j] = createButton((ArenaLine.getMaxWidth() / 20) * 1, (ArenaLine.getMaxHeight() / 9) * 1, (ArenaLine.getMaxWidth() / 20) * (j + 1), (ArenaLine.getMaxHeight() / 9) * (i + 1));
ArenaLine.getChildren().add(Cell[i][j]);
Cell[i][j].setOnAction((ActionEvent actionEvent) -> {
Spawn(Cell[i][j]);
});
}
}
На строчке Spawn(Cell[i][j]); Java,разумеется,начинает ругаться.
Конечно,можно прописать для каждого элемента действие отдельно,но элементов в массиве крайне много.
Какие есть выходы из данной ситуации? Что можно тут придумать?
Довольно топорно, но:
for (int i = 0; i <= 6; i++) {
for (int j = 0; j <= 17; j++) {
Cell[i][j] = createButton((ArenaLine.getMaxWidth() / 20) * 1, (ArenaLine.getMaxHeight() / 9) * 1, (ArenaLine.getMaxWidth() / 20) * (j + 1), (ArenaLine.getMaxHeight() / 9) * (i + 1));
ArenaLine.getChildren().add(Cell[i][j]);
final int ii = i;
final int jj = j;
Cell[ii][jj].setOnAction((ActionEvent actionEvent) -> {
Spawn(Cell[ii][jj]);
});
}
}
или
for (int i = 0; i <= 6; i++) {
for (int j = 0; j <= 17; j++) {
final Button button = createButton((ArenaLine.getMaxWidth() / 20) * 1, (ArenaLine.getMaxHeight() / 9) * 1, (ArenaLine.getMaxWidth() / 20) * (j + 1), (ArenaLine.getMaxHeight() / 9) * (i + 1));
Cell[i][j] = button;
ArenaLine.getChildren().add(button);
button.setOnAction( ae -> {
Spawn(button);
});
}
}
P.S. Не пишите имена переменных и методов с заглавной буквы, так не принято в java.
Компилятор вам сказал, что нельзя использовать не финальные переменные в лямбдах. Так, что либо не используйте примитивы, либо не используйте лямбду(сделайте анонимным классом)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости