Une application graphique Java est une application possédant une certain nombre de fenêtre graphiques et qui va interagir avec l'utilisateur de cette application. Le concept de base d'une application graphique est le widget. Un widget est l'entité de base d'une interface graphique qui réagit aux actions d'un utilisateur: manipulation de la souris, du clavier et tout autre évènement du système graphique.
Les widgets sont de forme rectangulaires sont organisés hiérarchiquement. Un widget particulier appelé widget principal widget racine ou se trouve au sommet de cette hiérarchie.
Du point de vue du programmeur, une application graphique Java est un objet d'une classe contenant un ou plusieurs composants graphiques. L'ensemble des composants graphiques sont disponibles à travers les classes du package java.awt.
Généralement, à partir de ses composants standards et des comportements prédéfinis aux actions de l'utilisateurs, le programmeur, à travers l'héritage, crée de nouvelles classes pour son application en redéfinissant l'apparence et le comportement prédéfinis.
Nous verrons, plus loin, en détail les différents type de composants que l'on dispose en Java , ainsi que de la gestion des évènements.
Commençons par une toute petite applet. Une applet est une application graphique dans lequel on peut ajouter toutes sortes de widgets . Nous allons insérer dans notre applet, deux boutons qui sont des objets de la classe java.awt.Button
Button b1 = new Button("Coucou !"); Button b2 = new Button("! uocuoc"); add(b);
import java.applet.*; import java.awt.*; public class PetitsBoutons extends Applet { public void init() { Button b1 = new Button("Coucou !"); Button b2 = new Button("! uocuoc"); add(b1); add(b2); } public static void main(String args[]) { PetitsBoutons m = new PetitsBoutons(); m.init(); Frame f = new Frame("PetitsBoutons"); f.setSize(200,70); f.pack(); f.show(); f.add(m); } }
Une applet est un container(Containers en anglais). Les containers sont constitués de composants qui s'affiche à l'écran dès la portion de la fenêtre dans laquelle ils sont placés devient visible à l'utilisateur. Le fait d'ajouter un composant avec la méthode add conduit le système à dessiner les objets devenus visibles.
Il existe plusieurs manière de placer des composants dans une fenêtre: il existe
donc plusieurs type de gestionnaires dans Java . Nous verrons cela en détail dans
le chapitre 27 entièrement consacré aux (Layout .)Layout.
Contentons nous de remarquer que le gestionnaire par défaut, pour certains containers,
place les objet les un à la suite des autres, de gauche à droit, selon l'ordre dans lequel
ils ont été insérés. Si la place vient à manquer sur une même ligne, les objets restants
sont placés dans les lignes suivantes. Lorsqu'on redimentionne la fenêtre, c'est le rôle
de ce gestionnaire de replacer correctement les objets.
Tout objet peut décider d'être à l'écoute d'évènements. En particulier,
s'il décide de réagir aux actions de la souris, la classe à laquelle
appartient ce objet devra implanter l'interface MouseListener.
Supposons que notre applet décide d'être à l'écoute de la souris.
24.2 Les layout manager
Nous venons de parler de la position des composants dans une fenêtre. Le code que nous
avons écrit ne contient aucune précision quant à ces positions. Comment cela marche ?
Par défaut, les containers se débrouillent pour placer leurs composants selon une
configuration prédéfinie. Ainsi, à chaque container est associé un gestionnaire
de placement (Layout manager ).
24.3 La gestion des évènements
Comme vous avez pu le remarquer, l'action de l'utilisateur sur le bouton de
notre applet ne produit aucun effet ou presque. Le bouton s'enfonce bien
(comme tout bouton qui se respecte) mais aucune autre action ne survient.
Comment associer à la pression sur le bouton une action particulière ?
C'est tout1.1+
public void mouseClicked(MouseEvent e)
public void mousePressed(MouseEvent e)
public void mouseReleased(MouseEvent e)
public void mouseEntered(MouseEvent e)
public void mouseExited(MouseEvent e)
public class UnPetitBoutonPression extends Applet implements MouseListener { ... }
La classe UnPetitBoutonPression devra donc implanter toutes les méthode de l'interface MouseListener. L'implantation de ces méthodes va définir les actions à réaliser lorsqu'un des cinq évènements se produit:
import java.applet.*; import java.awt.*; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class PetitsBoutonsPression extends Applet implements MouseListener { Button b1, b2; public void init() { b1 = new Button("Coucou !"); b2 = new Button("! uocuoc"); add(b1); add(b2); b1.addMouseListener(this); b2.addMouseListener(this); } public void mousePressed(MouseEvent e) { String s = b1.getLabel(); b1.setLabel(b2.getLabel()); b2.setLabel(s); } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public static void main(String args[]) { PetitsBoutonsPression m = new PetitsBoutonsPression(); m.init(); Frame f = new Frame("PetitsBoutonsPression"); f.setSize(200,70); f.pack(); f.show(); f.add(m); } }
L'applet que nous venons de voir est extrêmement réduit et les
évènements à gérer sont en petit nombre. Dans la pratique, il y peut
avoir un nombre incalculable (ou presque) d'action à gérer. Il est
alors fastidieux de programmer toute cette gestion dans le code des
méthodes de l'interface MouseListener. Il est évidement bien
plus agréable de ``décentraliser'' le code de gestion des évènements
de la souris. Chaque composant définit sa propre gestion facilitant
ainsi une programmation bien plus modulaire. Notre bouton, par exemple,
devrait gérer toute seule la gestion des évènements sans se reposer sur
celle de l'applet. Pour ce faire, il convient de définir, pour notre
bouton, une classe dérivée de la classe java.awt.button dans
laquelle, on redéfinira les méthodes de l'interface MouseListener.
Déporter la gestion des évènements sur les boutons permet
de maîtriser mieux la programmation de ces évènements.
Cette remarque est également vraie pour l'apparence et
autres propriétés des composants. Si l'on désire, donner
une apparence particulière à nos boutons, plutôt que de le
faire dans la classe principale, on déportera également ce
code dans la nouvelle classe que l'on vient de se créer:
24.4 Des widgets personnalisés
import java.applet.*;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
public class MeilleursPetitsBoutons extends Applet {
MonBouton b1, b2;
public void init() {
b1 = new MonBouton("Coucou !", this);
b2 = new MonBouton("! uocuoc", this);
}
public void echanger() {
String s = b1.getLabel(); b1.setLabel(b2.getLabel()); b2.setLabel(s);
}
public static void main(String args[]) {
MeilleursPetitsBoutons m = new MeilleursPetitsBoutons();
m.init();
Frame f = new Frame("MeilleursPetitsBoutons");
f.setSize(200,70);
f.pack();
f.show();
f.add(m);
}
}
class MonBouton extends Button implements MouseListener {
MeilleursPetitsBoutons pere;
public MonBouton(String s, MeilleursPetitsBoutons pere) {
super(s);
this.pere = pere;
setForeground(Color.red);
setBackground(Color.blue);
pere.add(this);
addMouseListener(this);
}
public void mousePressed(MouseEvent e) { pere.echanger(); }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseClicked(MouseEvent e) { }
}
class MonBouton extends Button implements MouseListener { MeilleursPetitsBoutons pere; public MonBouton(String s, MeilleursPetitsBoutons pere) { super(s); this.pere = pere; setForeground(Color.red); setBackground(Color.blue); pere.add(this); addMouseListener(this); } public void mousePressed(MouseEvent e) { pere.echanger(); } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } }
Comme nous l'avons déjà dit, un widget est un composant graphique.
Il existe plusieurs natures de widgets. Tous ces widgets sont
dérivées de la classe Component.
24.5 Les différents widgets

Next: 25 Gestion des évènements
Up: Java: Programmation graphique
Previous: 23 Applets et applications
Touraivane
6/12/1998