TP2 ... MVC ? JList Contrôleur Vue JLabel [email protected] contrat Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique 2.0 France License Vue JSlider Contrôleur Vue ImageLibrary Modèle Changer l'image courante Changer l'image courante Modèle ImageLibrar y JList JLabel Jslider Modifier sa taille Modifier sa taille Modèle ImageLibrar y JList JLabel Jslider Ajouter une nouvelle image Ajouter une nouvelle image Modèle ImageLibrar y JFileChooser JList JLabel Jslider La solution ? JLabel JProgressBar JList Passage à l'échelle ?? Ajout d'un widget ?! Jslider Modèle ImageLibrar y JSpinner JLabel JFileChooser Cas idéal : changer l'image courante Modèle JList ImageLibrar y JLabel Jslider Cas idéal : modifier sa taille Modèle JList ImageLibrar y JLabel Jslider Cas idéal : ajouter une image JFileChooser Modèle Jslider ImageLibrar y 1 nouveau composant JList JLabel = 1 nouvelle connexion au modèle Bilan Rendre les composants indépendants les uns des autres Placer le modèle au centre des dialogues Simplifier l'écriture des interfaces complexes Rendre modifiable / évolutif le code design pattern Un patron pour nous sauver la vie : Observer Observable Observer Attach(Observer) Notify() Update() Observer Design Pattern One to many Abstract coupling between subject and observer, each can be extended and reused individually. Dynamic relationship between subject and observer, such relationship can be established at run time. This gives a lot more programming flexibility. Support for broadcast communication. The notification is broadcast automatically to all interested objects that subscribed to it. Unexpected updates. Observes have no knowledge of each other and blind to the cost of changing in subject. With the dynamic relationship between subject and observers, the update dependency can be hard to track down. Subject Knows it observers Has any number of observer Provides an interface to attach and detaching observer object at run time Observer Provides an update interface to receive signal from subject ConcreteSubject Store subject state interested by observer Send notification to it's observer ConcreteObserver Maintain reference to a ConcreteSubject object Maintain observer state Implement update operation Coder ? import java.util.Observable; import java.util.Observer; public class ImageLibray extend Observable public class MonJLabel implements Observer (& extends JLabel) Un exemple simple 1 Contrôleur 1 Modèle 1 Vue Un exemple simple JtextField Modele Integer data; JLabel Abstraction Modele Integer data; Abs 1 JTextField Abs 2 JLabel Un exemple simple Observable JTextField Modele Integer data; Observer MonJLabel JLabel Un exemple simple Observable JTextField Modele Observer JLabeltoModel Integer data; JLabel On modélise explicitement le contrôle Un exemple simple JTextField Modele Integer data; Un exemple simple ActionListener JTextField Modele Integer data; Un exemple simple JtextField ActionListener JtextFieldToModel Modele Integer data; Un exemple simple complet JtextField ActionListener JtextFieldToModel Observable Modele Observer ModeltoJLabel Integer data; JLabel Bilan Modèle indépendant Utilisation des classes natives de Swing Passage par des adaptateurs de types Objets simples (1 méthode) Deux interfaces Gèrent le dialogue Transforme les types