Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SWING PARTIE 3 ; MVC MODELE VUE CONTROLEUR


Information sur le tutorial

Catégorie :Swing Date de création : 15/03/2006 14:58:58 Vu : 19 651 fois

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


Description

Partie 3 du tutorial sur Swing. Themes : MVC, Calculette graphique

Tutorial

Swing

PARTIE 3 : MVC



Introduction

Dans cette troisième partie, nous allons voir l'architecture MVC à travers un exemple complet. Ce sera le dernier tutorial consacré à Swing, il y aura peut etre un tutorial sur comment concevoir ses composants graphiques... Les 3 tutoriaux sont une initiations à Swing, j'espere que vous progesserez vite maintenant que vous avez toutes les bases mais bon, comme on dit, "C'est en forgeant que l'on devient forgeron" donc à vos claviers!

L'application que nous allons concevoir dans ce tutorial, est disponible sur le site ( ici) pour éviter de mettre tout le code dans ce tutorial et pour eviter que vous le tapiez! Nous verrons que les parties les plus importantes.

Concepts abordés :

-MVC
-JFrame, JButton, JTextField, BorderLayout, GridLayout

1. Modele Vue Controleur (MVC)


J'avais mentionné le MVC dans le premier tutorial sans trop m'y attarder. SurWikipedia on trouve la définition suivante :

L'architecture Modèle Vue Contrôleur (MVC) est un motif de conception pour le développement d'applications logicielles qui sépare le modèle de données, l'interface utilisateur et la logique de contrôle. Ce motif a été mis au point en 1979 par Trygve Reenskaug, qui travaillait alors sur SmalltalkXerox PARC. dans les laboratoires de recherche

Ce modèle d'architecture impose la séparation entre les données, les traitements et la présentation, ce qui donne trois parties fondamentales dans l'application finale : le modèle, la vue et le contrôleur :

    * Le Modèle représente le comportement de l'application : traitements des données, interactions avec la base de données, etc. Il décrit les données manipulées par l'application et définit les méthodes d'accès.
    * la Vue correspond à l'interface avec laquelle l'utilisateur interagit. Les résultats renvoyés par le modèle sont dénués de toute présentation mais sont présentés par les vues. Plusieurs vues peuvent afficher les informations d'un même modèle. Elle peut être conçue en html, ou tout autre « langage » de présentation. La vue n'effectue aucun traitement, elle se contente d'afficher les résultats des traitements effectués par le modèle, et de permettre à l'utilisateur d'interagir avec elles.
    * le Contrôleur prend en charge la gestion des événements de synchronisation pour mettre à jour la vue ou le modèle. Il n'effectue aucun traitement, ne modifie aucune donnée, il analyse la requête du client et se contente d'appeler le modèle adéquat et de renvoyer la vue correspondant à la demande.


Il faut comprendre que MVC est un modele de conception logicielle c'est a dire une maniere d'organiser les differentes parties du code pour une application graphique. Elle sépare l'application en 3 parties : le modele (le programme), la vue (l'interface graphique) et le controleur (l'interaction avec l'utilisateur).

Pour mieux comprendre, nous allons réaliser une application complete : une calculette graphique! Cela nous permettra de revoir et d'approndir les concepts des deux premiers tutoriaux et de mettre en oeuvre le MVC.





2. Le Modele

Le modele est la partie qui réalise tout les traitements c'est a dire pour nous, réalise tout les calculs de la calculette. Expliquer le modele ici n'apporte
pas grand chose, c'est pour cela que je vous invite a regarder mon code (  ici), la classe CalculetteModele

Le modele contient les operations d'ajout, de soustraction, multiplication et division c'est a dire les operations possibles de la calcullette. Elle contient aussi le total en cours etc.. Il faut bien comprendre que pour avoir un code propre, le plus réutilisable et avec une maintenance aisée, il faut dissocier au maximum la partie traitement des données et l'interface graphique. On voit beaucoup de programme (de débutant notamment) qui code tout dans la meme classe mélangeant traitement et interface graphique.. C'est pas bon du tout! La grande qualité du modéle MVC est justement de dissocier traitement et interface graphique.
Pourquoi ? imaginez, vous travaillez dans une équipe, comment partager le travail si tout est mélangé? Plus grave, si vous voulez  changer l'interface graphique (un systeme de skin par exemple) , faudra tout recoder? Pour porter une application sur un autre systeme (bon c'est vrai qu'en Java la question ne se pose pas trop) faudra tout reprendre pour adapter l'interface graphique à l'autre systeme d'exploitation...Pas trés flexible! Coder une ligne coute cher (environ 15 dollars), maintenir une ligne de code coute trés cher (75 dollars !!!) , il vaut mieux perdre un peu de temps au début dans l'architecture de l'application pour gagner en efficacité et clarté plus tard. Voila c'est dit lol

3. La Vue

La vue est la representation graphique du modele à savoir ici la calculette. Nous allons créér un panel numérique ainsi que des boutons qui nous permettrons d'effecteur les differentes operations. Reportez vous au code (  ici), la classe CalculetteVue

