Bonjour,
Je suis en train de faire un petit jeu pour le plaisir et sans pr�tentions !!! cela m'aide aussi � me rappeller pleins de choses de java et � m'am�liorer.
J'ai une interface graphique qui demande � l'utilisateur de donner le nombre de joueurs, et seulement lorsque le nombe de joueurs aura �t� donn�, je souhaite changer le panneau JPanel pour demander les pr�noms des joueurs.
Donc il y a une m�thode qui cr�e le panneau pour demander le nombre des joueurs, il retourne au controleur cette donn�e, et ensuite je souhaite cr�er une m�thode qui affichera dans le m�me panneau la demande des pr�noms des joueurs une fois que le nombre des joueurs aura �t� d�fini.
Mon probl�me est que si, dans le controleur, je mets les m�thodes � la suite la jvm va les ex�cuter sans attendre que la donn�e "nbreJoueurs" soit d�finie.
Voici mon code pour plus de clart� :
Le controleur :
Donc on voit qu'� la ligne 30, j'appelle la m�thode pour demander le nbreJoueurs. Cela passe par une classe "Cadre" (JFrame), qui envoie � une classe PanneauPrincipal (JPanel), dans lequel se trouvent plusieurs panneaux rang�s dans un Layout. et c'est finalement la classe PanDes_CENTER qui re�oit et ex�cute (� partir de ligne 35) la fonction d�clench�e dans la classe "Control".
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 package ctrl; import modeles.Joueur; import vues.Cadre; public class Control { Cadre cadre = null; Joueur joueur = null; int nbreJoueurs; public static void main(String[] args) { Control ctrl = new Control(); } //*********CONSTRUCTEUR*********** public Control() { //affichage de l'interface graphique Cadre cadre = new Cadre(this); //attente try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } //affichage question nombre de joueurs cadre.initNbreJoueurs(); } //*********METHODES*********** public int getNbreJoueurs() { return this.nbreJoueurs; } public void setNbreJoueurs(int nbreJoueurs_) { this.nbreJoueurs = nbreJoueurs_; cadre.initPrenoms(nbreJoueurs_); } }
Ici la classe PanDes_center :
Dans cette classe, j'affiche la demande du nbreJoueurs (ligne 38) et l'utilisateur Valide sur par JButton (ligne 53). Dans l'ActionListener (lignes 61 � 71), cela d�clenche une fonction setNbreJoueurs de la classe "Control" (en ligne 40).
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 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, nbreJoueurs; 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 void 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)); } } }); } public void initPrenoms(int nbreJoueurs_) { } }
Cela met bien la variable nbreJoueurs � jour mais je ne vois pas comment je pourrais appeller une nouvelle fonction demandant les pr�noms des joueurs � la suite de la fonction qui demande le nbreJoueurs dans la classe Control, ligne 30... la JVM ex�cuterait les deux fonctions � la suite sans attendre que l'utilisateur clique sur le bouton Valider pour le nbreJoueurs ....
Pas facile � expliquer ....
Du coup, je poste ici toutes mes autres classes pour plus de clart� si vous souhaitez reconstituer chez vous !
Cadre :
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 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 void initNbreJoueurs() { panneau.initNbreJoueurs(); } public void initPrenoms(int nbreJoueurs_) { panneau.initPrenoms(nbreJoueurs_); } }
PanActualScore :
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 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; int nbreJoueurs; 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); PanScores_north 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); } public void initNbreJoueurs() { des.initNbreJoueurs(); } public void initPrenoms(int nbreJoueurs_) { des.initPrenoms(nbreJoueurs_); } }
PanCommands_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); } }
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
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); } }
PanScores_north :
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 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 { int xScreenSize; int xPanSize; int xTextPos; int yTextPos = 40; int rank; 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)); } 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("JOUEUR " + (rank + 1), xTextPos, yTextPos); g.setColor(Color.GREEN); g.drawString("LILIE", xTextPos, yTextPos + 20); g.setColor(Color.MAGENTA); g.drawString("SCORE ", xTextPos, yTextPos + 50); g.setColor(Color.GREEN); g.drawString("1250", xTextPos, yTextPos + 70); } }
Joueur :
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 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 { public PanScores_north(int xPanSize, int yPanSize) { this.setPreferredSize(new Dimension(xPanSize, yPanSize)); //hauteur du panneauPersonnel affiché int 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); for(int i = 0; i < 7; i++) { PanPersonalScore psc = new PanPersonalScore(xPanSize, yPanPersSize, i); this.add(psc); } } }
En gros, mon but serait de faire comme ceci dans la classe Control mais que la deuxi�me m�todes soit appel�e lorsque l'uitlisateur aura valid� le nbreJoueur :
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; } }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 //affichage question nombre de joueurs cadre.initNbreJoueurs(); //Affichage question des prénoms des joueurs Cadre.initPrenomsJoueurs();
Merci pour vos retours et critiques constructives !
Partager