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.