Dessiner avec Java
Tout affichage (texte ou dessin) se fait en utilisant la classe
Graphics qui fournit de nombreuses méthodes.
La classe Graphics
Le constructeur de la classe Graphics est déclaré protected. On ne
peut donc pas créer directement des variables de type Graphics; on
les obtient avec des méthodes spécifiques comme getGraphics
dans la classe Component ou comme paramètre de la méthode paint.
Couleurs et fontes
Lorsqu'on utilise le paramètre de type Graphics fourni par la méthode
paint, le composant lui attribue une couleur de dessin (définie par
setForeground) et une fonte par défaut (définie par setFont). Ces valeurs
peuvent être modifiées par des méthodes de la classe Graphics.
- setColor(Color) permet de fixer une nouvelle couleur
de dessin
- setFont(Font) permet de choisir une nouvelle fonte.
D'autre part, on peut obtenir une variable de type FontMetrics
correspondant à la fonte en cours en utilisant la méthode getFontMetrics().
L'affichage de texte se fait avec la méthode drawString(String, int, int)
déjà rencontrée.
Dessin et remplissage de formes
La classe Graphics permet de dessiner et de remplir des figures
ayant des formes élémentaires. La méthode de dessin est préfixée par
"draw", la méthode de remplissage est préfixée par "fill".
- Segments et suites de segments
drawLine(int, int, int, int) permet de tracer un segment;
les 4 paramètres sont les coordonnées des extrémités.
Pour une suite de segments, on pourra utiliser drawPolyline(int[], int[], int)
les tableaux d'entiers passés en paramètre contiennent les coordonnées
des points à relier; le 3ème paramètre est le nombre de points; si le premier et le dernier point
sont confondus, on retrouve drawPolygon.
- Rectangles
drawRect(int, int, int, int) et fillRect(int, int, int, int)
pour dessiner et remplir des rectangles aux côtés verticaux
et horizontaux; les deux premiers paramètres représentent les coordonnées
du coin supérieur gauche, les deux autres représentent la largeur et
la hauteur.
On peut obtenir des rectangles à coins arrondis avec les méthodes
drawRoundRect(int, int, int, int, int, int) et fillRoundRect(int, int, int, int, int, int);
dans ce cas les deux derniers paramètres définissent la façon de faire les arrondis.
On peut aussi dessiner des rectangles avec effet 3D (on n'utilise pas
la même couleur pour les 4 côtés) en utilisant draw3DRect(int, int, int, int, boolean) et
fill3DRect(int, int, int, int, boolean); le 5ème paramètre de type
boolean permet de choisir entre deux effets : en relief ou en creux.
- Polygones
drawPolygon(int[], int[], int) et fillPolygon(int[], int[], int)
pour dessiner et remplir des polygones; les deux tableaux
d'entiers contiennent les coordonnées des sommets, le 3ème
paramètre contient le nombre de sommets.
On peut aussi utiliser la classe Polygon et les méthodes drawPolygon(Polygon)
et fillPolygon(Polygon)
- Ellipses et cercles
drawOval(int, int, int, int) et fillOval(int, int, int, int)
pour dessiner et remplir des ellipses inscrites dans le rectangle dont les
caractéristiques sont passées en paramètre; pour obtenir un cercle,
il suffit de prendre la largeur égale à la hauteur, donc les deux
derniers paramètres égaux.
- Arcs
drawArc(int, int, int, int, int, int) et fillArc(int, int, int, int, int, int)
pour dessiner des arcs et remplir des secteurs circulaires; les 4
premiers paramètres définissent l'ellipse utilisée, les deux derniers les
angles de début et de fin de l'arc.
Ce petit tour d'horizon n'épuise pas toutes les possibilités
offertes par la classe Graphics.
Un exemple
Nous allons dessiner un petit paysage (prairie, ciel, maison, soleil)
dans un rectangle de 300 pixels sur 200.
Il suffira d'écrire la méthode paint de l'applet. Tout est une affaire
de coordonnées.
Ciel et prairie
On remplit deux rectangles en bleu et en vert.
//ciel
g.setColor(Color.blue);
g.fillRect(0,0,300,110);
//prairie
g.setColor(Color.green);
g.fillRect(0,110,300,90);
Le soleil
On se contentera d'un cercle jaune.
//soleil
g.setColor(Color.yellow);
g.fillOval(220,20,30,30);
Mur de la maison et porte
Un rectangle blanc, un contour en noir et quelques traits pour
la porte.
//mur de la maison
g.setColor(Color.white);
g.fillRect(80,100,50,70);
g.setColor(Color.black);
g.drawRect(80,100,50,70);
//porte
g.drawRect(90,140,20,30);
g.drawLine(110,155,105,155);
Toit de la maison
On se contentera d'un triangle rouge.
//toit en triangle
int[] x={80,130,105};
int[] y={100,100,50};
g.setColor(Color.red);
g.fillPolygon(x,y,3);
g.setColor(Color.black);
g.drawPolygon(x,y,3);
Résultat
Retour au menu