JavaFX. Проблема в передаче элемента в функцию

228
19 сентября 2017, 06:41

Доброго времени суток! Имеется следующий код:

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,разумеется,начинает ругаться. Конечно,можно прописать для каждого элемента действие отдельно,но элементов в массиве крайне много. Какие есть выходы из данной ситуации? Что можно тут придумать?

Answer 1

Довольно топорно, но:

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.

Answer 2

Компилятор вам сказал, что нельзя использовать не финальные переменные в лямбдах. Так, что либо не используйте примитивы, либо не используйте лямбду(сделайте анонимным классом)

READ ALSO
Авторизация в Bitrix

Авторизация в Bitrix

Возможно ли авторизовываться в битриксе, допустим, из Java или JS c помощью веб-сервисов? Если нет, то есть какие-нибудь иные способы сделать это?

231
Как исправить ошибку в программе?

Как исправить ошибку в программе?

Почему программа даже при правильных ответах ставит оценку 2(1) и говорит "Правильных ответов - 0, неправильных ответов 7"Как это исправить?

204
Java выпадает элемент &lt;List&gt;

Java выпадает элемент <List>

Добрый деньЕсть хеш объектов вида:

196