提问者:小点点

数组的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个答案

匿名用户

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

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 ;
    }

}