~ / TIS3 / AL / tps / 1-statemachine /
© 2007—2015 - Renaud Blanch
Le but de ce TP est d'apprendre à programmer une interaction en utilisant des machines à états avec la boîte à outils Swing de Java. Vous allez réaliser l'interaction pour un visualisateur du graphe d'une fonction.
Récupérez les sources du squelette de l'application.
Celles-ci fournissent dans le répertoire graphser/src/
2 packages : grapher.fc
et grapher.ui
(respectivement le noyau fonctionnel et l'interface graphique de notre programme).
Explorez le code pour comprendre ce qu'il fait.
Créez un nouveau projet nommé Grapher
à partir de ces sources (New Java Project with Existing Sources) en ajoutant le répertoire téléchargé grapher/src
à ce projet.
Exécutez la classe principale grapher.ui.Main
de ce projet pour vérifier que le code fonctionne bien.
Il s'agit de créer une classe Interaction
dans le paquet grapher.ui
qui permettra l'interaction à la souris avec le graphique (voir les interfaces des Listeners
proposées par MouseListener
et MouseMotionListener
réunies en MouseInputListener
; et MouseWheelListener
).
Créez la classe Interaction
.
Faites en sorte que chaque évènement souris affiche une trace dans la console permettant d'identifier le type de l'évènement ainsi que la position correspondante du curseur de la souris.
Faites en sorte que le drag, bouton gauche enfoncé, permette de déplacer le repère (en appelant la méthode translate(int dX, int dY)
de la classe Grapher
).
Changez le curseur (en appelant la méthode setCursor
héritée par la classe Grapher
) pour qu'il se transforme en une petite main à la place du curseur par défaut pendant le déplacement (voir la classe Cursor
).
Ajoutez le support au clic gauche qui doit permettre de zoomer de 5%, centré sur le curseur (en appelant la méthode de la classe Grapher
zoom(Point center, int dz)
avec 5 pour valeur de dz
).
Faites de même pour le clic droit qui doit permettre de dézoomer de 5%, centré sur le curseur (en appelant la méthode zoom(Point center, int dz)
avec -5 pour valeur de dz
).
Ajoutez enfin le support de la molette qui doit permettre de zoomer ou dézoomer, centré sur le curseur.
Ajoutez le support au drag, bouton droit enfoncé, qui doit permettre de sélectionner une zone rectangulaire, marquée par un rectangle pointillé, pour zoomer sur cette sélection lorsque le bouton est relâché.
Certains évènements souris ne sont pas utiles dans ce TP.
Pourtant, nous avons dû implémenter toutes les méthodes de l'interface MouseInputListener
, allourdissant inutilement notre code.
Dans ce genre de cas, Java/SWING propose d'utiliser des adaptateurs (adaptors, i.e. des classes concrètes avec des méthodes ne faisant rien) plutôt que des écouteurs (listeners, i.e. des interfaces avec seulement les prototypes des méthodes).
La classe adaptatrice implémente déjà chaque méthode de l'interface, et il suffit de spécialiser les méthodes nécessaires.
Remplacez le listener MouseInputListener
par l'adaptateur MouseInputAdapter
.
Supprimez (commentez) les méthodes inutiles pour la gestion des interactions de ce TP.
mise à jour : 4 mars 2019