Académique Documents
Professionnel Documents
Culture Documents
JAVA
Applications interactives Programmer une application interactive Stphane HUOT Dpt. Informatique
DUT Informatique - S3 - 2009
3
Interface
Interface
Fichier dition ...
dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd
Fentre principale
Analyse, Modles
modle bibliothque
public class ModeleBibliotheque public interface ModeleObjetMultimedia
o o
ModeleBibliotheque (partiel)
public class ModeleBibliotheque { private Collection<ModeleObjetMultimedia> objets; public ModeleBibliotheque() { }
...
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
10
Analyse, Vues
Fichier dition ...
dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd dshdj ojp dsd
Fentre principale
11
Analyse, Vues
Vue de lapplication
public class VueApplication
Musiques Vidos
...
Modles et vues
VUE DES LISTES (JList) Musiques
Vidos
...
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
tat ?
MODELEOBJETMULTIMEDIA
VUELISTILLUST
VueIllust
tat ?
...
13
14
ENCAPSULATION
agrgation de composants
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); }
17
18
VueListIllust
Existe en Swing ?
implanter AbstractButton en gnral, partir de JPanel surcharge de la mthode paint() ou paintComponent() surcharge et cration de mthodes de comportement gestion de listeners
o o
19
20
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
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
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)
27
28
Application MVC
Application MVC Vue Vue
Modle Contrleur
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
29
30
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
o o
prsenter les donnes demander des entres afcher les actions/interactions en cours notier les rsultats lutilisateur:
russites erreurs
31
32
JDialog et JOptionPane
33
34
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); }
...
37
38
Bilan
Lapplication du modle MVC nest pas si triviale MAIS Toujours protable
o o o
TP7 en exemple