Utilisation du GridBagLayout
Bonjour,
Je souhaite utiliser un GridBagLayout afin de mettre en forme une grille (je ne souhaite pas utiliser un GridLayout).
Pour illustrer mes propos voici le code que j'ai écrit :
D'abord la grille :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| import javax.swing.*;
import java.awt.*;
public class Grille extends JPanel{
private int taille; // la taille est donnée au contructeur
private Case[] tabcase;
public Grille(int t){
super();
int tabfiller = 0;
this.taille = t;
this.tabcase = new Case[taille*taille];
this.setBackground(Color.WHITE);
this.setSize(new Dimension(850,850));
this.setLocation(new Point(0,0));
//on définit le gestionnaire qui sera utilisé pour afficher la grille
GridBagLayout gestionnaire = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
this.setLayout(gestionnaire);
// on "configure" la façon dont le gridbaglayout va positionner les comps
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
for (int i = 1; i<=taille; i++) {
if (i%taille == 0) {
gbc.gridheight = GridBagConstraints.REMAINDER;
}
for ( int e = 1; e<=taille; e++) {
tabcase[tabfiller] = new Case();
tabfiller++;
if (e%taille == 0) {
gbc.gridwidth = GridBagConstraints.REMAINDER;
this.add(tabcase[tabfiller-1]);
gbc.gridwidth = 1;
} else {
this.add(tabcase[tabfiller-1]);
}
gbc.gridx++;
}
gbc.gridx = 0;
gbc.gridy++;
}
}
} |
Puis une case :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import javax.swing.JComponent;
import java.awt.*;
public class Case extends JComponent {
private int typecase;
public Case() {
super();
this.setPreferredSize(new Dimension(50,50));
}
public void setTypeCase(int tc) {
if (this.typecase != tc) {
this.typecase = tc;
repaint();
}
}
@Override
public void paintComponent(Graphics pinceau) {
Graphics secondPinceau = pinceau.create();
secondPinceau.drawRect(0,0,this.getWidth(),this.getHeight());
if (this.typecase == 0) { // je remplirai cette partie plus tard
} else if (this.typecase == 1) {
} else if (this.typecase == 2) {
} else if (this.typecase == 3) {
}
}
} |
Je demande votre aide car je ne comprend pas pourquoi les composants ne se placent pas comme je le souhaite (en somme ils ne forment pas une grille, j'obtiens un simple trait au milieu du JPanel contenant la grille), je n'arrive pas à trouver l'erreur bien que je sois certain qu'elle vous sera évidente ^^
En tout cas après diverses recherches je ne trouve pas donc si quelqu'un est en mesure de m'aider et m'expliquer comment faire je le remercie d'avance ! :)
Zarrok.