next up previous contents index
Next: 25 Gestion des évènements Up: Java: Programmation graphique Previous: 23 Applets et applications

Subsections

24 Découvrir la programmation graphique

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.

24.1 Les composants

         

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);

Cliquez sur ce bouton et il ne se passera rien pour le moment !!!
 


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.

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 ).

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.

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+

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.

 

 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)

Supposons que notre applet décide d'être à l'écoute de la souris.

 
public class UnPetitBoutonPression extends Applet   implements MouseListener { ... }

Cliquez sur ce bouton et les étiquettes des boutons devraient s'échanger !!!

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);
  }
}

24.4 Des widgets personnalisés

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.

 

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) { }
}

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:

Voici des boutons personnalisés.
 

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) { }
}

24.5 Les différents widgets

 

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.

Nous consacrerons un chapitre entier à ces widgets. En attendant, voici un exemple, provenant du tutorial de jdk , réunissant une certain nombre de widgets.



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