在JavaFX的按钮数组中为每个按钮分配操作

时间:2015-10-24 21:57:11

标签: java arrays button javafx actionevent

我在JavaFX中创建了一个ComboBoxes数组和一组按钮。我想分配数组的每个按钮,对相应索引的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());
    });
}

因此,无论何时单击“随机”按钮,相应的ComboBox都将设置为随机颜色。但是,当我尝试这样做时,我得到了错误

  

从lambda表达式引用的局部变量必须是最终的或有效的最终

我知道错误源于我使用变量i,但我怎样才能解决这个问题呢?

提前致谢。

1 个答案:

答案 0 :(得分:2)

只需创建一个额外的最终变量,以便在lamda中使用:

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