[GridLayout/JPanel]affichage et redimensionnement
Bonjour à tous,
Je souhaite afficher dans une fenêtre graphique un tableau de case qui dispose de bordures "variables" (parfois à gauche, parfois tout autour, parfois seulement en bas...).
J'ai donc une JFrame dont le constructeur ressemble à ça:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
this.lesCasesGraphics = new ArrayList();
LayoutManager layout2 = new BorderLayout();
JPanel mainPanel = new JPanel();
LayoutManager layout = new GridLayout(longueur,hauteur);
this.getContentPane().setLayout(layout2);
mainPanel.setLayout(layout);
this.getContentPane().add(mainPanel, BorderLayout.CENTER);
this.getContentPane().add(new JPanel(), BorderLayout.NORTH);
this.getContentPane().add(new JPanel(), BorderLayout.SOUTH);
this.getContentPane().add(new JPanel(), BorderLayout.EAST);
this.getContentPane().add(new JPanel(), BorderLayout.WEST);
for (int i = 0;i<this.longueur*this.hauteur;i++){
CaseGraphic cg = new CaseGraphic();
this.lesCasesGraphics.add(cg);
mainPanel.add(cg);
}
this.setSize(400,400); |
La méthode permettant de réactualiser le tableau est la suivante:
Code:
1 2 3 4 5 6 7 8 9
|
public void affiche() {
Iterator it = this.lesCasesGraphics.iterator();
for (int i = 0;i<this.hauteur;i++){
for (int j = 0; j<this.longueur;j++){
CaseGraphic casegraph = (CaseGraphic) it.next();
casegraph.update();
}
} |
Je me suis servi d'un tuto pour dessiner à l'intérieur d'une JPanel, en redéfinnissant notamment la méthode paint(Graphics g).
Mon objet CaseGraphic se présente donc comme ça:
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
|
private class CaseGraphic extends JPanel {
private List drawables = new ArrayList();
public void update(){
this.clear();
//ici chaque JPanel aura une bordure sur chaque coté
this.addDrawable(new Line(0,0,this.getHeight(),0));
this.addDrawable(new
Line(0,this.getWidth(),this.getHeight(),this.getWidth()));
this.addDrawable(new Line(this.getHeight(),0,this.getHeight(),this.getWidth()));
this.addDrawable(new Line(0,0,0,this.getWidth()));
this.repaint();
}
public void paint(Graphics g) {
for (Iterator iter = drawables.iterator(); iter.hasNext();) {
IDrawable d = (IDrawable) iter.next();
d.draw(g);
}
}
public void addDrawable(IDrawable d) {
drawables.add(d);
repaint();
}
public void removeDrawable(IDrawable d) {
drawables.remove(d);
repaint();
}
public void clear() {
drawables.clear();
repaint();
}
} |
Il y a quelques problème dans l'affichage:
1) il ya un espace entre les éléments d'une même ligne
2) la ligne en bas de chaque case n'est pas visible
Voici le résultat que j'obtiens:
http://h4zone.free.fr/tableau.JPG
En redimensionnant manuellement la fenêtre, j'arrive à obtenir le résultat voulu. Cela témoigne également d'un soucis, car lorsque ma fenêtre est redimensionnée, mes Jpanel ne sont pas redimensionnées en conséquence.
voila le résultat attendu:
http://h4zone.free.fr/tableau2.JPG
Merci d'avance pour votre aide.