// 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 Button bonjour; Button effacer; Button sortir; // 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); sortir = new Button("Sortir"); add(sortir); modele = new BoutonModele(this); controle = new BoutonControle(modele, this); // creation du lien d'ecoute aux evenements: bonjour.addActionListener(controle); effacer.addActionListener(controle); sortir.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); } public void destroy() { removeAll(); // System.exit(0); } } class BoutonControle implements ActionListener { // copie locale de la reference au modele: private BoutonModele modele; // coposants auxquels le controle reagit: private BoutonVue vue; // construicteur qui relie ce controle avec le modele et le bouton: BoutonControle(BoutonModele modele, BoutonVue vue) { this.modele = modele; this.vue = vue; } // methode de reaction aux evenements: public void actionPerformed(ActionEvent e) { if (e.getSource() == vue.bonjour) { modele.changer_message(vue.bonjour.getLabel()); } else if (e.getSource() == vue.effacer) { modele.changer_message(""); } else if (e.getSource() == vue.sortir) { vue.destroy(); } } }