Afficher tableau dans une fenêtre

Résolu
Vitaldix Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   -  
Vitaldix Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je programme actuellement une bataille navale, et j'ai besoin d'afficher les deux tableaux (coordonnées de l'utilisateur et coordonnées de là où on tire) dans une fenêtre, mais cela ne fonctionne pas.

Voici le code que j'utilise :

public static JLabel truc;
          public static JLabel machin;


    public partie(){
//initialisation des tableaux
        String[][] tabl = new String [11][11];
        String[][] tablref = new String [11][11];
        String[][] tablref2 = new String [11][11];
//appel de fonction de remplissage de tableau
        tableau(tablref);
        tableau_(tablref2);
        tableau_(tabl);
//création de la fenetre
        this.setSize(600,600);
        this.setTitle("jeu");
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        //setResizable(false) ;
//création des panels
        JPanel pano = new JPanel();
        JPanel pano4 = new JPanel(new GridLayout (11,11));
        JPanel pano5 = new JPanel(new GridLayout (11,11));
//ajout des panels dans la fenetre
        add(pano);
        pano.add(pano4);
        pano.add(pano5);
//création du tableau
        for (String[] t : tablref)
        {
            for (String n : t)
                truc = new JLabel(n + " ");
            machin = new JLabel();
            pano4.add(truc);
            pano4.add(machin);
        }
        for (String[] t : tablref)
        {
            for (String n : t)
                truc = new JLabel(n + " ");
            machin = new JLabel();
            pano5.add(truc);
            pano5.add(machin);

        }
}



public static void tableau(String[][] tabl)
    {
        for (int x=1; x<11; x++)
            for (int y=1; y<11; y++)
                tabl[x][y] = String.format("%c%d", 'A'+x-1, y);

        for (int i=1; i<11;i++)
            tabl[i][0] = String.format("%c", 'A'+i-1);
        for (int i=0; i<11; i++)
            tabl[0][i]=i +" ";

    }

    public static void tableau_(String[][] tabl)
    {
        for (int x=1; x<11; x++)
            for (int y=1; y<11; y++)
                tabl[x][y] = "_";

        for (int i=1; i<11;i++)
            tabl[i][0] = String.format("%c", 'A'+i-1);
        for (int i=0; i<11; i++)
            tabl[0][i]=""+i;

    }



Sauf que petit problème, seule la dernière ligne du premier tableau apparaît, ce qui ne va pas bien évidemment. Si quelqu'un sait d'où cela peut venir, j'aimerai bien savoir, s'il vous plaît !

Merci d'avance,
bonne journée
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Déjà, le setVisible(true); doit toujours être après l'ajout des éléments, sinon rien ne garantie que ceux qui seraient ajoutés après soient effectivement affichés.

Mais sinon le vrai problème c'est ici :

for (String n : t)
    truc = new JLabel(n + " ");
machin = new JLabel();
pano4.add(truc);
pano4.add(machin);
Tu créés bien 11x11 JLabel "truc" mais tu ne créés que 11 JLabel "machin", et dans les deux cas tu n'ajoutes que 11 truc et 11 machin dans pano4 (idem pour pano5)

Il te manque donc juste des accolades pour que tes ajouts soient bien dans la deuxième boucle :

for (String n : t)
{
    truc = new JLabel(n + " ");
    machin = new JLabel();
    pano4.add(truc);
    pano4.add(machin);
}

Remarque : c'est une très mauvaise idée d'avoir déclaré "truc" et "machin" comme membre "public static", ce sont des variables locales !
D'ailleurs elles ne servent à rien... tu peux les supprimer.

Voici comment tu pourrais faire proprement l'affichage de tes deux tableaux :

//création du tableau
for (String[] t : tablref)
for (String n : t)
{
    pano4.add(new JLabel(n));
    pano5.add(new JLabel(n));
}
2
Vitaldix Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   6
 
Bonjour ! merci de ta réponse
Tes corrections marchent en effet mais seulement pour tablref ! On voudrait également le faire pour tabl et tablref2, l'un en dessous de l'autre (je précise bien évidemment qu'on a remplacé tablref par tabl et tablref2 dans tes corrections).
Je précise également que tabl et tablref2 sont par la suites remplis par des lettres au lieu de "_", je ne sais pas si ça joue mais je le dis quand même.

Merci de ton aide, bonne soirée
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Toi tu avais fais deux boucles for (String[] t : tablref) c'est pour ça que j'avais fait pareil, mais il n'y a aucune différence avec l'affichage de tablref2 et tabl, un copier-coller suffira.

public partie()
{
    //initialisation des tableaux
    String[][] tabl = new String [11][11];
    String[][] tablref = new String [11][11];
    String[][] tablref2 = new String [11][11];
    
    //appel de fonction de remplissage de tableau
    tableau(tablref);
    tableau_(tablref2);
    tableau_(tabl);
    
    //création des panels
    JPanel pano = new JPanel(new GridLayout(3,1));
    JPanel pano4 = new JPanel(new GridLayout (11,11));
    JPanel pano5 = new JPanel(new GridLayout (11,11));
    JPanel pano6 = new JPanel(new GridLayout (11,11));
    
    //ajout des panels dans la fenetre
    add(pano);
    pano.add(pano4);
    pano.add(pano5);
    pano.add(pano6);
    
    //ajout des labels
    for (String[] t : tablref)
        for (String n : t)
            pano4.add(new JLabel(n));
    
    for (String[] t : tablref2)
        for (String n : t)
            pano5.add(new JLabel(n));
    
    for (String[] t : tabl)
        for (String n : t)
            pano6.add(new JLabel(n));
    
    //création de la fenetre
    setSize(600,600);
    //setResizable(false) ;
    setTitle("jeu");
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}
0
Vitaldix Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   6
 
Salut ! En fait ça marchait toujours pas, mais on a dû vider la JLabel sinon ça affichait tout bizarrement.

Merci en tous cas !
0