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