Bonjour,
Je ne sais pas si mon problème est dû vraiment à la manipulation de SWING ou est-ce que c'est de la manipulation pure de JAVA :
J'ai une classe héritant de JPanel (PanScoresNorth). Dans cette classe j'ai créé une fonction "initPanScores(int NbreJoueurs)" (à la ligne 31 de PanScoresNorth) qui doit instancier et ajouter d'autres JPanels (PanPersonalScore) sur le JPanel de cette classe.
Cela ne fonctionne pas alors que si je mets les instanciations dans le constructeur plutôt que dans une fonction cela fonctionne.
Dans PanScoreNorth, j'ai essayé de déclarer la classe psc avant le constructeur et dans la fonction "initPanScores(int NbreJoueurs)" mais aucune des deux manières n'a fonctionné.
Autre problème sûrement lié, j'ai mis dans la fonction une ligne (ligne 35 de PanScoreNorth) colorant le background du panel pour tester : cette ligne fonctionne bien lorsque je suis en débug sur Eclipse, mais en mode RUN, rien ne fonctionne !
Donc voici les classes d'où l'appel à la fonction est fait et les classes héritant de JPanel :
Control :
Cadre :
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 package ctrl; import modeles.Joueur; import vues.Cadre; public class Control { Cadre cadre = null; Joueur joueur = null; int nbreJoueurs = 0; public static void main(String[] args) { Control ctrl = new Control(); } //*********CONSTRUCTEUR*********** public Control() { //affichage de l'interface graphique Cadre cadre = new Cadre(this); //affichage question nombre de joueurs nbreJoueurs = cadre.initNbreJoueurs(); do { }while(nbreJoueurs == 0); //instanciations des panneaux de score des joueurs cadre.initPanScores(nbreJoueurs); //affichage question prénoms des joueurs cadre.initPrenoms(nbreJoueurs); } //*********METHODES*********** public int getNbreJoueurs() { return this.nbreJoueurs; } public void setNbreJoueurs(int nbreJoueurs_) { this.nbreJoueurs = nbreJoueurs_; } }
PanneauPrincipal :
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 package vues; import javax.swing.JFrame; import ctrl.Control; public class Cadre extends JFrame { /** * */ private static final long serialVersionUID = 1L; Control ctrl = null; PanneauPrincipal panneau = null; //*********CONSTRUCTEUR********* public Cadre(Control ctrl_) { this.ctrl = ctrl_; panneau = new PanneauPrincipal(ctrl); //paramétrages cadre this.setTitle("Jeu de dés"); this.setContentPane(panneau); // this.setLocationRelativeTo(null); //fenêtre centrée à l'écran this.pack(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); } //*********METHODES********* public int initNbreJoueurs() { return panneau.initNbreJoueurs(); } public void initPrenoms(int nbreJoueurs_) { panneau.initPrenoms(nbreJoueurs_); } public void initPanScores(int nbreJoueurs) { panneau.initPanScores(nbreJoueurs); } }
PanScoreNorth :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 package vues; import java.awt.BorderLayout; import java.awt.Toolkit; import javax.swing.JPanel; import ctrl.Control; import vues.panneaux.PanActualScore_east; import vues.panneaux.PanCommands_south; import vues.panneaux.PanDes_center; import vues.panneaux.PanScores_north; public class PanneauPrincipal extends JPanel { /** * */ private static final long serialVersionUID = 1L; Control ctrl = null; PanDes_center des = null; String text; PanScores_north scores = null; //*********CONSTRUCTEUR********* public PanneauPrincipal(Control ctrl_) { this.ctrl = ctrl_; this.setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize()); //Récupération de la taille de l'écran afin de gérer les tailles de Panels Toolkit tk = Toolkit.getDefaultToolkit(); int xScreenSize = ((int) tk.getScreenSize().getWidth()); int yScreenSize = ((int) tk.getScreenSize().getHeight()); //insertions des différents panneaux this.setLayout(new BorderLayout()); //Paramétrages des dimensions de tous les sous panneaux int xPanNorth = xScreenSize; int yPanNorth = (int) Math.round(yScreenSize * 0.2); int xPanSouth = xScreenSize; int yPanSouth = (int) Math.round(yScreenSize * 0.1); int xPanEast = (int) Math.round(xScreenSize * 0.2); int yPanEast = (int) Math.round(yScreenSize * 0.3); int xPanCenter = (int) Math.round(xScreenSize * 0.8); int yPanCenter = (int) Math.round(yScreenSize * 0.3); scores = new PanScores_north(xPanNorth, yPanNorth); PanCommands_south commandes = new PanCommands_south(xPanSouth, yPanSouth); PanActualScore_east actualScore = new PanActualScore_east(xPanEast, yPanEast); des = new PanDes_center(ctrl, xPanCenter, yPanCenter); this.add(scores ,BorderLayout.NORTH); this.add(des,BorderLayout.CENTER); this.add(actualScore,BorderLayout.EAST); this.add(commandes,BorderLayout.SOUTH); } //*********METHODES********* public int initNbreJoueurs() { return des.initNbreJoueurs(); } public void initPrenoms(int nbreJoueurs_) { des.initPrenoms(nbreJoueurs_); } public void initPanScores(int nbreJoueurs) { scores.initPanScores(nbreJoueurs); } }
PanPersonalScore :
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 package vues.panneaux; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JPanel; public class PanScores_north extends JPanel { private static final long serialVersionUID = 1L; PanPersonalScore psc = null; int xPanSize, yPanSize, yPanPersSize; //*********CONSTRUCTEUR********* public PanScores_north(int xPanSize_, int yPanSize_) { this.xPanSize = xPanSize_; this.yPanSize = yPanSize_; this.setPreferredSize(new Dimension(xPanSize, yPanSize)); //hauteur du panneauPersonnel affiché yPanPersSize = (int) Math.round(yPanSize * 0.85); this.setLayout(new FlowLayout(1, 15, (int) Math.round((yPanSize - yPanPersSize) / 2))); //FlowLayout(int align, int hgap, int vgap) this.setBackground(Color.GRAY); } //*********METHODES********* public void initPanScores(int nbreJoueurs_) { for(int i = 0; i < nbreJoueurs_; i++) { psc = new PanPersonalScore(xPanSize, yPanPersSize, i); this.add(psc); this.setBackground(Color.RED); } } }
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 package vues.panneaux; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import javax.swing.JPanel; public class PanPersonalScore extends JPanel { private static final long serialVersionUID = 1L; int xScreenSize, xPanSize, xTextPos, rank; int yTextPos = 40; //*********CONSTRUCTEUR********* public PanPersonalScore(int xScreenSize_, int yPanSize_, int rank_) { this.xScreenSize = xScreenSize_; this.xPanSize = (int) Math.round( xScreenSize / 8); this.xTextPos = (int) Math.round(xPanSize / 4); this.rank = rank_; this.setPreferredSize(new Dimension(xPanSize, yPanSize_)); } //*********METHODES********* public void paint(Graphics g) { super.paint(g); g.setFont(new Font("default", Font.BOLD, 15)); g.setColor(Color.MAGENTA); g.drawString("JOUEUR " + (rank + 1), xTextPos, yTextPos); g.setColor(Color.GREEN); g.drawString("JOHN", xTextPos, yTextPos + 20); g.setColor(Color.MAGENTA); g.drawString("SCORE ", xTextPos, yTextPos + 50); g.setColor(Color.GREEN); g.drawString("1250", xTextPos, yTextPos + 70); } }
Pour plus de clarté, je donne toutes les autres classes du projet :
Joueur :
PanActualScore_East :
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 package modeles; public class Joueur{ //******attributs int nbrePts; //nombre de points de départ pour chaque joueur int tour; //ordre de départ String prenom; //******constructeurs public Joueur(int _nbrePts, int _tour, String _prenom){ this.nbrePts = _nbrePts; this.tour = _tour; this.prenom = _prenom; } //******Setters Getters public void setNbrePts(int _nbrePts){ this.nbrePts = _nbrePts; } public int getNbrePts(){ return nbrePts; } public void setTour(int _tour){ this.tour = _tour; } public int getTour(){ return tour; } public void setPrenom(String _prenom){ this.prenom = _prenom; } public String getPrenom(){ return prenom; } }
PanCommans_South :
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
57
58
59
60
61
62 package vues.panneaux; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import javax.swing.JPanel; public class PanActualScore_east extends JPanel { int xTextPos; int yTextPos; public PanActualScore_east(int xPanSize, int yPanSize) { this.xTextPos = (int) Math.round(xPanSize / 4); this.yTextPos = (int) Math.round(yPanSize / 2); this.setPreferredSize(new Dimension(xPanSize, yPanSize)); this.setLayout(new FlowLayout(1, 0, (int) Math.round(yPanSize / 2))); //FlowLayout(int align, int hgap, int vgap) this.setBackground(Color.GREEN); } public void paint(Graphics g) { super.paint(g); Color c = g.getColor(); // g.setColor(Color.RED); // g.fillRect(10,20,80,80); // g.setColor(Color.YELLOW); // g.fillOval(100,50,80,80); g.setFont(new Font("default", Font.BOLD, 15)); g.setColor(Color.MAGENTA); g.drawString("Dé 1", xTextPos, yTextPos); g.setColor(Color.RED); g.drawString("1", xTextPos + 5, yTextPos + 20); g.setColor(Color.MAGENTA); g.drawString("Dé 2", xTextPos, yTextPos + 40); g.setColor(Color.RED); g.drawString("5", xTextPos + 5, yTextPos + 60); g.setColor(Color.MAGENTA); g.drawString("Dé 3", xTextPos, yTextPos + 80); g.setColor(Color.RED); g.drawString("5", xTextPos + 5, yTextPos + 100); g.setColor(Color.MAGENTA); g.drawString("Dé 4", xTextPos, yTextPos + 120); g.setColor(Color.RED); g.drawString("3", xTextPos + 5, yTextPos + 140); g.setColor(Color.MAGENTA); g.drawString("Dé 5", xTextPos, yTextPos + 160); g.setColor(Color.RED); g.drawString("5", xTextPos + 5, yTextPos + 180); g.setColor(Color.MAGENTA); g.drawString("Total", xTextPos, yTextPos + 220); g.setColor(Color.RED); g.drawString("600", xTextPos + 5, yTextPos + 240); } }
PanDes_center :
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
57
58
59
60
61
62
63
64 package vues.panneaux; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.FontFormatException; import java.awt.GraphicsEnvironment; import java.io.IOException; import javax.swing.JButton; import javax.swing.JPanel; public class PanCommands_south extends JPanel { public PanCommands_south(int xPanSize, int yPanSize) { this.setLayout(new FlowLayout(1, xPanSize / 8, 0)); //FlowLayout(int align, int hgap, int vgap) this.setPreferredSize(new Dimension(xPanSize, yPanSize)); //calculs des tailles pour les boutons int heightBout = (int) Math.round(yPanSize * 0.8); int widhtBout = (int) Math.round(xPanSize * 0.45); //calcul des tailles de fonts int sizeFont = (int) Math.round(xPanSize * 0.02); //Load font from file Font font = null; try { font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/font/Eracake.ttf")); } catch (FontFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(font); JPanel panLancer = new JPanel(); JPanel panArret = new JPanel(); panLancer.setPreferredSize(new Dimension(xPanSize / 3, yPanSize)); panArret.setPreferredSize(new Dimension(xPanSize / 3, yPanSize)); JButton boutLancer = new JButton("Lancer les des"); JButton boutArreter = new JButton("Arreter le tour"); boutLancer.setPreferredSize(new Dimension(widhtBout, heightBout)); boutArreter.setPreferredSize(new Dimension(widhtBout, heightBout)); boutArreter.setFont(new Font("Eracake", font.ITALIC, sizeFont)); boutLancer.setFont(new Font("Eracake", font.ITALIC, sizeFont)); panLancer.add(boutLancer); panArret.add(boutArreter); this.add(panLancer); this.add(panArret); } }
Ce problème me dépasse ... j'ai besoin d'aide.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 package vues.panneaux; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import ctrl.Control; public class PanDes_center extends JPanel { private static final long serialVersionUID = 1L; Control ctrl = null; int xPanSize, yPanSize; int nbreJoueurs = 0; JLabel l1; JTextField jtf; JButton button; public PanDes_center(Control ctrl_, int xPanSize_, int yPanSize_) { this.ctrl = ctrl_; this.xPanSize = xPanSize_; this.yPanSize = yPanSize_; this.setPreferredSize(new Dimension(xPanSize, yPanSize)); } public int initNbreJoueurs() { l1 = new JLabel("Quel est le nombre de joueurs ? (entre 2 et 7 joueurs)"); Font font = new Font("Arial", Font.BOLD, 35); l1.setFont(font); l1.setBounds(xPanSize / 6, yPanSize / 2, 1000, 100); this.add(l1); jtf = new JTextField("2", 10); jtf.setBackground(Color.cyan); jtf.setBounds(xPanSize / 6, yPanSize / 2 + 100, 100, 50); jtf.setFont(font); this.add(jtf); button = new JButton("Valider"); button.setBounds(xPanSize / 6 + 200, yPanSize / 2 + 100, 200, 50); button.setFont(font); this.add(button); this.setBackground(Color.GRAY); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String text = jtf.getText(); if (text.matches("^([2-7])$")) { ctrl.setNbreJoueurs((int) Integer.parseInt(text)); // nbreJoueurs = (int) Integer.parseInt(text); } } }); return nbreJoueurs; } public void initPrenoms(int nbreJoueurs_) { //les éléments suivants sont pour essayer l1.setText("youpi"); jtf.setBackground(Color.red); } }
Merci à vous !
Partager