TP2... MVC ? JList Contrôleur Vue JLabel Vue JSlider Contrôleur Vue ImageLibrary Modèle...

Preview:

Citation preview

TP2 ... MVC ?

JList Contrôleur Vue

JLabel Vue

JSlider Contrôleur Vue

ImageLibrary Modèle

Cedric.Dumas@emn.frcontrat 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

Recommended