Afficher tableau dans une fenêtre

Résolu/Fermé
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 - 27 mai 2013 à 09:38
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 - 29 mai 2013 à 19:42
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

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
27 mai 2013 à 18:44
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 vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
28 mai 2013 à 22:39
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
29 mai 2013 à 06:06
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 vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
29 mai 2013 à 19:42
Salut ! En fait ça marchait toujours pas, mais on a dû vider la JLabel sinon ça affichait tout bizarrement.

Merci en tous cas !
0