Les composants graphiques du paquetage AWT

Introduction

Le paquetage AWT (Abstract Windowing Toolkit) contient différents outils permettant la réalisation d'applications graphiques.

- Un composant (correspondant à une classe dérivée de la classe abstraite Component possédant une représentation graphique ou de la classe MenuComponent) et qui peut donc être visualisée sur un écran (bouton, liste déroulante, zone de dessin, menus, barres de défilement,...). Ces deux classes sont des classes (abstraites) origines de la hiérarchie des classes du paquetage.

-Un composant est destiné à être inséré dans un conteneur, c'est-à-dire un objet de la classe Container qui est elle_même une sous-classe de la classe Component : un tel objet est un composant susceptible de contenir d'autres composants AWT.

-Un gestionnaire de placement implantant l'interface LayoutManager (par exemple BoxLayout, FlowLayout ou GridLayout) est en charge de la disposition des composants dans un conteneur. Chaque conteneur dispose d'un gestionnaire de placement : un gestionnaire par défaut est défini pour chaque conteneur, mais il peut être modifié par la méthode setLayout de la classe Container

La hiérarchie de classes de composantsts et de conteneurs est la suivante :

Les composants

- Parmi les autres sous-classes de la classe Component citons :

Dans l'applet suivante, les lignes tapées successivement dans l'instance de TextField sont recopiées dans l'instance de TextArea :


   --> cat AppletTrois.java
   import java.awt.event.*;
   import java.awt.*;
   import java.applet.*;
   public class AppletTrois extends Applet implements KeyListener{    
      private TextField field;
      private TextArea texte;
      public AppletTrois( ){
         field = new TextField(40);
         add(field);
         texte = new TextArea(10, 20);
         add(texte);
         field.addKeyListener(this);
      }
   public void keyTyped(KeyEvent e) {
      if (e.getKeyChar() == '\n'){
          String str = field.getText();
          field.setText("");
          texte.append(str);
          texte.append("\n");
      }
   }
   public void keyReleased(KeyEvent e) {}
   public void keyPressed(KeyEvent e) {}
 }                                                      

Exécuter l'applet

- Parmi les sous-classes de la classe MenuComponent citons :


   --> cat UnMenu.java
   import java.awt.*;
   public class Menu2 extends MenuBar{
      public MenuItem menuQuitter, menuNouveau;   
      public Menu2(){
         Menu menuFichier = new Menu("Fichier");
         menuNouveau = new MenuItem("Nouveau");
         menuQuitter = new MenuItem("Quitter");
         menuFichier.add(menuNouveau);
         menuFichier.addSeparator();
         menuFichier.add(menuQuitter);
         Menu menuAide = new Menu("Aide");
         add(menuFichier);
         setHelpMenu(menuAide);
        }
   }              

Les conteneurs

Ainsi que nous l'avons dit, il s'agit de composants particuliers pouvant contenir d'autres composants. La classe Container, racine de la sous-hiérarchie des conteneurs, contient en particulier différentes formes de méthodes add et remove permettant respectivement l'ajout et la suppression d'un composant dans le conteneur courant.

La classe Panel

Il s'agit du type de conteneur le plus simple. Le gestionnaire de placement par défaut en est FlowLayout
Une application peut y attacher tout type de composants.
Dans l'exemple suivant


   --> cat Barre.java
   import java.awt.*;
   public class Barre extends Panel{
      public Barre(){
         Choice listeCouleurs = new Choice();;
         Button quitter;
         String nomCouleurs[] =
            {"bleu", "vert", "rouge", "jaune"};
         Color couleurs [] = {Color.blue, Color.green, Color.red,    
                                   Color.yellow};
         setBackground(Color.lightGray);
         for(int i=0; i

La classe Window

Il s'agit d'une fenêtre sans bord ni barre de menu dont le gestionnaire de placement par défaut est de type BorderLayout. Lors de sa construction elle doit appartenir à une instance de Frame (ou une autre fenêtre ou une instance de Dialog).

Les instances de cette clase sont des fenêtres avec titres et bordure qui sont typiquement utilisées pour acquérir des données de l'utilisateur. La classe Frame

Il s'agit d'une fenêtre avec titre et bordure (gestionnaire par défaut BorderLayout).
A sa création, une instance est invisible jusqu'à ce que lui appliquée la méthode show
Parmi les méthodes de la classe, citons void setTitle(String titre)


   --> cat Fenetre.java
   import java.awt.*;
   public class Fenetre extends Frame{
      protected int largeur;
      protected int hauteur;
      public Fenetre(String titre, int largeur, int hauteur){   
         setTitle(titre);
         this.largeur = largeur;
         this.hauteur = hauteur;
         setSize(largeur, hauteur);
         show( );
      }
   }           
   --> cat AppliFenetre.java
   import java.util.*;
   public class AppliFenetre{
      public static void main(String args[]){
         int largeur, hauteur;
         if (args.length < 3){
             System.err.println("Erreur paramètre");
             System.exit(1);
            }
         largeur = Integer.parseInt(args[1]);
         hauteur = Integer.parseInt(args[2]);
         new Fenetre(args[0], largeur, hauteur);
        }
   }     


   --> cat Fenetre2.java
   import java.awt.*;
   public class Fenetre2 extends Frame{
      protected int largeur;
      protected int hauteur;
      public Fenetre2(String titre, int largeur, int hauteur){   
            this.largeur = largeur;
            this.hauteur = hauteur;
            setTitle(titre);
            setSize(largeur, hauteur);
            Button bouton1 = new  Button("B1");
            Button bouton2 = new  Button("B2");
            setMenuBar(new Menu2());
            add(bouton1, "North");
            add(bouton2, "South");
            setBackground(Color.blue);
            show();
      }
   }              
   -->  cat AppliFenetre2.java
   import java.util.*;
   public class AppliFenetre2{
      public static void main(String args[]){
         int largeur, hauteur;
         if (args.length < 3){
             System.err.println("Erreur paramètre");    
             System.exit(1);
             }
         largeur = Integer.parseInt(args[1]);
         hauteur = Integer.parseInt(args[2]);
         new Fenetre2(args[0], largeur, hauteur);
     }
   }                                          


   --> cat Fenetre2.java
   import java.awt.*;
   public class Fenetre3 extends Frame{
      protected int largeur;
      protected int hauteur;
      public Fenetre3(String titre, int largeur, int hauteur){    
            this.largeur = largeur;
            this.hauteur = hauteur;
            setTitle(titre);
            setSize(largeur, hauteur);
            Button bouton1 = new  Button("B1");
            Button bouton2 = new  Button("B2");
            setMenuBar(new Menu2());
            add(bouton1, "North");
            add(bouton2, "North");
            setBackground(Color.lightGray);
            setMenuBar(new Menu2());
            add("North", new Barre());
            show();
      }
   }     
   --> cat AppliFenetre3.java
   import java.util.*;
   public class AppliFenetre3{
      public static void main(String args[]){
         int largeur, hauteur;
         if (args.length < 3){
             System.err.println("Erreur paramère");
             System.exit(1);
             }
         largeur = Integer.parseInt(args[1]);
         hauteur = Integer.parseInt(args[2]);
         new Fenetre3(args[0], largeur, hauteur);
     }
   }    

La classe Dialog