Nous allons créer une applet qui pourra convertir une somme en Francs en Euros.
L'applet utilise :
Nous allons créer des champs "franc" et "euro" représentant les lignes d'édition pour pouvoir les utiliser lors de l'appui sur le bouton "Convertir".
L'applet sera l'écouteur associé au bouton, elle devra implémenter l'interface ActionListener.
Cela nous donne le code suivant :
public class Euro extends java.applet.Applet implements ActionListener { static double valEuro=6.55957; TextField franc; TextField euro;
La méthode init va nous permettre de définir la couleur de fond, d'insérer les différents composants et de définir l'écouteur des évènements générés par le bouton.
public void init() { Label lab; //couleur du fond setBackground(Color.lightGray); //titre lab=new Label("CONVERSION FRANCS/EUROS"); lab.setFont(new Font("SansSerif",Font.BOLD,16)); add(lab); //label et ligne d'édition pour les francs lab=new Label("Somme en Francs : "); lab.setFont(new Font("Monospaced",Font.PLAIN,12)); add(lab); franc=new TextField(10); add(franc); //label et ligne d'édition pour les euros lab=new Label("Equivalent Euros : "); lab.setFont(new Font("Monospaced",Font.PLAIN,12)); add(lab); euro=new TextField(10); euro.setEditable(false); euro.setBackground(Color.yellow); add(euro); //bouton Button bouton=new Button("Convertir"); bouton.addActionListener(this); add(bouton); }
Il nous reste ensuite à écrire la méthode actionPerformed qui sera exécutée lors de l'appui sur le bouton "Convertir". Nous utiliserons les méthodes getText et setText de la classe TextField pour lire et écrire dans les lignes d'édition.
public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Convertir")) { Double FR=new Double(franc.getText()); double EU=FR.doubleValue()/valEuro; //pour arrondir à 2 chiffres EU=(Math.floor(EU*100+0.5))/100; euro.setText(""+EU); } }
Testons l'applet en lui donnant différentes tailles.
Nous pouvons constater que le positionnement des différents composants dépend de la largeur de l'applet. C'est normal : comme nous n'avons donné aucun renseignement sur la position des composants, ils se mettent l'un derrière l'autre de façon automatique.
Dans cette version nous allons apporter les améliorations
suivantes :
- regrouper les objets de type Label et de type TextField
associés dans des objets de type Panell; cela évitera des changements
de ligne non désirés.
- ajouter des couleurs
- provoquer le calcul lorsqu'on appuie sur la touche
Entrée après avoir écrit la somme en Francs.
- donner le focus à la ligne d'édition de la somme en
francs dès le démarrage de l'applet.
L'utilisation des objets Panel pour regrouper des composants et la définition des couleurs se feront dans la méthode init qui deviendra :
public void init() { Label lab; Panel pan; //couleur du fond setBackground(Color.blue); //titre lab=new Label("CONVERSION FRANCS/EUROS"); lab.setFont(new Font("SansSerif",Font.BOLD,16)); lab.setForeground(Color.yellow); add(lab); //label et ligne d'édition pour les francs dans un panel pan=new Panel(); lab=new Label("Somme en Francs : "); lab.setFont(new Font("Monospaced",Font.BOLD,12)); lab.setForeground(Color.white); pan.add(lab); franc=new TextField(10); pan.add(franc); add(pan); //label et ligne d'édition pour les euros dans un panel pan=new Panel(); lab=new Label("Equivalent Euros : "); lab.setFont(new Font("Monospaced",Font.BOLD,12)); lab.setForeground(Color.white); pan.add(lab); euro=new TextField(10); euro.setEditable(false); euro.setBackground(Color.yellow); pan.add(euro); add(pan); //bouton Button bouton=new Button("Convertir"); bouton.addActionListener(this); add(bouton); }
La méthode utilisée est la suivante :
- on crée un objet de type Panel
- on insère des objets Label et TextField dans ce panel
- on insère l'objet Panel dans l'applet.
Les objets de type TextField provoquent un évènement de type ActionEvent lorsqu'on appuie sur la touche Entrée. Pour récupérer cet évènement, il nous suffira d'installer un écouteur. Cela se fera en ajoutant la ligne :
franc.addActionListener(this);
dans la méthode init de l'applet. C'est l'applet qui sera l'écouteur. On doit donc compléter sa méthode actionPerformed en tenant compte du fait que l'évènement de type ActionEvent peut être généré par la ligne d'édition franc. Nous allons utiliser la méthode getSource() de l'évènement, elle nous indique quel objet l'a généré. La méthode actionPerformed devient:
public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Convertir") || e.getSource()==franc) { Double FR=new Double(franc.getText()); double EU=FR.doubleValue()/valEuro; EU=(Math.floor(EU*100+0.5))/100; euro.setText(""+EU); } }
Pour être immédiatement utilisable, la ligne d'édition de la somme en Francs doit demander le focus. Cela peut se faire dans la méthode start de l'applet. Cette méthode est appelée automatiquement dès que l'initialisation de l'applet est terminée.
Il suffira d'écrire :
public void start() { franc.requestFocus(); }