TP2 ... MVC ? JList JLabel JSlider ImageLibrary Contrôleur Vue Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique 2.0 France License
Changer l'image courante
Changer l'image courante Modèle ImageLibrar y Jslider JList JLabel
Modifier sa taille
Modifier sa taille Modèle ImageLibrar y Jslider JList JLabel
Ajouter une nouvelle image
Ajouter une nouvelle image Modèle ImageLibrar y Jslider JFileChooser JList JLabel
La solution ? Passage à l'échelle ?? Ajout d'un widget ?! Jslider JLabel Modèle ImageLibrar y JSpinner JProgressBar JList JLabel JFileChooser
Cas idéal : changer l'image courante Modèle ImageLibrar y Jslider JList JLabel
Cas idéal : modifier sa taille Modèle ImageLibrar y Jslider JList JLabel
Cas idéal : ajouter une image Modèle ImageLibrar y JFileChooser Jslider 1 nouveau composant = 1 nouvelle connexion au modèle JList JLabel
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 Attach(Observer) Notify() Observer 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 Abs 2 JLabel JTextField
Un exemple simple Observable Observer JLabel JTextField Modele Integer data; Modele Integer data; Modele Integer data; MonJLabel
Un exemple simple Observable Observer JTextField Modele Integer data; JLabeltoModel JLabel On modélise explicitement le contrôle
Un exemple simple JTextField Modele Integer data; Modele Integer data;
Un exemple simple ActionListener JTextField Modele Integer data;
Un exemple simple JtextField ActionListener JtextFieldToModel Modele Integer data; Modele Integer data; Modele Integer data;
Un exemple simple complet JtextField ActionListener Observable Observer JtextFieldToModel Modele Integer data; ModeltoJLabel 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