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 ());
}
}
} |
Partager