26
TP2 ... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle [email protected] contrat Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique 2.0

TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle [email protected] contrat Creative Commons Paternité-Pas d'Utilisation

Embed Size (px)

Citation preview

Page 1: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

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

Page 2: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Changer l'image courante

Page 3: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Changer l'image courante

JList

Modèle

ImageLibrary

Jslider

JLabel

Page 4: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Modifier sa taille

Page 5: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Modifier sa taille

JList

Modèle

ImageLibrary

Jslider

JLabel

Page 6: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Ajouter une nouvelle image

Page 7: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Ajouter une nouvelle image

JList

Modèle

ImageLibrary

Jslider

JLabel

JFileChooser

Page 8: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

La solution ?

JList

Modèle

ImageLibrary

Jslider

JLabel

JFileChooser

JLabel

JSpinnerJProgressBar

Passage à l'échelle ??

Ajout d'un widget ?!

Page 9: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Cas idéal : changer l'image courante

JList

Modèle

ImageLibraryJslider

JLabel

Page 10: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Cas idéal : modifier sa taille

JList

Modèle

ImageLibraryJslider

JLabel

Page 11: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Cas idéal : ajouter une image

JList

Modèle

ImageLibraryJslider

JLabel

JFileChooser

1 nouveau composant

=1 nouvelle connexion

au modèle

Page 12: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

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

Page 13: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

design pattern

Un patron pour nous sauver la vie : Observer

Observer

Update()

Observable

Attach(Observer)Notify()

Page 14: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

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.

Page 15: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

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

Page 16: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Coder ?

import java.util.Observable;

import java.util.Observer;

public class ImageLibray extend Observable

public class MonJLabel implements Observer

(& extends JLabel)

Page 17: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple

1 Contrôleur1 Modèle

1 Vue

Page 18: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple

Modele

Integer data;

JLabelJtextField

Page 19: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Abstraction

Modele

Integer data;

JLabelJTextField

Abs 1 Abs 2

Page 20: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple

Modele

Integer data;

MonJLabelJTextField

Observable

Modele

Integer data;

Modele

Integer data;

Observer JLabel

Page 21: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple

Modele

Integer data;

JTextField

Observable

Modele

Integer data;

Modele

Integer data;

JLabeltoModel

Observer

JLabel

On modélise explicitement le contrôle

Page 22: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple

Modele

Integer data;

JTextField Modele

Integer data;

Modele

Integer data;

Page 23: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple

Modele

Integer data;

JTextField Modele

Integer data;

Modele

Integer data;

ActionListener

Page 24: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple

Modele

Integer data;

Modele

Integer data;

Modele

Integer data;

JtextField

JtextFieldToModel

ActionListener

Page 25: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

Un exemple simple complet

Modele

Integer data;

ModeltoJLabel

Observable Observer

JLabel

JtextField

JtextFieldToModel

ActionListener

Page 26: TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle Cedric.Dumas@emn.fr contrat Creative Commons Paternité-Pas d'Utilisation

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