Bonjour,
Je suis en train de créer un jeu de dés à 6 faces qui se joue avec 5 dés.
Je rencontre un problème au sujet de la dispositions des dés sur un JPanel équipé d'un GridBagLayout.
En effet, j'ai créé six classes (extends JPanel) représentants six dessins de dés (une classe pour chaque face) que je voudrais disposer de façon symétrique dans un JPanel équipé d'un GridBagLayout.
Pour l'instant je les affiche en dur mais au final ce sera une classe Controleur qui donnera l'ordre d'afficher un dé selon les phases de jeu.
J'ai des difficultés à manipuler ce layout et je n'obtiens pas le résultat que je souhaite (voir photo à la fin de ce post).
Je souhaite avoir les dés disposés symétriquement avec trois dés en haut et deux dés en bas (comme un W ...).
Voici mes classes depuis le JFrame jusqu'aux classes des dés (la classe DessinDe6 ne sert pas mais elle servira à afficher le résultat d'un dé qui aura fait un "6") :
Classe Fenetre :
Classe PanneauJoueurs :
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 public class Fenetre extends JFrame{ public Fenetre() { super("Jeu de dés"); WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; addWindowListener(l); this.setExtendedState(JFrame.MAXIMIZED_BOTH); this.setVisible(true); JPanel panneau = new JPanel(new BorderLayout()); PanneauJoueurs pj = new PanneauJoueurs(); PanneauCommandes pc = new PanneauCommandes(); PanneauScore ps = new PanneauScore(); PanneauDes pd = new PanneauDes(); panneau.add(ps, BorderLayout.EAST); panneau.add(pj, BorderLayout.NORTH); panneau.add(pd, BorderLayout.CENTER); panneau.add(pc, BorderLayout.SOUTH); this.setContentPane(panneau); } }
Classe PanneauScore :
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 public class PanneauJoueurs extends JPanel { public PanneauJoueurs() { super(); this.setLayout(new FlowLayout()); JLabel labelJoueur1 = new JLabel("Louis"); JLabel labelJoueur2 = new JLabel("Lilie"); JLabel labelJoueur3 = new JLabel("Papa"); labelJoueur1.setBackground(Color.YELLOW); labelJoueur1.setForeground(Color.BLUE); labelJoueur1.setOpaque(true); labelJoueur1.setBorder(new LabelsRoundedBorder(Color.BLACK, 20)); labelJoueur2.setBackground(Color.LIGHT_GRAY); labelJoueur2.setForeground(Color.BLACK); labelJoueur2.setOpaque(true); labelJoueur2.setBorder(new LabelsRoundedBorder(Color.BLACK, 20)); labelJoueur3.setBackground(Color.LIGHT_GRAY); labelJoueur3.setForeground(Color.BLACK); labelJoueur3.setOpaque(true); labelJoueur3.setBorder(new LabelsRoundedBorder(Color.BLACK, 20)); this.add(labelJoueur1); this.add(labelJoueur2); this.add(labelJoueur3); } }
Classe PanneauCommandes :
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 public class PanneauScore extends JPanel { public PanneauScore() { super(); int score1 = 5000; int score2 = 3550; JLabel joueur1 = new JLabel("Louis = " + score1); JLabel joueur2 = new JLabel("Lilie = " + score2); this.add(joueur1); this.add(joueur2); this.setLayout (new BoxLayout (this, BoxLayout.Y_AXIS)); } }
Classe PanneauDes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class PanneauCommandes extends JPanel { public PanneauCommandes() { super(new FlowLayout()); JButton button = new JButton("Lancer les dés"); this.add(button); } }
Classe DessinDe1 :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public class PanneauDes extends JPanel { public PanneauDes() { super(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); DessinDes1 dd1 = new DessinDes1(Color.MAGENTA); DessinDes2 dd2 = new DessinDes2(); DessinDes3 dd3 = new DessinDes3(); DessinDes4 dd4 = new DessinDes4(); DessinDes5 dd5 = new DessinDes5(); DessinDes6 dd6 = new DessinDes6(); //dé1 c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(0, 0, 0, 0); c.gridwidth = 2; c.gridx = 0; c.gridy = 0; this.add(dd1, c); //dé2 c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(0, 0, 0, 0); c.gridwidth = 2; c.gridx = 2; c.gridy = 0; this.add(dd2, c); //dé3 c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = 2; c.gridx = 4; c.gridy = 0; this.add(dd3, c); //dé4 c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(100, 50, 0, 100); c.gridwidth = 3; c.gridx = 1; c.gridy = 1; this.add(dd4, c); //dé5 c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(100, 0, 0, 0); c.gridwidth = 3; c.gridx = 3; c.gridy = 1; this.add(dd5, c); } }
Classe DessinDe2 :
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 public class DessinDes1 extends JPanel { Color pointsCoul = null; public DessinDes1(Color _pointsCoul) { super(); this.setPreferredSize(new Dimension(100, 100)); this.pointsCoul = _pointsCoul; } @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.fillRect(0, 0, 80, 80); g.setColor(Color.GREEN); g.drawRect(0, 0, 80, 80); //Dé 1 g.setColor(pointsCoul); g.fillOval(33, 33, 15, 15); } }
Classe DessinDe3 :
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 public class DessinDes2 extends JPanel { public DessinDes2() { super(); this.setPreferredSize(new Dimension(100, 100)); } @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.fillRect(0, 0, 80, 80); g.setColor(Color.GREEN); g.drawRect(0,0,80,80); //Dé 2 g.setColor(Color.BLUE); g.fillOval(55, 10, 15, 15); g.fillOval(10, 55, 15, 15); } }
Classe DessinDe4 :
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 public class DessinDes3 extends JPanel { public DessinDes3() { super(); this.setPreferredSize(new Dimension(100, 100)); } @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.fillRect(0, 0, 80, 80); g.setColor(Color.GREEN); g.drawRect(0,0,80,80); //Dé 3 g.setColor(Color.BLUE); g.fillOval(55, 10, 15, 15); g.fillOval(33, 33, 15, 15); g.fillOval(10, 55, 15, 15); } }
Classe DessinDe5 :
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 public class DessinDes4 extends JPanel { public DessinDes4() { super(); this.setPreferredSize(new Dimension(100, 100)); } @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.fillRect(0, 0, 80, 80); g.setColor(Color.GREEN); g.drawRect(0,0,80,80); //Dé 5 g.setColor(Color.BLUE); g.fillOval(10, 10, 15, 15); g.fillOval(55, 10, 15, 15); g.fillOval(10, 55, 15, 15); g.fillOval(55, 55, 15, 15); } }
Classe DessinDe6 :
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 public class DessinDes5 extends JPanel { public DessinDes5() { super(); this.setPreferredSize(new Dimension(100, 100)); } @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.fillRect(0, 0, 80, 80); g.setColor(Color.GREEN); g.drawRect(0,0,80,80); //Dé 5 g.setColor(Color.BLUE); g.fillOval(10, 10, 15, 15); g.fillOval(55, 10, 15, 15); g.fillOval(33, 33, 15, 15); g.fillOval(10, 55, 15, 15); g.fillOval(55, 55, 15, 15); } }
Classe LabelsRoundedBorder :
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 public class DessinDes6 extends JPanel { public DessinDes6() { super(); this.setPreferredSize(new Dimension(100, 100)); } @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.fillRect(0, 0, 80, 80); g.setColor(Color.GREEN); g.drawRect(0,0,80,80); //Dé 6 g.setColor(Color.BLUE); g.fillOval(10, 10, 15, 15); g.fillOval(55, 10, 15, 15); g.fillOval(10, 33, 15, 15); g.fillOval(55, 33, 15, 15); g.fillOval(10, 55, 15, 15); g.fillOval(55, 55, 15, 15); } }
Copie d'écran du 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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class LabelsRoundedBorder extends AbstractBorder { private final Color color; private final int gap; public LabelsRoundedBorder(Color c, int g) { color = c; gap = g; } @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2d.setColor(color); g2d.draw(new RoundRectangle2D.Double(x + 1, y + 1, width - 2, height - 2, gap, gap)); g2d.dispose(); } @Override public Insets getBorderInsets(Component c) { return (getBorderInsets(c, new Insets(gap, gap, gap, gap))); } @Override public Insets getBorderInsets(Component c, Insets insets) { insets.left = insets.top = insets.right = insets.bottom = gap / 2; return insets; } @Override public boolean isBorderOpaque() { return false; } }
Je vous remercie de bien vouloir m'aider !
Partager