TP Programmation par objets - Java, Licence Informatique, Sept-Déc 2004, Université de Montpellier II
Enseignant resp : Jacques Ferber,ferber@lirmm.fr
TP 7: Dessin et évènement
Dans cette partie nous allons définir une hiérarchie de classe modélisant un ensemble d'objets graphiques élémentaires.
Exercice 1: Ecrire le code des différentes classes nécessaires à l'implémentation de la hiérarchie suivante :
Avec les méthodes (on utilisera la classe java.awt.Point pour représenter des points):
- Dans la classe Figure (Figure sera considérée comme une classe abstraite) :
Figure(), constructeur vide.
void setColor(Color c), fixe la couleur de l'objet.
String getName().
Color getColor().
void draw(Graphics g), qui dessine l'objet dans g.
boolean contains(int x,int y), vrai ssi l'objet contient le point (x,y).
- Dans la classe Line :
Ligne() et Ligne(int x1, int y1, int x2, int y2), pour les constructeurs.
void setExtremity1(Point p),
void setExtremity2(Point p),
Point getExtremity1().
Point getExtrimity2().
- Dans la classe Rectangle :
Rectangle() et Rectangle(Point pos,int w,int h).
void setLocation(Point p), change la position du sommet en haut à gauche.
void setDimension(int w, int h), change les dimensions du rectangle.
Point getLocation().
int getWidth().
int getHeight().- Dans la classe Circle :
Circle() et Circle(Point c,int r).
void setLocation(Point p), change la position du centre du cercle.
void setRayon(int r), change le rayon.
Point getLocation().
int getRayon().
Note: a)les méthodes draw()
et contains()
doivent être réécrites dans chacune des classes Line,
Rectangle
et Circle
pour pouvoir tenir compte des spécificités
et des paramètres de ces figures géométriques.
b) dans un premier temps la méthode contains()
de Line retournera
systématiquement false
.
Exercice 2: Créer une application
TestGraphic
, héritant de JFrame
. Créer
un composant DrawComponent
, inscrit dans TestGraphic
,
qui affiche 3 cercles et un rectangle, dont voici les caractéristiques
:
Circle1 x = 200,y = 200,r = 100 ;
Circle2 x = 160,y = 150,r = 20 ;
Circle3 x = 240,y = 150,r = 20
et le Rectangle x = 150,y = 220,w = 100, h = 40. (voir 3.0)
Exercice 3: Ajouter à la classe TestGraphic
la méthode
changeColor(ObjetGraphique o) qui change la couleur de l'objet graphique
o en lui attribuant la couleur suivant la sienne dans la liste circulaire
: ( Color.black, Color.blue , Color.cyan, Color.red, Color.green, Color.magenta,
Color.orange, Color.yellow )
Exercice 4: Modifier l'application TestGraphic
pour capturer
les évènements de la souris (voir 3.4). Chaque click de l'utilisateur
dans l'un des objets graphiques doit provoquer un changement de couleur de l'objet
pointé.
Exercice 5: Créer un dialogue
(un dialogue est simplement une classe de type JDialog
qui se
manipule comme s'il s'agissait d'une JFrame
) qui permette d'entrer
des paramètres
(couleur, taille) permettant de construire des lignes, des cercles et des rectangles.
Donnez la possibilité de pouvoir créer directement de telles
figures
à l'aide de boutons "Rectangle", "Ligne" et "Cercle".
Lorsque vous cliquez sur un de ces boutons et qu'ensuite vous cliquez sur
le
DrawComponent
, alors une figure de l'un de ces types est affichée
à l'endroit où vous venez de cliquer.
Exercice 6: Donnez la possibilité
de bouger les figures. Pour cela récupérer la figure dans laquelle
vous avez cliqué (méthode contains
définie
plus haut). Utilisez ensuite un listener de type MouseMotionListener
qui gère les déplacements de la souris.
3.1 La classe Graphics : cette classe fournit des méthodes permettant
de dessiner dans une fenêtre graphique.
Vous devez importer la librairie awt avec : import java.awt.*;
Voici quelques exemples d'appel de méthodes: soit g une instance de Graphics :
- pour tracer une ligne reliant les points (x1,y1) et (x2,y2):
g.drawLine(x1,y1,x2,y2);
- pour dessiner un rectangle à la position (x,y) ,
sommet supérieur gauche, de largeur w et de hauteur h:
g.drawRect(x,y,w,h);
- pour dessiner un cercle de centre (X,Y) et de rayon R : g.drawOval(X-R,
Y-R, R*2, R*2);
- pour changer la couleur du prochain dessin :
g.setColor(Color.white); //Color.white est la couleur blanche
3.2 Un cercle (X,Y) de rayon R, contient un point (x,y) ssi : ((x-X)²+(y-Y)²) <= R²
Site des infos concernant le module de programmation par objets en licence:
http://www.lirmm.fr/~ferber/Licence