Nous allons utiliser 2 panels pour placer nos objets : un panel pour la fenetre entiere et un panel pour les boutons.

BorderLayout :

Pour la fenetre entiere, nous allons utiliser un BorderLayout. Ce layout permet de placer de placer des objets dans plusieures directions :



On peut ainsi placer des panel au Nord (en haut de la fenetre), au centre, à l'Est (a droite) etc...

Pour créér un BorderLayout :
JPanel  panel=new   JPanel();
panel.setLayout(new BorderLayout());   


Pour placer un composant dans une direction, on utilise la fonction add du panel avec en parametre la direction :
panel.add(new JLabel("Mon Conposant"),BorderLayout.NORTH);
BorderLayout.NORTH place ainsi le composant au nord, BorderLayout.SOUTH au sud etc...

Nous placererons au Nord, la zone texte où s'affiche le texte et au centre le pavé numérique.



Au Nord :

La zone de texte est un JTextField. C'est un champ texte que l'on peut modifier a la souris. Celui çi nous servira a afficher les resultats des operations ainsi que les nombres entrés.
Pour récuperer le contenu d'un champ texte, il faut utiliser la fonction getText() qui retourne un objet String. Pour définir le contenu, on utilise setText().

Note : on veut récuperer un entier a partir de la zone de texte, or l'objet retourné par getText() est un String, il faut donc la convertir :
int entier=Integer.parseInt(edit.getText());

Si la chaine n'est pas valide (un nombre n'est pas entré), une exception est levée, cela nous permet de verifier la validité de l'entrée :

try{
  int entier=Integer.parseInt(edit.getText());
}catch(Exception e)
{
    //pas valide
}


Au centre :

Au centre nous placons le pavé numérique.
Les boutons sont placés selon une matrice (en grille si vous préférez), un LayoutManager réalise cela pour nous : le GridLayout.
JPanel   panel=new   JPanel();
panel.setLayout(new GridLayout(4,4));





Le premier parametre du constructeur du GridLayout est le nombre de lignes et le deuxieme parametre le nombre de lignes.



Les boutons :

Les boutons sont des simples JButton comme nous avons vu dans la premiere partie. Toutefois, MVC oblige, la gestion d'evenement des boutons (c'est a dire quand on clique dessus) ne doit pas etre fait dans la vue mais dans le controleur que nous allons voir.

4. Le Controleur

Le controleur gere les interactions avec l'interface graphique. Notre controleur gere les evenements des boutons quand on clique dessus. La classe controleur implémente donc un ActionListener c'est a dire un "écouteur" de boutons (voir partie 2). Le controleur ne fait pas de traitement, ne modifie pas de données, il est juste la passerelle entre le modele, l'interface graphique et l'utilisateur.

Quand on clique sur un chiffre du pavé numérique par exemple, le controleur appelle une fonction de la vue pour lui dire d'ajouter un chiffre a la zone de sélection.
Quand on clique sur une operation, le controleur appelle une fonction du modele pour effectuer l'operation et ensuite le controleur signale à la vue qu'elle doit mettre a jour sa vue c'est a dire afficher le résultat de l'opération.

Je vous invite a regarder la classe CalculetteControleur

Conclusion

Voila, j'ai finit mes 3 tutoriaux sur l'initiation à Swing, il reste tant de choses à découvrir!. Je sais qu'ils sont loins d'etre parfaits mais bon j'ai fait de mon mieux pour la communauté! Pour toutes questions n'hesitez pas! Je réponds toujours (dans la mesure du possible :D )

Merci de votre lecture

TucoBouch

15 mars 2006 15:05:17 :
manquait le lien vers le source
17 mars 2006 11:59:43 :
ça sera remis a jour un jour?!!!! Chaque fois que je fais une modif, le tuto n'est jamais a jour!
22 mars 2006 11:26:31 :
"controleur" avec 2 l !! la honte! lol
signaler à un administrateur
Commentaire de faya972 le 21/03/2006 21:38:29

Les liens ne fonctionnent pas ! On n'a pas accès aux classes ...

signaler à un administrateur
Commentaire de tucobouch le 21/03/2006 22:47:40

Ah oui désolé! J'ai mit a jour 2 fois le tutorial, en vain, les modifs ne sont jamais affichées... je capitule. (bug du site?!!)

Sinon, la source est là :
http://www.javafr.com/codes/CALCULETTE-PARTIE-TUTORIAL-SWING_36554.aspx

signaler à un administrateur
Commentaire de tucobouch le 21/03/2006 22:59:46

Alleluia !! Le tutorial s'est mit a jour!! suffit de demander!

C'est suite a mon commentaire ou c'est le fruit du hasard ?!! lol (si vous pouviez valider la mise a jour du tuto partie 2 ça serait vachement sympa! merci)

signaler à un administrateur
Commentaire de kaloway le 27/03/2006 18:56:41

