Bonjour,

ci dessous le code de mon applet.
le principe est de dessiner des rectangles, trait, cercle....
Mais par contre je voudrais que les dessins reste (comme dans paint par exemple)
mais la à chaque fois que je dessine quelquechose, mon obkjet précédent est détruit.
je pense que c'est tout simple mais bon...

je vous remercie tous pour votre aide.

A++


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
import java.applet.Applet;
import java.awt.*;
import java.util.Random;
 
public class DrawIt extends Applet
{
private CheckboxGroup choixDessin = new CheckboxGroup ();
private Panel zoneDessin = new DrawItComponent (choixDessin);
 
public void init ()
{
// Choix d'un layout BorderLayout (FlowLayout par défaut)
setLayout (new BorderLayout ());
// Création de boutons radios permettant de choisir
// la fonction de dessin à utiliser
Panel panel = new Panel ();
panel.setLayout (new GridLayout (7, 1));
panel.add (new Checkbox ("Ligne", choixDessin, true));
panel.add (new Checkbox ("Rectangle", choixDessin, false));
//panel.add (new Checkbox ("Rectangle 3D", choixDessin, false));
panel.add (new Checkbox ("Polygone", choixDessin, false));
panel.add (new Checkbox ("Ovale", choixDessin, false));
panel.add (new Checkbox ("Arc de cercle", choixDessin, false));
panel.add (new Checkbox ("Texte", choixDessin, false));
// Ajout à droite des boutons radios
add ("East", panel);
// Ajout au centre de la zone de saisie
add ("Center", zoneDessin);
}
}
 
// Classe DrawItComponent
class DrawItComponent extends Panel
{
private int xDebut, yDebut,
xFin, yFin;
private CheckboxGroup choixDessin;
private Color couleurDessin;
private int angleDebut, angle;
private String typeDessin = "";
 
// Constructeur
DrawItComponent (CheckboxGroup choixDessin)
{
this.choixDessin = choixDessin;
}
 
// Méthodes mouseDown (), mouseDrag (), mouseUp ()
// appelées à l'enfoncement du bouton de la souris,
// au déplacement du pointeur, et au relâchement du bouton
public boolean mouseDown (Event evt, int x, int y)
{
xDebut = x;
yDebut = y;
dessinerElastique (x , y);
return true;
}
 
public boolean mouseDrag (Event evt, int x, int y)
{
// Effacement du rectangle aux anciennes coordonnées
// puis dessin d'un nouveau rectangle aux coordonnées courantes
dessinerElastique (xFin, yFin);
dessinerElastique (x, y);
return true;
}
 
public boolean mouseUp (Event evt, int x, int y)
{
// Effacement du dernier rectangle dessiné 
dessinerElastique (xFin, yFin);
// Récupération du type de dessin demandé, d'une couleur et deux angles
// et redessin du composant
typeDessin = choixDessin.getCurrent ().getLabel ();
Random generateur = new Random ();
couleurDessin = new Color (generateur.nextFloat (),
generateur.nextFloat (),
generateur.nextFloat ());
angleDebut = generateur.nextInt () % 360;
angle = generateur.nextInt () % 360;
repaint ();
 
return true;
}
 
// Méthode dessinerElastique () : mémorise les coordonnées
// courantes, puis trace un rectangle en mode XOR
private void dessinerElastique (int xFin, int yFin)
{
this.xFin = xFin;
this.yFin = yFin;
Graphics gc = getGraphics ();
gc.setXORMode (getBackground ());
gc.drawRect (Math.min (xDebut, xFin), Math.min (yDebut, yFin),
Math.abs (xFin - xDebut), Math.abs (yFin - yDebut));
}
 
// Méthode appelée à la mise à jour du composant
public void paint (Graphics gc)
{
// Sélection de la couleur
gc.setColor (couleurDessin);
// Appel de la méthode de dessin suivant le type de dessin choisi
int x = Math.min (xDebut, xFin);
int y = Math.min (yDebut, yFin);
int largeur = Math.abs (xFin - xDebut);
int hauteur = Math.abs (yFin - yDebut);
if (typeDessin.equals ("Ligne"))
gc.drawLine (x, y, x + largeur, y + hauteur);
else if (typeDessin.equals ("Rectangle"))
gc.fillRect (x, y, largeur, hauteur);
else if (typeDessin.equals ("Rectangle 3D"))
gc.fill3DRect (x, y, largeur, hauteur, true);
else if (typeDessin.equals ("Polygone"))
{
int xPoints [ ] = {x, x , x + largeur, x + largeur};
int yPoints [ ] = {y, y + hauteur, y, y + hauteur};
gc.fillPolygon (xPoints, yPoints, xPoints.length);
}
else if (typeDessin.equals ("Ovale"))
gc.fillOval (x, y, largeur, hauteur);
else if (typeDessin.equals ("Arc de cercle"))
{
gc.drawOval (x, y, largeur, hauteur);
gc.fillArc (x, y, largeur, hauteur, angleDebut, angle);
}
else if (typeDessin.equals ("Texte"))
{
gc.setFont (new Font ("Helvetica", Font.PLAIN, hauteur));
FontMetrics tailles = gc.getFontMetrics ();
gc.drawString ("Texte", x, y + tailles.getAscent ()
+ tailles.getLeading ());
}
}
}