Auteurs: Vincent Padovani, Jean-Baptiste Yunès
L'objectif de cette séance est de réaliser une mini-calculatrice
afin d'expérimenter (entre autres) la gestion d'un JTextField
,
l'utilisation du gestionnaire de positions GridBagLayout
(flexible
mais complexe, et peu et mal documenté), ainsi que la définition
et l'implémentation d'un automate simple (le mécanisme interne de la calculette).
La calculette doit être munie au minimum des 4 opérations arithmétiques standard. Idéalement, elle doit pouvoir travailler avec des nombres entiers et des nombres à virgule, et calculer une racine carée.
Ce TP est prévu pour durer deux séances. Commencez par écrire l'interface de la calculette. L'implémentation de son mécanisme interne est un casse-tête demandant un peu de réflexion par écrit.
Le panneau de la calculette sera représenté par une nouvelle classe Calculette
, extension de JPanel
.
Il vous faudra probablement définir des sous-classes de la
classe Bouton
, extension
de JButton
,
pour distinguer les différents types de boutons les boutons pour les
chiffres, les boutons des opérateurs et peut-être les boutons spéciaux (pour
effacer, etc).
L'interface sera constituée d'un champ de saisie
texte de classe JTextField
, et d'un clavier formé de boutons de classe Bouton
définie comme ci-dessus. Ces éléments seront encapsulés dans le panneau de la calculatrice, lui-même encapsulé dans la fenêtre principale. Ce panneau sera muni
du gestionnaire de positions GridBagLayout
. Les ajouts des composants internes se feront à l'aide d'un spécificateur de contraintes de classe GridBagConstraints
(c.f. le tutorial ). La fenêtre principale devra pouvoir être redimensionnée avec un ajustement uniforme de la taille de tous ses composants internes.
Vous pouvez chercher à obtenir l'une ou l'autre des dispositions ci-dessous.
Dans la première, le panneau contient 4 colonnes, et chaque bouton s'étale sur 1 ou 2
colonnes. Dans la seconde, la dernière ligne contient 8 boites invisibles renvoyées par Box.createRigidArea(Dimension d)
avec une dimension nulle de manière à garantir l'existence de 8 colonnes, et chaque bouton s'étale sur 2 ou 3 colonnes
La calculette devra se comporter comme une calculette ordinaire. Les événements
ActionEvent
générés par les boutons seront reçus par autant d'écouteurs qu'il y a de
types de boutons (3 si on suit la description située plus haut). Les
écouteurs implémentent, évidemment
l'interface ActionListener
. Pour
un bouton portant un chiffre, il suffit d'ajouter le caractère porté par le
bouton (le chiffre) à la fin du JTextField
. Pour un bouton
d'opérateur, il doit agir sur deux valeurs : une valeur précédemment
saisie et stockée quelque part et la valeur courante affichée dans le JTextField
.
Il est conseillé de chercher d'abord sur papier l'automate associé au mécanisme interne. Voici quelques indications :
double
pour mémoriser le membre gauche de la dernière opération demandée (e.g. "42" suivi de "+" : on mémorise 42.
).false
, l'appui d'une touche numérique doit démarrer l'entrée d'un nouveau nombre).a +
b
et en postfixe a b +
).