Explication du MVC - Exemple BoutonVue.java
1. Lancement du programme
Le système est prêt à interagir avec l'usager
2. L'usager clique sur "bonjour"
3. Test du programme en ligne:
http://www.iro.umontreal.ca/~nie/IFT1020/MVC/Bouton/Bouton.html
Programme source - BoutonVue.java
4. Programme: // Un exemple commente de MVC minimal qui affiche un bouton dans une fenetre.
// Si on clique sur le bouton "bonjour", on verra apparaitre le message
// "Bonjour". Si on clique sur le bouton "effacer", ce message s'efface.
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
class BoutonModele {
// Declaration d'une copie locale de Vue:
private BoutonVue vue;
// Un attribut propre pour le modele:
private String message = "";
// Constructeur qui permet de relier ce modele avec une vue:
BoutonModele(BoutonVue vue) {
this.vue = vue;
}
// Une methode du modele qui traite les demandes de l'usager:
public void changer_message(String message) {
// Un traitement tres simple:
this.message = message;
// Ensuite (s'il faut), on demande a la vue de refaire la fenetre:
vue.repaint();
}
// Cette methode sera utilisee par Vue pour obtenir le message a afficher:
public String getMessage() {
return message;
}
}
public class BoutonVue extends Applet {
// un element graphique - bonjour
private Button bonjour;
private Button effacer;
// des copies locales des references au modele et au controle:
private BoutonModele modele;
private BoutonControle controle;
// methode d'initialisation qui compose la vue, cree un modele et un
// controle, et les relie:
public void init () {
bonjour = new Button("Bonjour");
add(bonjour);
effacer = new Button("Effacer");
add(effacer);
modele = new BoutonModele(this);
controle = new BoutonControle(modele, bonjour, effacer);
// creation du lien d'ecoute aux evenements:
bonjour.addActionListener(controle);
effacer.addActionListener(controle);
}
// methode de Applet pur faire l'affichage:
public void paint (Graphics g) {
// Dans cette methode, on demande au modele de "calculer" le message
// a afficher, on on l'affiche:
g.drawString(modele.getMessage(), 20, 50);
}
}
class BoutonControle implements ActionListener {
// copie locale de la reference au modele:
BoutonModele modele;
// composants auxquels le controle reagit:
private Button bonjour, effacer;
// construicteur qui relie ce controle avec le modele et le bouton:
BoutonControle(BoutonModele modele,
Button bonjour, Button effacer) {
this.modele = modele;
this.bonjour = bonjour;
this.effacer = effacer;
}
// methode de reaction aux evenements:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == bonjour) {
modele.changer_message(bonjour.getLabel());
}
else if (e.getSource() == effacer) {
modele.changer_message("");
}
}
}