数组的JavaFX事件处理程序

时间:2016-01-04 18:23:24

标签: arrays exception javafx

所有这些矩形都添加到网格中,我想在点击它们之后将颜色更改为白色,但程序抛出和异常。

我能用这种方式做到这一点还是我需要在他的位置上获得一个新的矩形位置?

Rectangle[] rec = new Rectangle[22 * 12];
    for( int i = 0; i < 22 * 12; i++){
        rec[i] = new Rectangle(32, 32);
        rec[i].setStroke(Color.BLACK);
        rec[i].setFill( Color.valueOf("#202020") );
        rec[i].setStrokeWidth(1);
        rec[i].setOnMouseClicked(e -> {
            Rectangle r = new Rectangle(32, 32, Color.WHITE);
            rec[i].setFill( Color.WHITE); // exception at this line -> i must be final or ...
        });

}

1 个答案:

答案 0 :(得分:0)

正如编译错误所示,您无法访问lambda表达式中的非final变量。您可以通过将矩形放在不同的(有效最终)变量中来解决这个问题:

Rectangle[] rec = new Rectangle[22 * 12];
    for( int i = 0; i < 22 * 12; i++){
        Rectangle r = new Rectangle(32, 32);
        r.setStroke(Color.BLACK);
        r.setFill( Color.valueOf("#202020") );
        r.setStrokeWidth(1);
        r.setOnMouseClicked(e -> {
            r.setFill( Color.WHITE); 
        });

        rec[i] = r ;
    }

}