2015-10-24 1 views
0

J'ai créé un tableau de ComboBox et un tableau de boutons dans JavaFX. Je voudrais attribuer à chaque bouton du tableau, de faire quelque chose à l'ComboBox de l'indice correspondant:Affectation d'une action à chaque bouton, dans un tableau de boutons dans JavaFX

for(int i = 0; i < 6; i++) { 
    colorBox[i] = new ComboBox(); 
    colorBox[i].getItems().addAll("Blue", "Orange", "Green", "Yellow", "White", "Red"); 

    randomColorBtn[i] = new Button("Random color"); 
    randomColorBtn[i].setOnAction((ActionEvent event) -> { 
     colorBox[i].setValue(getRandomPlayerIconColor()); 
    }); 
} 

Afin que chaque fois que vous cliquez sur le bouton aléatoire, la zone de liste déroulante correspondante se prépare à une couleur aléatoire. Cependant, lorsque je tente de le faire comme ça, je reçois l'erreur qui

variables locales référencées à partir d'une expression lambda doit être définitive ou efficace finale

Je reçois que l'erreur provient de moi à l'aide la variable i, mais comment puis-je contourner ce problème?

Merci d'avance.

Répondre

2

il suffit de créer une variable finale supplémentaire pour une utilisation dans le lamda:

final ComboBox colorBoxi = colorBox[i]; 
randomColorBtn[i].setOnAction((ActionEvent event) -> { 
    colorBoxi.setValue(getRandomPlayerIconColor()); 
}); 
+0

Merci, ça a marché! –