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