Programmation Java Avancé

Master M2 TTT --- Feuille n° 2

Swing MVC

On veut écrire une petite calculette en respectant le modèle-vue-contrôleur. Les classes seront organisées selon le diagramme suivant.
La classe JButton et l'interface ActionListener existent déjà.

Partie 1

Exercice n° 1

Télécharger l'archive calculette.zip et l'importer dans Eclipse.

Le package calculette.modele contient une classe Modele telle que

Cette classe est complète, il n'y a pas besoin de la modifier.

Exercice n° 2

Le package calculette.vue contient une interface Afficheur qui déclare une méthode public void setText(String message); Cette interface est complète, il n'y a pas besoin de la modifier.

Dans le package calculette.controleur compléter la classe ControleAfficheur qui possède les méthodes:

Exercice n° 3

Le package calculette.controleur contient la classe Controleur. Le constructeur de cette classe reçoit un Modele et crée un ControleAfficheur; un Controleur dispose d'un getter pour son ControleAfficheur. Le Controleur stocke dans un buffer les chiffres successifs transmis par le ChiffreListener, un flag virgule assure qu'un seul '.' est présent dans ce buffer. Lorsque le Controleur reçoit une nouvelle opération, il convertit son buffer en la valeur décimale correspondante et l'envoie au modèle; il transmet la valeur reçue au ControleAfficheur pour que toutes les vues l'affichent, ensuite, il réinitialise son buffer. Cette classe est complète, il n'y a pas besoin de la modifier.

Compléter dans le package calculette.controleur la classe ChiffreListener qui implémente ActionListener. Cette classe possède une méthode public static ChiffreListener getInstance(Controleur c); qui retourne un ChiffreListener pour le controleur donné, sachant que l'on ne veut pas avoir plusieurs ChiffreListener pour le même controleur. Un ChiffreListener récupère à partir des ActionEvent qu'il reçoit, le caractère correspondant à la touche cliquée et transmet ce caractère au controleur à l'aide de la méthode void nouveauChiffre(char c). On peut récupérer le bouton cliqué à partir d'un ActionEvent e en écrivant : JButton bouton =(JButton) e.getSource();

Exercice n° 4

Compléter dans le package calculette.controleur la classe OpListener qui implémente ActionListener. Cette classe possède une méthode public static OpListener getInstance(Controleur c); qui retourne un OpListener pour le controleur donné, sachant que l'on ne veut pas avoir plusieurs OpListener pour le même controleur. Un OpListener récupère à partir des ActionEvent qu'il reçoit, le caractère correspondant à la touche cliquée et transmet ce caractère au controleur à l'aide de la méthode void nouvelleOperation(char c).

Partie 2

Exercice n° 5

Dans le package calculette.vue, compléter la classe Touche qui étend JButton, dont le constructeur prend en argument un ActionListener qui devra être prévenu dès que le bouton sera pressé.

Exercice n° 6

Dans le package calculette.vue, compléter la classe Ecran qui étend JLabel et implémente Afficheur, dont le constructeur prend en argument un ControleAfficheur. L'écran devra être averti chaque fois que le ControleAfficheur veut afficher un message.

Exercice n° 7

Dans le package calculette.vue, compléter la classe GraphicalCalculette dont le constructeur prend en argument un Controleur. Le constructeur de cette classe crée une fenêtre contenant tous les composants utiles à la calculette; l'écran est un Ecran, les touches sont des Touche qui sont écoutées selon leur nature par un ChiffreListener ou un OperationListener.