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 :
- int gridx et int gridy qui contrôlent la position
d'un composant sur la grille,
- int weightx, int weighty qui contrôlent les espaces
verticaux ou horizontaux supplémentaires alloués aux
composants,
- int gridheight, int gridwidth qui contrôlent le nombre de
lignes et de colonnes de la grille,
- la constante GridBagConstraints.BOTH qui remplit l'espace
disponible verticalement et horizontalement.
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 "." .
- La méthode concatene(int
valOp) gère la saisie des
nombres dans le champ texte. En particulier, elle gère la saisie
des nombres décimaux par le bouton ".".
- La méthode calcule(int
op) effectue les opérations
arithmétiques et met à jour le champ texte.