Назначение действия каждой кнопке в массиве кнопок в JavaFX

Я создал массив ComboBox и массив кнопок в JavaFX. Я хотел бы назначить каждую кнопку массива, чтобы что-то сделать с ComboBox соответствующего индекса:

for(int i = 0; i < 6; i++) {
    colorBox[i] = new ComboBox();
    colorBox[i].getItems().addAll("Blue", "Orange", "Green", "Yellow", "White", "Red");

    randomColorBtn[i] = new Button("Random color");
    randomColorBtn[i].setOnAction((ActionEvent event) -> {
        colorBox[i].setValue(getRandomPlayerIconColor());
    });
}

Таким образом, всякий раз, когда вы нажимаете кнопку Random, соответствующий ComboBox получает случайный цвет. Однако, когда я пытаюсь сделать это так, я получаю сообщение об ошибке

локальные переменные, на которые ссылается лямбда-выражение, должны быть окончательными или фактически окончательными

Я понимаю, что ошибка исходит от меня, использующего переменную i, но как мне обойти эту проблему?

Заранее спасибо.


person Niels Heltner    schedule 24.10.2015    source источник


Ответы (1)


Просто создайте дополнительную конечную переменную для использования в лямбде:

final ComboBox colorBoxi = colorBox[i];
randomColorBtn[i].setOnAction((ActionEvent event) -> {
    colorBoxi.setValue(getRandomPlayerIconColor());
});
person WillShackleford    schedule 24.10.2015