2016-01-04 3 views
1

Все эти прямоугольники добавляются в сетку, и я хочу, чтобы после щелчка каждого из них, чтобы изменить цвет на белый, но бросок программ и исключение.Обработчик событий 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 ... 
     }); 

} 
+0

Это ошибка компиляции, а не исключение. –

ответ

0

Как говорится в вашей ошибке компиляции, вы не можете получить доступ к не конечным переменным в выражении лямбда. Вы можете обойти это, поставив свой прямоугольник в другую (эффективно-конечную) переменную:

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

} 
Смежные вопросы