PARTIE 1 : une hiérarchie d'objets graphiques
Dans cette partie, nous allons définir une petite hiérarchie de classe modélisant un ensemble d'objets graphiques élémentaires. Cette hiérarchie est illustrée par la figure suivante :Exercice 1:
Créerez un nouveau projet "dessin" dans votre workspace sous eclipse. Ajoutez un package appelé dessin dans lequel vous mettrez les différentes classes de la hiérarchie.
Exercice 2:
Écrire le code de la classe ObjetGraphique en respectant les spécifications suivantes :
-- ObjetGraphique est une classe abstraite (utiliser le mot clé abstract pour la définir) : il sera impossible de l'instancier mais elle définit un certain nombre de méthodes qui devront être implémentées dans les sous classes.
-- ObjetGraphique possède :
- un attribut privé appelé couleur de type javafx.scene.paint.Color.
- des méthodes qui permettent d'accéder et de modifier l'attribut couleur
- deux constructeurs différents : un constructeur sans argument qui donne par défaut la couleur noire à l'objet graphique. Un deuxième constructeur prenant un argument qui permet d'initialiser la couleur à souhait.
- une méthode abstraite appelée dessineToi qui prend en argument un objet de type javafx.scene.canvas.GraphicsContext et qui ne retourne rien .
- une méthode abstraite appelée contient qui prend en argument deux entiers et qui retourne vrai ou faux.
Dans les sous classes, la méthode dessineToi servira à appliquer les opérations d'affichage des objets. La méthode contient servira quant à elle à savoir si un point se trouve à l'intérieur de l'objet graphique correspondant à l'instance.
javafx.scene.paint.Color javafx.scene.canvas.GraphicsContext |
Exercice 3:
Il existe déjà une classe Rectangle dans l'API JavaFX. Il faudra donc s'en servir d'une manière ou d'une autre de manière à ne pas réécrire des choses qui existent déjà. Cependant, nous souhaitons définir un objet qui hérite de la classe ObjetGraphique de manière à hériter des méthodes que nous avons définies précédemment. Nous ne pouvons donc pas nous servir directement de la classe javafx.geometry.Rectangle2D de JavaFX. Ainsi, nous allons définir notre propre classe Rectangle qui va encapsuler la classe Rectangle2D de Java, sous la forme d'un attribut, de manière à pouvoir l'utiliser comme nous le souhaitons tout en bénéficiant des méthodes définies dans la classe ObjetGraphique.
Ecrire la classe Rectangle en prenant bien en compte les considérations précédentes.
Voici par ailleurs des spécifications supplémentaires :
Notre classe Rectangle devra posséder au moins trois constructeurs dont voici les signatures :
- public Rectangle(int x, int y, int largeur, int hauteur)
- public Rectangle(Point2D p, int largeur, int hauteur)
- public Rectangle(Point2D p, int largeur,int hauteur,Color c)
Vous pouvez par ailleurs ajouter un constructeur par défaut (sans argument)
Notre classe Rectangle n'est pas une classe abstraite : vous devrez implémenter les méthodes dessineToi et contient. En ce qui concerne la méthode dessineToi, vous analyserez la classe javafx.scene.canvas.GraphicsContext : c'est sur cet objet que vous devrez appliquer les opérations correspondant à l'affichage de l'objet graphique. Quoi qu'il en soit, n'oubliez pas de bien regarder les API suivantes :
java.awt.Point java.awt.Graphics |
javafx.geometry.Rectangle2D javafx.geometry.Point2D javafx.scene.canvas.GraphicsContext |
Exercice 4:
Pour la classe Cercle, utilisez le même principe que pour le rectangle. Voici cependant quelques spécifications et indications :
La classe Cercle doit posséder au moins les deux constructeurs ayant les signatures suivantes :
- public Cercle(Point2D centre,int rayon)
- public Cercle(Point2D centre, int rayon, Color couleur)
Pour implémenter la méthode dessineToi, il y existe deux possibilités de dessinier un cercle: trouvez lesquelles.
Partie 2 : l'application
Exercice 5:
Dans un package toto, vous créez une classe Toto qui sera une extension de la classe javafx.application.Application, et ainsi une application à part entière.
Cette fenêtre doit avoir une dimension de 400 par 400 pixels et fermer la JVM lorsque l'on clique sur le bouton fermer .
Ecrire le programme qui permet d'afficher la fenêtre et de la visualiser : implémenter la méthode public static void main(String[] args) dans la classe Toto.
javafx.application.Application |
Exercice 6:
Dans ce même package, vous créerez une classe TotoPane, extension de la classe javafx.scene.layout.BorderPane par exemple. Le but de cette classe est de gérer une liste d'objets graphiques et leur affichage. Voici la liste des objets qui doivent être gérés par la liste :
Un cercle avec x=200,y=200,r=100
un deuxième cercle avec x=160,y=150,r=20
un troisième avec Cercle3 x=240,y=150,r=20
et un Rectangle x=150,y=220,l=100, h=40
javafx.scene.canvas.Canvas |
Exercice 7:
Faites en sorte que la classe ainsi définie soit ajoutée à l'application FX définie dans l'exercice 5.
Exécuter et corriger éventuellement les différentes classes que nous avez faites jusqu'à présent pour obtenir un résultat correct.
javafx.scene.Scene javafx.stage.Stage |
Partie 3 : écoute des interactions utilisateurs
Exercice 8:
Rajouter à la fenêtre 4 boutons qui permettront d'activer et de désactiver le dessin de chaque objet graphique : un bouton par objet graphique.
javafx.scene.control.Button javafx.event.EventHandler |
Exercice 9:
Soit la liste de couleurs suivante : noir, bleu, vert, rouge, orange, blanc. Faites en sorte de traiter les interactions utilisateurs de la manière suivante : lorsqu'on clique à l'intérieur d'un objet graphique, ce dernier change de couleur en prenant la suivante dans la liste (si la couleur est la dernière de la liste, c'est-à-dire blanc, on recommence avec le noir)
Exercice 10:
Rajouter un bouton de type CheckBox permettant d'activer le remplissage des formes.
Exercice 11:
Ecrivez de la documention pour l'ensemble de vos méthodes.
Pour exporter la javadoc sans problème lié au principe des modules : à la fin de ce post.
Pour l'export en jar, sous Eclipse, sélectionner runnable jar -> puis l'option "package require libraries..."