Sa s'affiche c'est génial je te remerci enormément. Tu me sauve.
Mais je n'est pa fini il faut ke je puisse bouger ces forme une fois quel sont sur le panel du centre.
De façon à pouvoir faire des dessins.
Sa s'affiche c'est génial je te remerci enormément. Tu me sauve.
Mais je n'est pa fini il faut ke je puisse bouger ces forme une fois quel sont sur le panel du centre.
De façon à pouvoir faire des dessins.
Ok je vais chercher ce soir si j'ai un peu de temp.
Ce qui m'enbete, c'est que il doit etre fait absolument pour vendredi, j'espère que j'aurai fini...
J'ai fait plus simple finalement.
Au lieu de chercher à déplacer les formes, je les fait apparaitre ou je veut en récupérant les coordonnées du curseur avec getx() et gety().
Il faut maintenant que je donne une couleur au formes.
Je suppose qu'il faut que je mi prenne comme pour les formes et que je remplace le switch par des if?
Si tu as une liste de couleurs finies pas trop grandes, un switch marche aussi.
Mais tu peux faire beaucoup plus simple : pour les couleurs tu na pas besoin de crées des formes différentes en fonction du bouton sur lequel tu cliques, chaque bouton décide de la couleur que tu veux associer.
Éventuellement tu peux utiliser un tableau pour te soulager de taper trop de code.
Donc je récapitule :
on va stocker la couleur à affecter à chaque nouvelle forme dans une variable de la classe FenPrincipal
tu as un bouton pour choisir une couleur, que tu as créé comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part private Color couleurCourante;
Si tu fais une classe interne comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part buttonTruc = new JButton(...);
et ensuite tu n'as qu'à faire sur ton bouton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public ColorActionListener implements ActionListener { private Color color; public ColorActionListener(Color color) { this.color=color; } public void actionPerformed(ActionEvent event) { couleurCourante=color; } }
mais si tu en plus tu fais un tableau dans ta classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 JButton buttonRouge = new JButton("Rouge"); buttonRouge.addActionListener(new ColorActionListener(Color.RED)); JButton buttonVert = new JButton("Vert"); buttonVert.addActionListener(new ColorActionListener(Color.GREEN)); ... etc...
tu peux faire une boucle dessus pour créer tous tes boutons (au lieu de mettre le nom de la couleur en français tu mets une image dans la couleur qui correspond au bouton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part private final static Color[] MES_COULEURS = {Color.RED,Color.GREEN, Color.YELLOW};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 for(Color color : MES_COULEURS) { BufferedImage image = new BufferedImage(24, 24, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(color); g.fillRect(0, 0, image.getWidth(), image.getHeight()); g.dispose(); JButton button.setIcon(new ImageIcon(image)); button.addActionListener(new ColorActionListener(color)); }
J'ai les couleurs jaune, bleu, rouge, vert, noir.
Je sélectionne une forme et une couleur puis je fait apparaitre sur le panel du centre.
Par exemple carré rouge ou carré jaune ou triangle jaune ou triangle vert ou cercle bleu ect...
Si j'ai bien compris ta première solution doit fonctionner.
J'essaye sa, merci.
Lorsque je fait
netbeans me dit que ColorActionListener est abstraite et ne peut pas être instancié.
Code : Sélectionner tout - Visualiser dans une fenêtre à part btn_bleu.addActionListener(new ColorActionListener(Color.BLUE));
Mais si je ne la définie pas comme abstraite j'ai le message "FenPrincipal.ColorActionListener is not abstract and does not override abstract method ActionPerformed(ActionEvent) in ActionListener"
Voila mon code :
Comment doit-je définir ma classe?
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package tp.dessinons; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** * * @author pinps */ public class FenPrincipal extends JFrame { private JButton btn_triangle; private JButton btn_carre; private JButton btn_cercle; private JButton btn_raz; private JLabel lbl_forme; private JLabel lbl_couleur; private JButton btn_bleu; private JButton btn_jaune; private JButton btn_rouge; private JButton btn_vert; private JButton btn_noir; private Dessin zone_centre; private Color couleurCourante; public static void main(String[] args) { //Description de la fenetre principal FenPrincipal fen=new FenPrincipal(); fen.setTitle("Dessinons"); fen.setSize(520,300); fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fen.setVisible(true); } public enum FORME{ RECTANGLE, CERCLE, TRIANGLE, RAZ; } public class Dessin extends JPanel implements MouseListener{ ArrayList<Forme> liste; public Dessin(){ liste=new ArrayList<>(); } public void viderliste(){ liste.clear(); repaint(); } private FORME formeCourante; public void setFormeCourante(FORME formeCourante){ this.formeCourante=formeCourante; } @Override public void mouseClicked(MouseEvent e){ int x=e.getX(); int y=e.getY(); Forme forme; switch(formeCourante){ case RECTANGLE : forme=new FormeRectangle(x,y,20,20); break; case CERCLE : forme=new FormeEllipse(x,y,20,20); break; case TRIANGLE : forme=new FormeTriangle(x,y,20,20); break; case RAZ : forme=null; liste.clear(); default : return; } liste.add(forme); repaint(); }; @Override public void mouseEntered(MouseEvent e){}; @Override public void mouseExited(MouseEvent e){}; @Override public void mousePressed(MouseEvent e){}; @Override public void mouseReleased(MouseEvent e){}; public abstract class Forme{ protected int x; protected int y; protected int width; protected int height; public Forme(int x, int y, int width, int height){ this.x=x; this.y=y; this.width=width; this.height=height; } public abstract void draw(Graphics2D g); public abstract void fill(Graphics2D g); } public class FormeRectangle extends Forme { public FormeRectangle (int x, int y, int width, int height){ super(x, y, width, height); } @Override public void draw(Graphics2D g){ g.drawRect(x, y, width, height); } @Override public void fill(Graphics2D g){ g.fillRect(x, y, width, height); } } public class FormeEllipse extends Forme{ public FormeEllipse(int x, int y, int width, int height){ super(x, y, width, height); } @Override public void draw(Graphics2D g){ g.drawOval(x, y, width, height); } @Override public void fill(Graphics2D g){ g.fillOval(x, y, width, height); } } public class FormeTriangle extends Forme{ private int[] xtriangle; private int[] ytriangle; public FormeTriangle(int x, int y, int width, int height){ super(x, y, width, height); xtriangle=new int[]{x, x+width/2, x+width}; ytriangle=new int[]{y+height, y, y+height}; } @Override public void draw(Graphics2D g){ g.drawPolygon(xtriangle, ytriangle, 3); } @Override public void fill(Graphics2D g){ g.fillPolygon(xtriangle, ytriangle, 3); } } @Override public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d=(Graphics2D)g; for(Forme forme : liste){ forme.draw(g2d); } } } public abstract class ColorActionListener implements ActionListener{ private Color color; public ColorActionListener(Color color){ this.color=color; } public void acionPerformed(ActionEvent event){ couleurCourante=color; } } public FenPrincipal(){ //String forme=""; BoutonForme boutonforme=new BoutonForme(); //Création de la zonne du haut JPanel zone_haut=new JPanel(); //Création de boutons et libéllés btn_triangle=new JButton("Triangle"); btn_carre=new JButton("Carré"); btn_cercle=new JButton("Cercle"); btn_raz=new JButton("RAZ"); JLabel lbl_formetxt=new JLabel("Forme : "); lbl_forme=new JLabel(); JLabel lbl_couleurtxt=new JLabel("Couleur : "); lbl_couleur=new JLabel(); //Ajout des boutons et libellés à la zonne du haut zone_haut.add(btn_triangle); zone_haut.add(btn_carre); zone_haut.add(btn_cercle); zone_haut.add(btn_raz); zone_haut.add(lbl_formetxt); zone_haut.add(lbl_forme); zone_haut.add(lbl_couleurtxt); zone_haut.add(lbl_couleur); //Enregistrement du recepteur d'action btn_triangle.addActionListener(boutonforme); btn_carre.addActionListener(boutonforme); btn_cercle.addActionListener(boutonforme); btn_raz.addActionListener(boutonforme); //Placement de la zone du haut getContentPane().add(BorderLayout.NORTH, zone_haut); //Création de la zone du bas JPanel zone_bas=new JPanel(); //Création des boutons de la zone du bas btn_bleu=new JButton("Bleu"); btn_bleu.setBackground(Color.blue); btn_bleu.addActionListener(new ColorActionListener(Color.BLUE)); btn_jaune=new JButton("Jaune"); btn_jaune.setBackground(Color.yellow); btn_rouge=new JButton("Rouge"); btn_rouge.setBackground(Color.red); btn_vert=new JButton("Vert"); btn_vert.setBackground(Color.green); btn_noir=new JButton("Noir"); btn_noir.setBackground(Color.black); //Ajout des boutons à la zone du bas zone_bas.add(btn_bleu); zone_bas.add(btn_jaune); zone_bas.add(btn_rouge); zone_bas.add(btn_vert); zone_bas.add(btn_noir); //Enregistrement des recepteurs d'action btn_bleu.addActionListener(boutonforme); btn_jaune.addActionListener(boutonforme); btn_rouge.addActionListener(boutonforme); btn_vert.addActionListener(boutonforme); btn_noir.addActionListener(boutonforme); //Placement de la zone du bas getContentPane().add(BorderLayout.SOUTH, zone_bas); //Création de la zone du centre zone_centre=new Dessin(); zone_centre.addMouseListener(zone_centre); zone_centre.setBackground(Color.white); //Placement de la zone du centre getContentPane().add(BorderLayout.CENTER, zone_centre); } public class BoutonForme extends JButton implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //Action à effectuer sur click du bouton if (e.getSource()== btn_triangle){ lbl_forme.setText("Triangle"); zone_centre.setFormeCourante(FORME.TRIANGLE); }else if (e.getSource()== btn_carre){ lbl_forme.setText("Carre"); zone_centre.setFormeCourante(FORME.RECTANGLE); }else if (e.getSource()== btn_cercle){ lbl_forme.setText("Cercle"); zone_centre.setFormeCourante(FORME.CERCLE); }else if (e.getSource()== btn_raz){ lbl_forme.setText("RAZ"); lbl_couleur.setText("RAZ"); } if (e.getSource()== btn_bleu){ lbl_couleur.setText("Bleu"); }else if (e.getSource()== btn_jaune){ lbl_couleur.setText("Jaune"); }else if (e.getSource()== btn_rouge){ lbl_couleur.setText("Rouge"); }else if (e.getSource()== btn_vert){ lbl_couleur.setText("Vert"); }else if (e.getSource()== btn_noir){ lbl_couleur.setText("Noir"); } } } }
De plus lan'est jamais utiliser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part private Color couleurCourante;
C'est parce que tu as mis ta classe ColorActionListener (je ne sais pas pourquoi)à : c'est exactement le même problème que tout à l'heure en plus !
Si couleurCourante n'est pas utilisée c'est que ... tu ne l'utilises pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part publicabstractclass ColorActionListener
j'avais dans l'idée quand je t'ai mis l'exemple de solution que tu pensais avoir une couleur courante, que toutes les nouvelles formes crées utiliseraient, jusqu'à ce qu'on change cette couleur courante... en ajoutant une notion de couleur aux formes, donc en ajoutant une variable de type Color dans la classe Forme, en ajoutant des accesseurs (setColor(Color) et Color getColor())) et donc juste avant de dessiner la forme (le forme.draw(...) ou le forme.fill()) on affectait la couleur au contexte graphique .
Ah d'accord, je vais me contenter d'avoir une couleur quand j'en aurais sélectionner une étant donné que je suis un peu pressé.
Je suis d'accord que l'erreur est la même mais cela ne fonctionne pas non plus si la classe n'est pas abstraite, comme j'ai dit dans mon message précédent.
Je ne comprend.
Je vais me coucher cela ira peut-être mieux demain.
En tout cas merci pour ton aide et ta patience.
La réponse est dans le message d'erreur :
On te dit que la classe ColorActionListener doit définir la méthode ActionPerformed(ActionEvent) de ActionListener, or tu as écrit :"FenPrincipal.ColorActionListener is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener"
(manque le t)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void acionPerformed(ActionEvent event){ couleurCourante=color; }
oulala l'étourderi. Je suis iratrappable.
J'ai essayer de faire en sorte que quand je clic sur un bouton, une couleur est affecter à la forme.
J'ai essayer de suivre tes conseil mais je ne vois pas ou et comment affecter ma couleur à ma forme....
Voila mon code :
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package tp.dessinons; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** * * @author pinps */ public class FenPrincipal extends JFrame { private JButton btn_triangle; private JButton btn_carre; private JButton btn_cercle; private JButton btn_raz; private JLabel lbl_forme; private JLabel lbl_couleur; private JButton btn_bleu; private JButton btn_jaune; private JButton btn_rouge; private JButton btn_vert; private JButton btn_noir; private Dessin zone_centre; private Color couleurCourante; public static void main(String[] args) { //Description de la fenetre principal FenPrincipal fen=new FenPrincipal(); fen.setTitle("Dessinons"); fen.setSize(520,300); fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fen.setVisible(true); } public enum FORME{ RECTANGLE, CERCLE, TRIANGLE, RAZ; } public class Dessin extends JPanel implements MouseListener{ //Création de la liste ArrayList<Forme> liste; public Dessin(){ liste=new ArrayList<>(); } private FORME formeCourante; public void setFormeCourante(FORME formeCourante){ this.formeCourante=formeCourante; } //Ajout de la forme à la liste @Override public void mouseClicked(MouseEvent e){ int x=e.getX(); int y=e.getY(); Forme forme; switch(formeCourante){ case RECTANGLE : forme=new FormeRectangle(x,y,20,20); break; case CERCLE : forme=new FormeEllipse(x,y,20,20); break; case TRIANGLE : forme=new FormeTriangle(x,y,20,20); break; case RAZ : forme=null; liste.clear(); default : return; } liste.add(forme); repaint(); }; @Override public void mouseEntered(MouseEvent e){}; @Override public void mouseExited(MouseEvent e){}; @Override public void mousePressed(MouseEvent e){}; @Override public void mouseReleased(MouseEvent e){}; public abstract class Forme{ protected int x; protected int y; protected int width; protected int height; protected Color color; public Forme(int x, int y, int width, int height){ this.x=x; this.y=y; this.width=width; this.height=height; this.color=color; } public abstract void draw(Graphics2D g); public abstract void fill(Graphics2D g); } //Classe de forme public class FormeRectangle extends Forme { public FormeRectangle (int x, int y, int width, int height){ super(x, y, width, height); } @Override public void draw(Graphics2D g){ g.drawRect(x, y, width, height); } @Override public void fill(Graphics2D g){ g.fillRect(x, y, width, height); } } public class FormeEllipse extends Forme{ public FormeEllipse(int x, int y, int width, int height){ super(x, y, width, height); } @Override public void draw(Graphics2D g){ g.drawOval(x, y, width, height); } @Override public void fill(Graphics2D g){ g.fillOval(x, y, width, height); } } public class FormeTriangle extends Forme{ private int[] xtriangle; private int[] ytriangle; public FormeTriangle(int x, int y, int width, int height){ super(x, y, width, height); xtriangle=new int[]{x, x+width/2, x+width}; ytriangle=new int[]{y+height, y, y+height}; } @Override public void draw(Graphics2D g){ g.drawPolygon(xtriangle, ytriangle, 3); } @Override public void fill(Graphics2D g){ g.fillPolygon(xtriangle, ytriangle, 3); } } @Override //Affichage de la liste dans paintComponent public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d=(Graphics2D)g; for(Forme forme : liste){ forme.draw(g2d); } } } public class ColorActionListener implements ActionListener{ private Color color; public ColorActionListener(Color color){ this.color=color; } @Override public void actionPerformed(ActionEvent event){ couleurCourante=color; } } public FenPrincipal(){ //String forme=""; BoutonForme boutonforme=new BoutonForme(); //Création de la zonne du haut JPanel zone_haut=new JPanel(); //Création de boutons et libéllés btn_triangle=new JButton("Triangle"); btn_carre=new JButton("Carré"); btn_cercle=new JButton("Cercle"); btn_raz=new JButton("RAZ"); JLabel lbl_formetxt=new JLabel("Forme : "); lbl_forme=new JLabel(); JLabel lbl_couleurtxt=new JLabel("Couleur : "); lbl_couleur=new JLabel(); //Ajout des boutons et libellés à la zonne du haut zone_haut.add(btn_triangle); zone_haut.add(btn_carre); zone_haut.add(btn_cercle); zone_haut.add(btn_raz); zone_haut.add(lbl_formetxt); zone_haut.add(lbl_forme); zone_haut.add(lbl_couleurtxt); zone_haut.add(lbl_couleur); //Enregistrement du recepteur d'action btn_triangle.addActionListener(boutonforme); btn_carre.addActionListener(boutonforme); btn_cercle.addActionListener(boutonforme); btn_raz.addActionListener(boutonforme); //Placement de la zone du haut getContentPane().add(BorderLayout.NORTH, zone_haut); //Création de la zone du bas JPanel zone_bas=new JPanel(); //Création des boutons de la zone du bas btn_bleu=new JButton("Bleu"); btn_bleu.setBackground(Color.blue); btn_bleu.addActionListener(new ColorActionListener(Color.BLUE)); btn_jaune=new JButton("Jaune"); btn_jaune.setBackground(Color.yellow); btn_jaune.addActionListener(new ColorActionListener(Color.YELLOW)); btn_rouge=new JButton("Rouge"); btn_rouge.setBackground(Color.red); btn_rouge.addActionListener(new ColorActionListener(Color.RED)); btn_vert=new JButton("Vert"); btn_vert.setBackground(Color.green); btn_vert.addActionListener(new ColorActionListener(Color.GREEN)); btn_noir=new JButton("Noir"); btn_noir.setBackground(Color.black); btn_noir.addActionListener(new ColorActionListener(Color.BLACK)); //Ajout des boutons à la zone du bas zone_bas.add(btn_bleu); zone_bas.add(btn_jaune); zone_bas.add(btn_rouge); zone_bas.add(btn_vert); zone_bas.add(btn_noir); //Enregistrement des recepteurs d'action btn_bleu.addActionListener(boutonforme); btn_jaune.addActionListener(boutonforme); btn_rouge.addActionListener(boutonforme); btn_vert.addActionListener(boutonforme); btn_noir.addActionListener(boutonforme); //Placement de la zone du bas getContentPane().add(BorderLayout.SOUTH, zone_bas); //Création de la zone du centre zone_centre=new Dessin(); zone_centre.addMouseListener(zone_centre); zone_centre.setBackground(Color.white); //Placement de la zone du centre getContentPane().add(BorderLayout.CENTER, zone_centre); } public class BoutonForme extends JButton implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //Affichage dans les labels sur click du bouton if (e.getSource()== btn_triangle){ lbl_forme.setText("Triangle"); zone_centre.setFormeCourante(FORME.TRIANGLE); }else if (e.getSource()== btn_carre){ lbl_forme.setText("Carre"); zone_centre.setFormeCourante(FORME.RECTANGLE); }else if (e.getSource()== btn_cercle){ lbl_forme.setText("Cercle"); zone_centre.setFormeCourante(FORME.CERCLE); }else if (e.getSource()== btn_raz){ lbl_forme.setText("RAZ"); lbl_couleur.setText("RAZ"); } if (e.getSource()== btn_bleu){ lbl_couleur.setText("Bleu"); }else if (e.getSource()== btn_jaune){ lbl_couleur.setText("Jaune"); }else if (e.getSource()== btn_rouge){ lbl_couleur.setText("Rouge"); }else if (e.getSource()== btn_vert){ lbl_couleur.setText("Vert"); }else if (e.getSource()== btn_noir){ lbl_couleur.setText("Noir"); } } } }
Maintenant que tes boutons de couleur mettent la couleur qui leur correspond dans la variable couleurCourante,
modifie ta classe Forme pour quelle puisse "être colorée" :
Bon, c'est une façon un peu lazy de faire, mais ça ira dans ton cas (ajouter éventuellement une méthode :
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 abstract class Forme{ protected int x; protected int y; protected int width; protected int height; protected Color color; public Forme(int x, int y, int width, int height){ this.x=x; this.y=y; this.width=width; this.height=height; this.color=couleurCourante; } public abstract void draw(Graphics2D g); public abstract void fill(Graphics2D g); }
pour changer la couleur d'une forme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void setCouleur(Color color) { this.color=color; }
Attention, toutefois, il n'y a pas de valeur par défaut dans couleurCourante : veille à en mettre une, par exemple lors de sa déclaration :
Ensuite, il faut prendre en compte cette couleur lors du dessin :
Code : Sélectionner tout - Visualiser dans une fenêtre à part private Color couleurCourante=Color.BLACK;
- soit tu le fais à l'extérieur de la classe Forme :
Ajoutes la méthode suivante à ta classe Forme pour connaitre la couleur de la forme, depuis l'exterieur de la classe
et modifie ta méthode de dessin :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public Color getCouleur() { return this.color; }
Si tu veux dessiner une forme pleine dans la couleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Override //Affichage de la liste dans paintComponent public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d=(Graphics2D)g; for(Forme forme : liste){ g2d.setColor(forme.getCouleur()); forme.draw(g2d); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 @Override //Affichage de la liste dans paintComponent public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d=(Graphics2D)g; for(Forme forme : liste){ g2d.setColor(forme.getCouleur()); // on chosite la couleur de fond de la forme forme.fill(g2d); // on remplie la forme avec la couleur choisie g2d.setColor(Color.BLACK); // on choisit du noir pour la bordure forme.draw(g2d); // on dessine la bordure de la forme } }
Bonjour,
C'est bon j'ai réussi à faire touts ce que je voulais.
La seul chose qui ne fonctionne pas c'est le bouton RAZ pour effacer le panel.
J'ai fait une classe Raz() qui contient liste.clear() et que j'appel lorsque je clique sur le bouton RAZ.
Mais cela n'efface pas les figures.
Voila mon code.
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301 package tp.dessinons; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** * * @author pinps */ public class FenPrincipal extends JFrame { private JButton btn_triangle; private JButton btn_carre; private JButton btn_cercle; private JButton btn_raz; private JLabel lbl_forme; private JLabel lbl_couleur; private JButton btn_bleu; private JButton btn_jaune; private JButton btn_rouge; private JButton btn_vert; private JButton btn_noir; private Dessin zone_centre; public static void main(String[] args) { //Description de la fenetre principal FenPrincipal fen=new FenPrincipal(); fen.setTitle("Dessinons"); fen.setSize(520,300); fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fen.setVisible(true); } public enum FORME{ RECTANGLE, CERCLE, TRIANGLE, RAZ; } public class Dessin extends JPanel implements MouseListener{ //Création de la liste ArrayList<Forme> liste; public Dessin(){ liste=new ArrayList<>(); } private FORME formeCourante; public void setFormeCourante(FORME formeCourante){ this.formeCourante=formeCourante; } private Color couleurCourante; public void setCouleurCourante(Color couleurCourante){ this.couleurCourante=couleurCourante; } //Ajout de la forme à la liste @Override public void mouseClicked(MouseEvent e){ int x=e.getX(); int y=e.getY(); Forme forme; switch(formeCourante){ case RECTANGLE : forme=new FormeRectangle(x,y,20,20,this.couleurCourante); break; case CERCLE : forme=new FormeEllipse(x,y,20,20,this.couleurCourante); break; case TRIANGLE : forme=new FormeTriangle(x,y,20,20,this.couleurCourante); break; case RAZ : forme=null; zone_centre.Raz(); default : return; } liste.add(forme); repaint(); }; @Override public void mouseEntered(MouseEvent e){}; @Override public void mouseExited(MouseEvent e){}; @Override public void mousePressed(MouseEvent e){}; @Override public void mouseReleased(MouseEvent e){}; private void Raz() { liste.clear(); } public abstract class Forme{ protected int x; protected int y; protected int width; protected int height; protected Color color; public Forme(int x, int y, int width, int height,Color color){ this.x=x; this.y=y; this.width=width; this.height=height; this.color=color; } public abstract void draw(Graphics2D g); public abstract void fill(Graphics2D g); } //Classe de forme public class FormeRectangle extends Forme { public FormeRectangle (int x, int y, int width, int height, Color color){ super(x, y, width, height, color); } @Override public void draw(Graphics2D g){ g.setColor(color); g.drawRect(x, y, width, height); } @Override public void fill(Graphics2D g){ g.setColor(color); g.setBackground(color); g.fillRect(x, y, width, height); } } public class FormeEllipse extends Forme{ public FormeEllipse(int x, int y, int width, int height, Color color){ super(x, y, width, height, color); } @Override public void draw(Graphics2D g){ g.setColor(color); g.drawOval(x, y, width, height); } @Override public void fill(Graphics2D g){ g.setColor(color); g.setBackground(color); g.fillOval(x, y, width, height); } } public class FormeTriangle extends Forme{ private int[] xtriangle; private int[] ytriangle; public FormeTriangle(int x, int y, int width, int height, Color color){ super(x, y, width, height, color); xtriangle=new int[]{x, x+width/2, x+width}; ytriangle=new int[]{y+height, y, y+height}; } @Override public void draw(Graphics2D g){ g.setColor(color); g.drawPolygon(xtriangle, ytriangle, 3); } @Override public void fill(Graphics2D g){ g.setColor(color); g.setBackground(color); g.fillPolygon(xtriangle, ytriangle, 3); } } @Override //Affichage de la liste dans paintComponent public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d=(Graphics2D)g; for(Forme forme : liste){ forme.draw(g2d); forme.fill(g2d); } } } public FenPrincipal(){ BoutonForme boutonforme=new BoutonForme(); //Création de la zonne du haut JPanel zone_haut=new JPanel(); //Création de boutons et libéllés btn_triangle=new JButton("Triangle"); btn_carre=new JButton("Carré"); btn_cercle=new JButton("Cercle"); btn_raz=new JButton("RAZ"); JLabel lbl_formetxt=new JLabel("Forme : "); lbl_forme=new JLabel(); JLabel lbl_couleurtxt=new JLabel("Couleur : "); lbl_couleur=new JLabel(); //Ajout des boutons et libellés à la zonne du haut zone_haut.add(btn_triangle); zone_haut.add(btn_carre); zone_haut.add(btn_cercle); zone_haut.add(btn_raz); zone_haut.add(lbl_formetxt); zone_haut.add(lbl_forme); zone_haut.add(lbl_couleurtxt); zone_haut.add(lbl_couleur); //Enregistrement du recepteur d'action btn_triangle.addActionListener(boutonforme); btn_carre.addActionListener(boutonforme); btn_cercle.addActionListener(boutonforme); btn_raz.addActionListener(boutonforme); //Placement de la zone du haut getContentPane().add(BorderLayout.NORTH, zone_haut); //Création de la zone du bas JPanel zone_bas=new JPanel(); //Création des boutons de la zone du bas btn_bleu=new JButton("Bleu"); btn_bleu.setBackground(Color.blue); btn_jaune=new JButton("Jaune"); btn_jaune.setBackground(Color.yellow); btn_rouge=new JButton("Rouge"); btn_rouge.setBackground(Color.red); btn_vert=new JButton("Vert"); btn_vert.setBackground(Color.green); btn_noir=new JButton("Noir"); btn_noir.setBackground(Color.black); //Ajout des boutons à la zone du bas zone_bas.add(btn_bleu); zone_bas.add(btn_jaune); zone_bas.add(btn_rouge); zone_bas.add(btn_vert); zone_bas.add(btn_noir); //Enregistrement des recepteurs d'action btn_bleu.addActionListener(boutonforme); btn_jaune.addActionListener(boutonforme); btn_rouge.addActionListener(boutonforme); btn_vert.addActionListener(boutonforme); btn_noir.addActionListener(boutonforme); //Placement de la zone du bas getContentPane().add(BorderLayout.SOUTH, zone_bas); //Création de la zone du centre zone_centre=new Dessin(); zone_centre.addMouseListener(zone_centre); zone_centre.setBackground(Color.white); //Placement de la zone du centre getContentPane().add(BorderLayout.CENTER, zone_centre); } public class BoutonForme extends JButton implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //Affichage dans les labels sur click du bouton if (e.getSource()== btn_triangle){ lbl_forme.setText("Triangle"); zone_centre.setFormeCourante(FORME.TRIANGLE); }else if (e.getSource()== btn_carre){ lbl_forme.setText("Carre"); zone_centre.setFormeCourante(FORME.RECTANGLE); }else if (e.getSource()== btn_cercle){ lbl_forme.setText("Cercle"); zone_centre.setFormeCourante(FORME.CERCLE); }else if (e.getSource()== btn_raz){ lbl_forme.setText("RAZ"); lbl_couleur.setText("RAZ"); } if (e.getSource()== btn_bleu){ lbl_couleur.setText("Bleu"); zone_centre.setCouleurCourante(Color.blue); }else if (e.getSource()== btn_jaune){ lbl_couleur.setText("Jaune"); zone_centre.setCouleurCourante(Color.yellow); }else if (e.getSource()== btn_rouge){ lbl_couleur.setText("Rouge"); zone_centre.setCouleurCourante(Color.red); }else if (e.getSource()== btn_vert){ lbl_couleur.setText("Vert"); zone_centre.setCouleurCourante(Color.green); }else if (e.getSource()== btn_noir){ lbl_couleur.setText("Noir"); zone_centre.setCouleurCourante(Color.black); } } } }
Salut,
rappelles-toi ce que j'ai dit dans le post 20 : toujours prévenir la vue qu'elle doit se redessiner quand on change l'état qui est dessiné.
Parce que le panel Dessin ne peut pas deviner que tu as vidé la liste de formes...
Donc, dans ta méthode raz() de Dessin, ajoutes un repaint() juste après le liste.clear().
J'ai exactement le même résultat avec
le problème est peut-être que j'appel la classe Raz?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private void Raz() { liste.clear(); repaint(); }
C'est bon j'ai mis le zone_centre.Raz() dans le action performed à la fin de mon code.
Je te remercie encor pour ton aide et ta patience.
Je n'y serai jamais arrivé sans toi.
Cool
J'adore quand les participants finissent par régler leur problème tout seul
Bonne continuation.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager