Vous êtes sur la page 1sur 10

2

JAVA
Applications interactives Programmer une application interactive Stphane HUOT Dpt. Informatique
DUT Informatique - S3 - 2009
3

Un exemple: Lecteur multimdia tuTunes


la iTunes Fonctionnalits:
o

grer une bibliothque


ajouter enlever parcourir ...

grer les lments de la bibliothque


lire dplacer ...

Interface

Interface
Fichier dition ...

Barre de menus Barre doutils

Musiques Vidos ...

Vue des listes de la bibliothque 123 - ndhk jwhoidwh ocwuioh


124 - ndhk jwhoidwh ocwuioh 125 - ndhk jwhoidwh ocwuioh 126 - ndhk jwhoidwh ocwuioh

dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd

Vue .............................. des illustrations


.............................. .............................. ..............................

Fentre principale

Vue des informations

Analyse, Modles
modle bibliothque
public class ModeleBibliotheque public interface ModeleObjetMultimedia
o o

ModeleBibliotheque (partiel)
public class ModeleBibliotheque { private Collection<ModeleObjetMultimedia> objets; public ModeleBibliotheque() { }

modle objet multimdia


modle objet audio

public class ModeleObjetAudio implements ModeleObjetMultimedia

modle objet video

public class ModeleObjetVideo implements ModeleObjetMultimedia

...

public boolean ajouterObjet(ModeleObjetMultimedia objet) throws ExceptionAjoutImpossible { return true; } public boolean retirerObjet(ModeleObjetMultimedia objet) throws ExceptionRetraitImpossible { return true; } public void creerListe() { } public Collection<String> getNomsListes() { return null; } }

ModeleObjetMultimedia (partiel)
public interface ModeleObjetMultimedia { public boolean charger(String chemin) throws ExceptionChargeObjet; public void lire() throws ExceptionLectureObjet; public void arreterLecture() throws ExceptionLectureObjet; public String getNom(); public String getInfos();

Bilan Modles
Dans une vraie application:
o

possibilit davoir plusieurs modles


diffrents types/sources de donnes diffrents ensembles de fonctionnalits

LE modle = agrgation dinstances de diffrents modles Modle


Modle Modle Modle

public String getDuree(); public Image getImage(); }

10

Programmer le(s) modle (s)

Analyse, Vues
Fichier dition ...

Besoin dexplications ???

Barre de menus Barre doutils

Musiques Vidos ...

Vue des listes de la bibliothque 123 - ndhk jwhoidwh ocwuioh


124 - ndhk jwhoidwh ocwuioh 125 - ndhk jwhoidwh ocwuioh 126 - ndhk jwhoidwh ocwuioh

dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd

Vue .............................. des illustrations


.............................. .............................. ..............................

Fentre principale
11

Vue des informations


12

Analyse, Vues
Vue de lapplication
public class VueApplication
Musiques Vidos
...

Modles et vues
VUE DES LISTES (JList) Musiques
Vidos
...

tat ? tat ? tat ?

vue des listes de la bibliothque JList vue des informations des objets
public class VueInfos extends JList
123 - ndhk jwhoidwh ocwuioh 124 - ndhk jwhoidwh ocwuioh 125 - ndhk jwhoidwh ocwuioh 126 - ndhk jwhoidwh ocwuioh

MODELEBIBLIOTHEQUE Encapsulation

dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd

.............................. .............................. .............................. ..............................

VUEINFOS

123 - ndhk jwhoidwh ocwuioh 124 - ndhk jwhoidwh ocwuioh 125 - ndhk jwhoidwh ocwuioh 126 - ndhk jwhoidwh ocwuioh

dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd

.............................. .............................. .............................. ..............................

vue des illustrations des objets


o

tat ?

MODELEOBJETMULTIMEDIA

public class VueListIllust extends JPanel

vues de lillustration dun objet


public class VueIllust extends JPanel

VUELISTILLUST
VueIllust

tat ?

...

13

14

Programmer la/les vues


2 mthodes:
o

Vue de lapplication: encapsulation


Vue de lapplication:
o o

ENCAPSULATION
agrgation de composants

regroupe les vues des diffrentes parties une classe qui:


contient les widgets/vues des composants de lapplication fournit des mthodes utiles:
o o o o o

SURCHARGE DE COMPOSANTS EXISTANTS


cration de composants spciques des besoins utilisation comme des composants standard (encapsulation)

ajout de contrleurs visible ou non re-afchage accs certains composants (widgets) ...

15

16

VueApplication
public class VueApplication { } private private private private ModeleBibliotheque biblio; JFrame mainFrame; JList listesLecture; VueListIllust vueListeIllustartions;

Vue: surcharge
Lorsque les widgets par dfaut ne conviennent pas ? Surcharge pour:
o o o

public VueApplication(ModeleBibliotheque biblio) { this.biblio = biblio; mainFrame = new JFrame(); //cration et ajout des autres composants //etc.. voir cours prcdents //instanciation et ajout des contrleurs } //mthodes utiles... public void setVisible(boolean b) { mainFrame.setVisible(b); }

changer les comportements changer lapparence graphique dnir de nouveaux widgets

17

18

VueListIllust
Existe en Swing ?

Crer un nouveau widget


Un nouveau bouton ?
o

implanter AbstractButton en gnral, partir de JPanel surcharge de la mthode paint() ou paintComponent() surcharge et cration de mthodes de comportement gestion de listeners

Un widget non prvu:


o o

Non... Cration dun nouveau widget...

o o

19

20

les mthodes paint() et paintComponent() des widgets


public void paint(Graphics g)
o o
o

Systme daffichage de Swing


2 - Dessin et transmission des ressources paint(Graphics g)

mthode principale de dessin du widget appele par le gestionnaire dafchage de Swing Graphics g : environnement graphique appelle diverses mthodes de dessin du widget dont public void paintComponent(Graphics g)
charg du dessin du widget proprement dit

Affichage Swing

1 - Demande de ressources (Graphics) Affichage systme

TOP-LEVEL CONTAINER (JFrame)


paint(Graphics g)

CONTAINER (JPanel)

CONTAINER (JPanel)

Graphics

paint(Graphics g)

WIDGET

WIDGET

WIDGET

21

22

paint ou paintComponent ?
public void paintComponent(Graphics g)
o o

Environnement graphique
Les classes Graphics et Graphics2D paramtre des mthodes de dessin des widgets (paint, etc.) Environnement graphique fournissant des primitives de dessin:
o

ne rednir que le dessin du widget (fond, texte, intrieur) les bords et les ventuels ls seront encore dessins

public void paint(Graphics g)


o o

o o

rednir tous les graphismes grer lafchage des ls et des bords (si besoin)

drawLine, drawEllipse, drawRectangle, drawImage, fillEllipse, ... changement de couleurs, des proprits de dessin (pens, brushes, ...) voir javadoc

Essayez...

Le dessin est fait en coordonnes locale du widget, dans sa zone Swing fournit des objets Graphics2D (plus complets)

23

24

Exemple
public class VueListIllust extends JPanel { //... public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; //on peint le fond en noir g2.setBackground(Color.BLACK); g2.fillRect(0, 0, this.getWidth(), this.getHeight()); //on dessine un rectangle arrondit pour chaque illustration //que lon a obtenu partir du modle g2.setColor(Color.LIGHT_GRAY); for (int i = 0; i < illustrations.size(); i++) { Illustration ill = illustrations.get(i); g2.fillRoundRect(ill.x, ill.y, ill.width, ill.height, ill.arcWidth, ill.arcHeight); } } }

Suite et pratique...
... dans le TP7

25

26

Analyse, Contrleurs
Un contrleur par tche/groupe de tche ou par widget/groupe de widget Ici, les tches sont groupes par vue:
o o o o o

Contrleurs et modles
Liens entre les contrleur et les modles ? Jusqu maintenant: contrleur(s) lis un seul modle Ici:
o o

barre de menus: fonctionnalits de lapplication barre doutils: fonctionnalits de lecture vue des listes: gestion des listes de la bibliothque vue des illustrations: choix des objets vue des informations: choix et gestion des objets

contrleurs lis un modle global (bibliothque) le modle global donne accs des modles de plus basniveau (objets multimdia)

Un contrleur par vue...

Imbrication/assemblage de composants MVC

27

28

Application MVC
Application MVC Vue Vue
Modle Contrleur

Modles, vues et contrleurs


Modle VUE DES LISTES (JList) Musiques
Vidos
...

CONTROLEURLISTE

MODELEBIBLIOTHEQUE Encapsulation

Vue

Modle Modle

Vue

Modle

VUEINFOS

123 - ndhk jwhoidwh ocwuioh 124 - ndhk jwhoidwh ocwuioh 125 - ndhk jwhoidwh ocwuioh 126 - ndhk jwhoidwh ocwuioh

dshdj ojp dshdj ojp dshdj ojp dshdj ojp

.............................. .............................. .............................. ..............................

CONTROLEUR VUEINFO MODELEOBJETMULTIMEDIA CONTROLEUR VUELIST ILLUST

VUELISTILLUST Contrleur Contrleur Contrleur Contrleur


VueIllust

29

30

Programmer le(s) contrleur(s)


Cas simples:
o o

Retours utilisateur
Tche du/des contrleur(s) Slection de vue(s):
o o

action de base au niveau dun modle actions directes sur des vues

Cas plus compliqus:


o o

o o

actions sur plusieurs modles retours lutilisateur

prsenter les donnes demander des entres afcher les actions/interactions en cours notier les rsultats lutilisateur:
russites erreurs

31

32

Demander des entres


Exemple dune ouverture de chier de bibliothque (contrleur des menus de lapplication)
o

Notifier des erreurs/ problmes


Faire remonter les informations lutilisateur avec:
o o

avec la classe JFileChooser de Swing


JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(vue.getMainFrame()) == JFileChooser.APPROVE_OPTION) { File f = fc.getSelectedFile(); if (f != null) { if (biblio.chargerBibliotheque(f.getAbsolutePath())) { vueApplication.mettreAJour(); } } }

les valeurs de retour de certaines mthodes des modles capture dexceptions

Options: voir Javadoc... Autres: JColorChooser (couleurs), JDialog (gnrique)

Analyse de la situation et retour lutilisateur si besoin:


o

JDialog et JOptionPane

33

34

Exceptions dans lapplication


1 - Entre utilisateur Vue 2 - Notification contrleur Contrleur 5 - Capture dexception 6 - Notification utilisateur Vue erreur 4 - Leve dexception 3 - Appel au modle

Capture dexceptions
Dans le contrleur permettant dajouter un objet la bibliothque (actionPerformed) :
try { biblio.ajouterObjet(null); } catch (ExceptionAjoutImpossible e) { JOptionPane.showMessageDialog(null,"Impossible dajouter cet objet","Erreur",JOptionPane.ERROR_MESSAGE); }

JOptionPane fournit plusieurs types de dialogues pr-dnis: showConfirmDialog, showInputDialog, showMessageDialog, showOptionDialog, avec des variations possibles: voir Javadoc
Modle

35

36

Lapplication principale
Instancie un/des modle(s):
o

Application principale
public static void main(String[] args) { ModeleBibliotheque biblio = new ModeleBibliotheque(); VueApplication vue = new VueApplication(biblio); vue.setVisible(true); }

ici, cration/chargement dun ModeleBibliothque

Instancie la/les vue(s) en leur fournissant le modle


o

la vue instancie les contrleurs (listeners) et les attache ses composants

(peut tre plus compliqu... plusieurs modles et vues...)

Rend la vue principale visible

...

37

38

Bilan
Lapplication du modle MVC nest pas si triviale MAIS Toujours protable
o o o

Ce quil faut retenir


- Structure relle de lapplication plus com plexe que le modle idal - Encapsulation (mod les et vues) - Retours utilisateur => gestion de la capture des except ions

Automatismes Structure Modulaire

TP7 en exemple

Vous aimerez peut-être aussi