Voila, j'utilise un gridlayout pour rendre graphique l'affichage d'une grille.
Pour l'instant, cet affichage se fait au moyen de code :
Pour ce résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public void AfficherGrille() { num=0; for(int i=0;i<=getNbLignes()-2;i++) { for(int j=0;j<=getNbColonnes()-1;j++) { if(grille[getNbLignes()-i-2][j].numero!=0) { System.out.print(grille[getNbLignes()-i-2][j].numero+"\t"); } } System.out.print("\n"); } }
Jusque là, tout marche bien.16 17 18 19
11 12 13 14 15
6 7 8 9 10
1 2 3 4 5
Donc, pour rendre graphique cela, je crée un Jpanel, que j'assortie avec un gridLayout, aux dimensions de ma grille (4 lignes, 5 colonnes)
Le problème, c'est qu'en reprenant exactement le même code que pour l'affichage textuel, et au lieu du system.out.println, je vais un Jbutton.setText("la même chose que tout à l'heure"), j'obtiens un affichage à 5 lignes, 4 colonnes... En fait, c'est comme si il calculait automatiquement une dimension "idéale", sans se soucier de celle que je lui passé.
Edit : je confirme, il a l'air d'optimiser le remplissage du gridlayout : j'ai essayé avec 18 cases au lieu de 19, et il me donne une grille de 6 lignes / 3 colonnes.
Par contre, il fait un truc bizarre : si je mets 20 cases, il me dit :
Exception in thread "main" java.lang.IllegalArgumentException: rows and cols cannot both be zero en me montrant la ligne du New GridLayout...
voilà à quoi ça ressemble :
Je joins le code d'affichage Swing de la grille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 panelGrille=new JPanel(new GridLayout(grille.getNbLignes(),grille.getNbColonnes())); panelGeneral=new JPanel(new BorderLayout()); panelGeneral.setSize(700,400); this.add(panelGeneral); panelGeneral.add(panelGrille,"West"); for(int i=0;i<=grille.getNbLignes()-2;i++) { for(int j=0;j<=grille.getNbColonnes()-1;j++) { if(grille.grille[grille.getNbLignes()-i-2][j].numero!=0) { JPanel p=new JPanel(); final JButton b=new JButton (); panelGrille.add(p.add(b)); p.setVisible(true); b.setSize(new Dimension(35,35)); b.setText(""+grille.grille[grille.getNbLignes()-i-2][j].numero+" = col n°"+j); } } }
Partager