Blame view

src/tp2/cr 2.96 KB
0d83ec1e   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
  L'intégralité du tp a été réalisé. la suite du compte rendu décrit les difficultés rencontrées.
  
  Question 1:
  Il a été n 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 de 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.
  
  Question 7:
  Il y avait un bug au début ou j'avais oublié de mettre
  un message par défault pour le label, il n'y avait donc rien d'affiché quand on lançait le programme.
  
  Question 8:
  J'ai beaucoup eu de mal sur cette question car je n'avais pas vu le fichier ArdoiseMagique pour gérer le dessin.
  J'ai donc fait mon propre composant ArdoiseMagique 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.
  
  Question 9:
  Pour cette question, je n'arrivais pas à faire en sorte, dans la partie droite de l'interface,
  que le JPanel prenne la hauteur restante 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 methode 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 change
  plusieurs composantes à la fois (r, g, b).
  
  --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.