Travaux Pratiques Interfaces Graphiques Master 1

TP7, Calculette



But du TP

Dans ce TP nous réalisons une implémentation d'une calculatrice simple.
On complétera les trous dans le squelette de programme Calculette.java.



1- L'interface.
L'interface de la calculette est constituée d'un champ de saisie texte (JTextField) et d'un ensemble de boutons formant le clavier de la calculette disposés comme sur la figure ci-dessous.




L'interface est construite en utilisant le gestionnaire de disposition GridBagLayout. Ce gestionnaire de disposition permet d'aligner les composants en grille tout en leur permettant d'avoir des tailles différentes. L'agencement des composants sur la grille est contrôlé par un  ensemble de variables d'un objet GridBagConstraints. Les variables que nous utiliserons ici sont :
Nous appliquerons les contraintes de position aux composants en utilisant une méthode addGB(Container cont, Component comp, int x, int y). Son premier argument désigne le conteneur destinataire du composant placé en second argument, auquel est appliqué le gestionnaire GridBagLayout. Les deux derniers arguments permettent de contrôler la position du composant sur la grille.

On peut décomposer l''interface de la calculette en 6 lignes, la première pour le champ texte, les 5 autres pour le clavier. Le clavier peut alors se décomposer en une ligne supérieure contenant les boutons AC, Sqrt et +, une grille contenant les boutons des trois lignes centrales du clavier, et une ligne inférieure contenant les boutons 0, . , =. Les tailles des boutons des lignes supérieure et inférieure sont spécifiées par les variables int weightx comme indiqué dans le squelette Calculette.java.


2- Les boutons du clavier.

On distingue les boutons correspondant aux opérations arithmétiques +, -, *, /, Sqrt et l'opération d'initialisation AC, des boutons permettant de saisir des chiffres dans le champ texte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, . . Pour cela,  on définit une sous-classe BoutonCalc de JButton admettant un champ int numBouton correspondant au label du bouton et le champ int valBouton correspondant à la valeur du bouton lorsque celui représente un chiffre. Par exemple, les objets BoutonCalc associés aux chiffres sont initialisés avec numBouton = NONE et le champ valBouton correspond au chiffre. Une constante int numBouton est associée à chaque bouton d'opération arithmétique. Tous les boutons du clavier sont des objets BoutonCalc.


3- La gestion des événements.

Les boutons du clavier génèrent des événements ActionEvent. Pour abonner les auditeurs à chaque bouton on utilise un auditeur AuditeurConteneur qui implémente l'interface ContainerListener.
Chaque ajout d'un composant BoutonCalc à la fenêtre, ou aux panneaux qu'elle contient, génère un ContainerEvent. On utilise alors une classe ContainerAdapter qui implémente la méthode componentAdded(ContainerEvent e) qui réalise l'abonnement de tous les objets BoutonCalc aux auditeurs.  En particulier, la fenêtre de l'application Calculette, la ligne supérieure ainsi que la ligne inférieure doivent être abonnées à l'auditeur AuditeurConteneur. La fenêtre de l'application Calculette est ainsi l'auditeur de tous les boutons.

La classe Calculette implémente une méthode actionPerformed(ActionEvent e). Cette méthode est invoquée lorsque un bouton du clavier génère un ActionEvent. Elle appelle les méthodes concatene(int valOp) ou calcule(int op) selon que le bouton source de l'événement correspond à une opération arithmétique ou à un chiffre ou le "." .