Afficher tableau dans une fenêtre
Résolu
Vitaldix
Messages postés
124
Statut
Membre
-
Vitaldix Messages postés 124 Statut Membre -
Vitaldix Messages postés 124 Statut Membre -
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 :
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
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:
- Afficher tableau dans une fenêtre
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Imprimer tableau excel sur une page - Guide
- Tableau croisé dynamique - Guide
1 réponse
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 :
Il te manque donc juste des accolades pour que tes ajouts soient bien dans la deuxième boucle :
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 :
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));
}
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
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); }Merci en tous cas !