26.4.2 Convertisseur Celsius

Transcription

26.4.2 Convertisseur Celsius
396
Chapitre 26 • Interfaces graphiques
26.4
Interfaces graphiques en Java
397
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == ’ q ’ ) System.exit(0);
}});
26.4.2
F IGURE 26.5 Une simple fenêtre.
Enfin, le constructeur exécute la méthode setVisible avec comme paramètre true
pour afficher la fenêtre à l’écran. Notez qu’une fenêtre graphique peut exister, sans pour
autant être visible sur l’écran. Voilà pourquoi l’appel à setVisible est nécessaire.
Convertisseur Celsius-Fahrenheit
On se propose de programmer un convertisseur de degrés Celsius en degrés Fahrenheit (et
inversement). La programmation de cette application nous permettra de mettre en évidence
la séparation entre le noyau fonctionnel et l’interface graphique de l’application selon le
modèle Modèle-Vue-Contrôleur. Le cahier des charges de ce convertisseur est simple : un
utilisateur pourra saisir une température que le convertisseur convertira soit en degrés Celsius
soit en degrés Fahrenheit. Il pourra aussi mettre fin à l’application à tout moment. La figure
26.6 montre la fenêtre l’interface graphique de l’application.
La création d’un objet de type FenêtreBonjour provoque la création d’une fenêtre
semblable à celle de la figure 26.5.
Dans S WING, un événement est un objet. Tous les composants graphiques peuvent émettre
des événements, et peuvent être aussi à l’écoute des événements grâce à des auditeurs (listeners en anglais). L’auditeur d’un objet spécifie les événements qu’il désire écouter, et contient
des fonctions de rappel à exécuter, appelées gestionnaires d’événements.
Nous allons maintenant faire réagir cette fenêtre à un événement extérieur. Lorsqu’elle
possède le focus, nous voulons, quand l’utilisateur appuie sur la touche « q » de son clavier,
que cette fenêtre se ferme et que l’application s’achève.
La classe FermetureFenêtre qui suit fabrique par héritage de la classe abstraite
KeyAdapter l’auditeur chargé de cette tâche. La classe KeyAdapter traite tous les événe-
ments issus des touches du clavier. Parmi les méthodes abstraites de cette classe, nous allons
définir keyPressed dans l’auditeur. Son paramètre de type keyEvent permet de tester
la touche qui a été appuyée grâce à la méthode getKeyChar(). Les classes qui gèrent les
événements appartiennent au paquetage java.awt.event.
import java.awt.event.*;
public class FermetureFenêtre extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == ’ q ’ )
System.exit(0);
}
} // fin classe FermetureFenêtre
La méthode addKeyListener permet d’ajouter à une fenêtre des auditeurs qui traitent
la réception des événements issus des touches du clavier. Pour ajouter l’auditeur précédent, il
suffit de placer dans le constructeur de la classe FenêtreBonjour l’instruction suivante :
addKeyListener(new FermetureFenêtre());
Afin de contracter le code, notez que l’auditeur peut être également défini par une classe
anonyme déclarée au moment de sa construction.
F IGURE 26.6 Un convertisseur Celsius-Fahrenheit.
Le noyau fonctionnel, le modèle, est très simple, puisqu’il est formé du nombre de degrés
courant et des deux fonctions de conversion. On rappelle que c = (f − 32) × 5/9 et que
f = c × 9/5 + 32. Le noyau fonctionnel est représenté par la classe Modèle suivante :
import java.util.*;
public class Modèle extends Observable {
private double degrés;
/** Rôle : convertir des degrés Celsius en Fahrenheit */
public void convertirEnFahrenheit(double c) {
degrés = c*1.8 + 32;
setChanged();
notifyObservers(degrés);
}
/** Rôle : convertir des degrés Fahrenheit en Celsius */
public void convertirEnCelsius(double f) {
degrés = (f-32) / 1.8;
setChanged();
notifyObservers(degrés);
}
}
La classe Modèle dérive de la classe java.util.Observable. Cette dernière permet
de définir des objets qui pourront être observés par d’autre objets. Dans la relation ModèleVue, la vue observe le modèle et visualise les changements que le modèle signale à son