Pour développer notre application, nous allons utiliser la librairie SimpleGraphics.java
Dans un premier temps, téléchargez et exécutez: SimpleGraphicsExample.java
Modifier l'exemple pour afficher les deux diagonales (sous forme de lignes) en plus du rectangle.
Il faut lire la Javadoc de Graphics2D!
Modifier l'exemple pour afficher une ellipse (inscrite) dans le rectangle.
Toutes vos classes pour cet exercice doivent être dans le package fr.uge.poo.paint.ex2 et votre application dans une classe Paint de ce package.
On souhaite prendre en paramètre du programme un fichier simple
contenant la description de diffèrentes figures; pour l'instant on supposera que
le fichier ne décrit que des lignes.
Le format d'une ligne est le suivant : "line x0 y0 x1 y1".
line 0 0 100 100 line 0 50 100 50
Le programme Paint doit lire le fichier, stocker l'ensemble des figures dans une liste, puis dessiner celles-ci sur l'écran.
On peut lire un fichier ligne à ligne en utilisant le code suivant:
Path path = Paths.get("figures.txt"); try(Stream<String> lines = Files.lines(path)) { lines.forEach(line -> System.out.println(line)); }Pour décomposer une ligne en "mots" on peut utiliser
String.split
et
Integer.parseInt
comme ceci:
String[] tokens = text.split(" "); int x1 = Integer.parseInt(tokens[1]); int y1 = Integer.parseInt(tokens[2]); int x2 = Integer.parseInt(tokens[3]); int y2 = Integer.parseInt(tokens[4]);
Ecrire le code qui prend un fichier en tant que premier argument de la ligne
de commande, qui lit celui-ci et stocke l'ensemble des lignes dans une liste.
Puis, dessiner la liste des lignes précédemment obtenues en utilisant la librairie SimpleGraphics
.
Vous pouvez tester avec le fichier draw1.txt
Toutes vos classes pour cet exercice doivent être dans le package fr.uge.poo.paint.ex3. Recopiez vos classes de l'exercice précédent dans ce nouveau package.
On souhaite modifier le programme précédent pour traiter les fichiers décrivant à la fois des lignes, des ellipses et des rectangles.
Le format du fichier d'entrée est étendu naturellement.
Par simplicité, l'ordre des paramètres pour décrire un rectangle ou un ellipse est le même que ceux des fonctions Graphics2D.drawRect
et Graphics2D.drawOval
.
Vous pouvez tester en utilisant le fichier draw2.txt
Toutes vos classes pour cet exercice doivent être dans le package fr.uge.poo.paint.ex4. Recopiez vos classes de l'exercice précédent dans ce nouveau package.
On souhaite afficher sur la console (au moins dans un premier temps)
la figure la plus proche de l'endroit où l'utilisateur a cliqué.
Pour que les choses soient simples, la figure la plus proche est définie
comme étant la figure qui a son centre à la distance la plus courte
par rapport aux coordonnées de la souris.
La distance entre deux points se calcule avec pythagore et il n'est pas nécessaire de faire une racine carrée car on peut comparer les carrés !
Le code suivant illustre comment on peut écouter les clics de la souris
SimpleGraphicsExampleClick.java
Comment devez-vous modifier votre programme pour prendre en compte cette nouvelle fonctionnalité ?
Il faut gérer l'absence de sélection.
Si vous ne l'avez pas déjà fait, il faut encapsuler la liste des figures dans une classe. Pourquoi est-ce nécessaire ?
Il y a beaucoup de code dupliqué entre Ellipse et Rectangle. Factoriser ce code sans que cela soit visible pour un utilisateur du package.
Toutes vos classes pour cet exercice doivent être dans le package fr.uge.poo.paint.ex5. Recopiez vos classes de l'exercice précédent dans ce nouveau package.
Modifier le programme précédent pour que au lieu d'afficher la selection sur la console, la figure selectionnée s'affiche en orange.
Sachant que l'on veut garder la figure étant selectionnée dans un champ pour la suite, expliquer pourquoi stocker une couleur dans chaque figure est une erreur.
Implanter le code !