É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;
}`
Author: Gildarts, 2017-03-21

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.

 2
Author: Aomine, 2017-03-21 13:38:19