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:
La méthode permettant de réactualiser le tableau est la suivante:
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 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);
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
Mon objet CaseGraphic se présente donc comme ça:
Il y a quelques problème dans l'affichage:
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
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(); } }
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:
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:
Merci d'avance pour votre aide.
Partager