Étiquette 2D-Tableau / JavaFX
Je veux remplir un tableau 2D avec des étiquettes Javafx dans lesquelles je peux changer le texte lorsque je clique dessus. C'est mon code réel mais il renvoie une exception NullPointer.
Blocquote
`public static Label[][] initWelt() {
Label[][] welt = new Label[DIM1][DIM2];
for (int x = 1; x < welt.length - 1; x++) {
for (int y = 1; y < welt.length - 1; y++) {
if (Math.random() > 0.4) {
welt[x][y].setText("X");
}
else{
welt[x][y].setText(" ");
}
}
}
return welt;
}`
1 answers
Il renvoie une exception NullPointer.
La seule chose que le code ci-dessous fait est d'initialiser un tableau two-dimensional
, il ne remplit pas le tableau two-dimensional
, d'où le NullPointerException
se produit.
Label[][] welt = new Label[DIM1][DIM2];
Fondamentalement, vous ne pouvez pas appeler ceci:
welt[x][y].setText("X");
Sans remplir le tableau two-dimensional
avec des références d'objet.
Pour résoudre le problème, remplissez d'abord le tableau bidimensionnel, quelque chose comme ci-dessous:
Label[][] welt = new Label[DIM1][DIM2];
for(int i = 0; i < DIM1; i++){
for(int j = 0; j < DIM2; j++){
welt[i][j] = new Label();
}
}
Ensuite, vous pouvez procéder à votre tâche actuelle à portée de main.
Alors maintenant, votre code devient comme ceci:
public static Label[][] initWelt() {
Label[][] welt = new Label[DIM1][DIM2];
for(int i = 0; i < DIM1; i++){ //populate the array
for(int j = 0; j < DIM2; j++){
welt[i][j] = new Label();
}
}
for (int x = 0; x < DIM1; x++) {
for (int y = 0; y < DIM2; y++) {
if (Math.random() > 0.4) {
welt[x][y].setText("X");
}
else{
welt[x][y].setText(" ");
}
}
}
return welt;
}
Note - personnellement, je pense qu'il serait mieux de revoir la méthode actuelle et insérer le code qui remplit la two-dimensional
tableau dans une méthode différente.