Upload
athanase-benard
View
120
Download
7
Embed Size (px)
Citation preview
TP2 ... MVC ?
JList Contrôleur Vue
JLabel Vue
JSlider Contrôleur Vue
ImageLibrary Modèle
[email protected] 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
JList
Modèle
ImageLibrary
Jslider
JLabel
Modifier sa taille
Modifier sa taille
JList
Modèle
ImageLibrary
Jslider
JLabel
Ajouter une nouvelle image
Ajouter une nouvelle image
JList
Modèle
ImageLibrary
Jslider
JLabel
JFileChooser
La solution ?
JList
Modèle
ImageLibrary
Jslider
JLabel
JFileChooser
JLabel
JSpinnerJProgressBar
Passage à l'échelle ??
Ajout d'un widget ?!
Cas idéal : changer l'image courante
JList
Modèle
ImageLibraryJslider
JLabel
Cas idéal : modifier sa taille
JList
Modèle
ImageLibraryJslider
JLabel
Cas idéal : ajouter une image
JList
Modèle
ImageLibraryJslider
JLabel
JFileChooser
1 nouveau composant
=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
Observer
Update()
Observable
Attach(Observer)Notify()
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ôleur1 Modèle
1 Vue
Un exemple simple
Modele
Integer data;
JLabelJtextField
Abstraction
Modele
Integer data;
JLabelJTextField
Abs 1 Abs 2
Un exemple simple
Modele
Integer data;
MonJLabelJTextField
Observable
Modele
Integer data;
Modele
Integer data;
Observer JLabel
Un exemple simple
Modele
Integer data;
JTextField
Observable
Modele
Integer data;
Modele
Integer data;
JLabeltoModel
Observer
JLabel
On modélise explicitement le contrôle
Un exemple simple
Modele
Integer data;
JTextField Modele
Integer data;
Modele
Integer data;
Un exemple simple
Modele
Integer data;
JTextField Modele
Integer data;
Modele
Integer data;
ActionListener
Un exemple simple
Modele
Integer data;
Modele
Integer data;
Modele
Integer data;
JtextField
JtextFieldToModel
ActionListener
Un exemple simple complet
Modele
Integer data;
ModeltoJLabel
Observable Observer
JLabel
JtextField
JtextFieldToModel
ActionListener
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