TP Java no7 : Conception d`une application graphique

Transcription

TP Java no7 : Conception d`une application graphique
TP Java no7 : Conception d’une application graphique
IUP I.I.E.S
22 Mars
J. Carme
Objectifs du TP : Pratique de l’héritage, utilisation de Javadoc
Exercice 1: Convertisseurs Francs/Euros
Dans ce TP, nous allons créer le programme de conversion dont nous avons fait l’interface dans le
TP précédent, en y apportant quelques améliorations. Le résultat que vous devez obtenir vous est
donnée dans le fichier “Resultat.class”. Vous pouvez l’executer en le plaçant dans votre répertoire
de travail et en tapant:
java Resultat
Dans le TP précédent, nous avons appris à manipuler des composants Swing pour créer des
interfaces graphiques en Java. Pour cela, nous avons créé un objet de type JFrame et nous avons
placé dedans chacun des composants dont nous avions besoin.
Dans ce TP, nous allons utiliser la technique généralement utilisée pour créer les interfaces en
Java. Au lieu de créer un objet de type JFrame, nous allons écrire une classe Convertisseur qui
représentera la fenètre de notre application, puis nous n’aurons plus qu’à créer un objet de type
Convertisseur dans la fonction main de notre programme.
La classe Convertisseur est une fenêtre qui doit disposer dès sa création de tous les éléments
de l’interface.
Elle est donc construite ainsi:
• Elle hérite de JFrame
• Chacun des composants (JLabel,JButton...) est un de ses attributs.
• Toutes les opérations nécéssaire à sa construction (add,setLayout...) doivent se faire dans
son constructeur.
Question 1.1: A partir de la correction du TP précédent, construisez la
classe Convertisseur
Il n’y a rien de prévu pour afficher les résultats dans l’interface telle qu’elle est. Il faut deux
JLabel supplémentaires qui doivent apparaı̂tre dans la grille, entre la ligne contenant la zone de
saisie et celle contenant les boutons. Vous appelerez ces JLabel entree et sortie.
Question 1.2: Ajoutez les JLabel permettant l’affichage du résultat dans
l’interface.
Nous allons maintenant rendre notre programme réactif aux actions de l’utilisateur. Nous devons
pour cela utiliser le concept d’interface (cela n’a rien à voir avec l’interface utilisateur).
Nous n’allons pas rentrer ici dans le détail du fonctionnement des interfaces. L’idée est la suivante:
pour que notre classe Convertisseur soit réactive aux actions de l’utilisateur, elle doit remplir le
contrat ActionListener.
Ce contrat est appelé “interface”, et on dit que la classe Convertisseur implémente l’interface
ActionListener. Il est spécifié au compilateur en même temps que l’héritage, à la déclaration de
la classe. Par exemple, si notre convertisseur hérite de JFrame et implémente ActionListener, on
écrira:
class Convertisseur extends JFrame implements ActionListener {
...
}
Le contrat stipule que la classe doit contenir la méthode suivante:
public void actionPerformed(ActionEvent e)
A chaque fois qu’une action aura lieu, cette méthode sera appelée. Il faut ensuite indiquer les
composants capables de déclencher des actions, en utilisant la méthode setActionListener(...).
Par exemple, à la création de l’objet bouton1, on peut préciser qu’il est capable de déclencher une
action ainsi:
bouton1.addActionListener(this);
Rappel: on arrète l’execution d’un programme avec l’instruction
System.exit(0);
Question 1.3: Modifiez le programme pour qu’il s’arrète lorsque vous
cliquez sur le bouton “quitter”
La méthode actionPerformed est appelée à chaque action declanchée. Comme nous voulons
que le comportement du programme soit différent selon le bouton sur lequel on clique, il faut que
la méthode actionPerformed soit capable de différencier les clic sur chacun des boutons.
Pour cela, on va associer un nom de commande à chaque action. Par exemple, si vous voulez
associer l’action “convertir” au bouton 1, il vous suffit d’invoquer la méthode:
bouton1.setActionCommand(‘‘convertir’’);
Quand une action est déclanchée, la méthode actionPerformed est appelée avec l’argument
actionEvent e. Pour savoir quelle action a été déclanchée, on peut obtenir le nom de la commande
associée en invoquant la méthode getActionCommand() de l’objet passé en argument e. Par
exemple, pour quitter le programme si l’action déclenchée est “quitter”, il suffit d’écrire dans la
méthode actionPerformed:
if (e.getActionCommand().equals("quit"))
System.exit(0);
Pour aller chercher la valeur affichée dans la zone de saisie, vous devez utiliser la méthode
getText() de la classe JTextField. Comme cette méthode renvoie une String, vous devez la
convertir en double avant de pouvoir effectuer des calculs dessus. Vous pouvez faire cela ainsi:
double valeur = parseDouble(chaine);
La chaine contenue dans “chaine” est alors convertit en double et stockée dans “valeur”.
Enfin, pour afficher un résultat dans vos label “entree” et “sortie”, vous pouvez utiliser la méthode
setText de la classe JLabel.
Question 1.4: Modifiez votre application pour que lorsque l’utilisateur
entre une valeur dans la zone de saisie et qu’il clique sur le bouton “convertir”, la conversion soit effectuée et affichée comme dans le programme
fourni en exemple.
Exercice 2: Convertisseur universel
Nous voulons maintenant que notre application soit capable de faire des conversion entre n’importe
quelle monnaie.
Nous allons pour cela ajouter deux composants graphiques JList dans notre application, disposés comme dans l’exemple. La conversion se fera en fonction des éléments selectionnés dans ces
2
listes. Aller consulter la documentation de JList pour savoir comment effectuer cette modification.
L’ensemble des monnaies et leurs taux de change sont indiqués directement dans le programme et
stockés dans un tableau.
Question 2.1: Modifiez votre application pour pouvoir choisir entre quelle
monnaies vous désirez effectuer la conversion.
Question 2.2: Modifiez votre application pour que l’utilisateur puisse
ajouter de nouvelles monnaies en indiquant leur taux de change.
3

Documents pareils