5d736557
shaggy42089
tp2 done
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
### L'intégralité du tp a été réalisé. la suite du compte rendu décrit les difficultés rencontrées.
# Évènements
## Question 1:
Il a été un peu difficile d'obtenir une interface qui ressemble vraiment à l'énoncé car les principes
de setSize et de pack du tp précédent n'avaient pas été bien compris, pour augmenter la taille de la
police du JLabel, il a également fallu chercher un peu sur le net.
## Question 2, 3, 4, 5, 6:
Je n'ai pas vraiment rencontré de difficultés pour ces questions, j'avais déjà fait ce genre de choses auparavant.
# Méthode getSource
## Question 7:
Je n'avais pas mis de texte au départ pour le JLabel, lors du pack(),
la JFrame a donc alloué tout l'espace aux 3 boutons. Par conséquent, lorsque l'on clique
sur un bouton pour la première fois, le JLabel prend subitement de la place ce qui a pour effet de décaler
les boutons vers le bas ce qui les rends inaccessibles. J'ai résolu ce problème en mettant " " comme texte
par défaut au JLabel avant d'appeler pack().
On aurait aussi pu rendre la fenêtre redimensonnable.
# Aplication : Ardoise magique
## Question 8:
J'ai beaucoup eu de mal sur cette question car je n'avais pas vu au départ le fichier ArdoiseMagique donné avec
le sujet pour gérer le dessin. J'ai donc fait mon propre composant Ardoise ce qui a pris beaucoup de temps.
La tâche était particulièrement difficile car lorsque l'on reste appuyé sur le clic gauche de la souris et
qu'on la déplace, l'évènement correspondant à un déplacement de la souris n'est pas appelé sur chaque pixel,
il faut donc faire de l'interpolation. j'ai donc utilisé l'algorithme de la ligne de Bresenhan (https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)
qui permet de calculer tous les pixel formant une ligne entre deux pixels. Cette solution n'est d'ailleurs pas
la meilleure pour un petit nombre de points car cela relie simplement deux points par une ligne droite et cela donne
un résultat qui ne ressemble pas à la capture d'écran du sujet.
Au final j'ai fait une deuxième version dans Main2 qui utilise le fichier donnée avec le sujet
et le résultat fonctionne comme prévu.
# Sélecteur de couleur
## Question 9:
Pour cette question, je n'arrivais pas à faire en sorte, dans la partie droite de l'interface,
que le JPanel prenne toute la hauteur disponible car j'avais mis un boxlayout au départ, j'ai donc simplement changé pour un
borderlayout avec le champ de texte au dessus et le jpanel au centre.
## Question 10:
Il a été difficile de trouver une architecture "propre" et qui fonctionne pour cette question.
J'ai fini par créer un composant ColorPicker qui hérite de JPanel et auquel j'ai ajouté chaque
élément en attribut ainsi qu'une méthode updateAll qui met à jour l'état de tous les composants
à partir des valeurs r, g et b qui sont aussi des attributs.
### Listener pour les Sliders
Au départ, j'avais utilisé un ChangeListener pour détecter lorsque l'utilisateur change la valeur.
J'ai finalement opté pour un MouseAdapter car la méthode stateChanged était appelée à chaque fois que l'on
changeait la valeur du slider ce qui pouvait occasioner des bugs voire des boucles infinies lorsque l'on changeait
plusieurs composantes (r, g, b) à la fois.
### Listener pour les champs de texte
j'avais au départ trouvé une solution qui consistait à utiliser des DocumentListener
Mais cette solution comportait le même problème que pour les slider.
J'ai donc opté pour un KeyBoardAdapter où j'ai redéfini la méthode keyReleased,
l'actualisation de l'interface se fait donc lorsque l'on relâche une touche.
|