2016-01-04 116 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

正如你的編譯錯誤所說的,你不能訪問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 ; 
    } 

}