j'avoue que je suis loin d'être un pro de la prog. le principe du mvc est facile à expliquer mais  ardu à mettre en oeuvre. le cas d'une calcutrice est encore relativement simple. les touches sont la partie contrôle. l'affichage est la partie vue. le reste est la partie moèle. prenons un autre exemple, un oscilloscope (apareille de mesure visualisant le signal en fonction du temps). est ce que la courbe visualisé sur l'écran fait partie de la vue ou du modèle? il n'est pas simple de répondre à cette question. le mvc demeure pour les programmeur chevronné. si tu peux nous donner d'autre exemple pour que nous puissons progresser en mvc, ça serait bien.

signaler à un administrateur
Commentaire de tucobouch le 27/03/2006 19:53:40

J'ai pas dit que le MVC est facile a mettre en oeuvre, c'est pas non plus une "religion" a suivre au pied de la lettre. C'est une conception logicielle comme une autre, elle a ses defauts et ses avantages. Mon tutorial n'est qu'une introduction au MVC.

Pour ta question sur l'oscilloscope, je pense, perso, que le Modele est le dispositif electronique qui fait les mesures (et tout les traitements des signaux), la Vue est l'ecran qui affiche les mesures (revenir a la definition : Vue = "Les résultats renvoyés par le modèle sont dénués de toute présentation mais sont présentés par les vues" ou encore "elle se contente d'afficher les résultats") et le Controleur sont les boutons.

Je te conseille de regarder ces pages :
-Wikipedia : http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur
-En Anglais : un petit cours avec des exemples :
http://csis.pace.edu/~bergin/mvc/mvcgui.html
tu trouvera bien d'autres pages (et surrement bien meilleures) sur google...

Je ne peux te répondre plus. Mon tutorial est loin d'etre parfait et il y a des retouches a faire...

Bon courage

signaler à un administrateur
Commentaire de neyo2010 le 09/04/2008 14:38:01

Salut,
Je débute en java, j'ai vue ce que tu as fait sur ce chapitre, je tiens à te féliciter pour les efforts que tu as fait.
J'avoue que c'est pas évidant pour moi le code que tu as fait, je croix qu'il faudrait mieux de schématiser un peu le déroulement de l'application et de décrire le cycle de vie de l'application si c'est possible  
Merci.

signaler à un administrateur
Commentaire de waldeen le 12/04/2008 11:19:09

salut je commence en c++ et mon projet est la creation d'un programme de calculatrice avec interface graphic .mais j'aimerai savoir comment fait on?

signaler à un administrateur
Commentaire de Hyperpenguin le 28/04/2008 10:17:57

Salut, tout d'abord merci pour le tutoriel car il m'a aidé a enfin comprendre le MVC, mais une dernière question se pose a moi: pourquoi à tu placer le main la ou tu l'a fait?
Au début des cours que j'avais a la fac le main était dans un fichier séparé, puis quand on a attaqué le swing le main s'est retrouvé a la fin d'un fichier rassemblant vue contrôleur, et pour toi il est a la fin du modèle...
Y'a t'il des conventions d'écriture a ce sujet?
Merci.

signaler à un administrateur
Commentaire de jeremXD le 22/06/2008 12:07:53

Salut !

C'est un très bon tutoriel qui présente bien le MVC, sans fioritures.
Seul bug, les liens ne sont plus accessibles...
Serait-il possible d'avoir accès à ton code de nouveau?

Merci en tout cas !

signaler à un administrateur
Commentaire de romano2004 le 01/08/2008 15:37:53

Bonjour,
super tuto mais j'ai quelques questions !!!
j'ai une vue un peu plus complexe et j'ai quelques questions sur comment modéliser mon application ?
1 JFRAME qui contient 2 JPANEL (vue)
Si je suis l'exemple pour 1 panel j'ai 1 controleur, est-il possible d'en avoir plusieurs?
Pouvez vous me donner un exemple de packaging pour une application swing de type MVC?

signaler à un administrateur
Commentaire de benny627 le 15/01/2009 15:22:27

Merci pour ces 3 tutoriels super bien faits, clair concis et suffisant pour bien comprendre !
Encore bien qu'il y en a qui se dévouent !

signaler à un administrateur
Commentaire de hatem87 le 13/02/2009 23:39:01

Merci pour ce tutoriel.Vraiment c'est très clair et suffisant pour comprendre le modèle MVC.

signaler à un administrateur
Commentaire de fabadoo le 14/02/2009 11:09:39

Moi je le trouve pas du tout representatif du modèle MVC.

Tu devrais mettre en oeuvre le pattern Observer, ce qui éviterai un couplage fort. Du coup dans ton cas, on se dit tout pourquoi faire 2 fichiers "controleur et vue"
(voir : modele extends java.util.Observable - vue implements java.util.Observer)

Pis le modele n'est pas la pour effectuer les operations de calculs, mais assurer le "stockage" et la cohérence du modéle "des données".

Ainsi, le controleur recoit les appel des Listeners (dc de la vue), effectue les actions en conséquence : calculs et/ou stockage des resultats dans son modéle.
Le modéle lui doit si besoin informer les vues d'une mise a jour des données..
Les vues qui viennent d'etre informées d'une mise a jour, viennent se rafraichir a partir du modéle. Et ainsi de suite...

signaler à un administrateur
Commentaire de jeanfrance le 16/05/2009 11:42:58

Merci infiniment pour ces trois tutoriels!

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,078 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.