Un peu de dessin



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 :


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.

API

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 :


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 :

API

java.awt.Point

java.awt.Graphics




API

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 :


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.

API

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


API

javafx.scene.canvas.Canvas


N'oubliez pas que l'affichage d'un composant FX doit être appelé explicitement lors de l'initialisation et des interactions.



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.


API

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.

API

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..."