~ / TIS3 / AL / tps / 2-separable-model /

Modèle séparable ave Java/Swing

© 2007—2015 - Renaud Blanch

Le but de ce TP est de comprendre l'utilisation des modèles de la boîte à outils Swing de Java. Vous allez réaliser une vue multiple sur une même donnée : la liste des fonctions affichées par le grapher. Cette liste apparaîtra sous deux formes : une liste classique JList et la représentation des fonctions dans le grapher.

Squelette d'application

Récupérez les sources du squelette de l'application. Celles-ci fournissent dans le répertoire graphser/src/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. Ce code vous offre aussi une correction du TP précédent (machine à état dans grapher.ui.Interaction

Créez un nouveau projet nommé GrapherModel à 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. En particulier, la bare de menu propose un menu "Expression" avec une entrée "Add…" qui permet d'ajouter une fonction au grapher. Celle-ci est alors affichée dans le grapher, mais pas encore dans la liste qui est présente à droite du grapher.

Modèle séparable de liste

Faire en sorte que le grapher et la liste partagent le même modèle est le but de ce TP.

Il s'agit tout d'abord de faire en sorte que le grapher utilise une liste de fonctions qui puisse être mise en commun avec la JList. Il s'agit donc de modifier, la classe Grapher pour qu'elle utilise pour son attribut functions (qui stoke les fonctions) un DefaultListModel plutôt qu'un Vector. Modifiez la class Grapher en conséquence. Vérifiez que votre code fonctionne toujours.

Pour que la liste partage ce modèle avec le grapher, passez la JList en paramètre au grapher lorsqu'il est construit, et faites en sorte que le grapher partage son modèle avec celle-ci. Vérifiez maintenant que lorsque vous ajoutez une fonction, elle apparaît des deux côtés.

Faites en sorte que les fonctions sélectionnées par l'utilisateur dans la liste (JList.getSelectedIndices) apparaissent avec un trait épais sur le grapher (Graphics2D.setStroke et BasicStroke).

Bonus

Ajoutez la possibilité de supprimer les fonctions sélectionnées dans la liste en ajoutant une commande "Remove" dans le menu "Expression".

mise à jour : 23 mars 2015