【问题标题】:JavaFX event handler for array数组的 JavaFX 事件处理程序
【发布时间】:2016-01-04 18:23:23
【问题描述】:

所有这些矩形都添加到网格中,我希望在单击每个矩形后将颜色更改为白色,但是程序抛出和异常。

我可以用这种方式做到这一点,还是我需要在他的地方制作一个新的矩形的位置?

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

}

【问题讨论】:

  • 这是编译错误,不是异常。

标签: arrays exception javafx


【解决方案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 ;
    }

}

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多