La classe Hashtable

La classe Hashtable du package java.util permet de créer des collections d'objets associés à des noms, en quelque sorte des dictionnaire. Une même Hashtable peut contenir des objets de classe quelconque.

Utilisation

Constructeurs

Parmi les constructeurs disponibles, l'un n'attend aucun paramètre, l'autre attend une taille initiale en paramètre. On construira donc un objet dic de la classe Hashtable en écrivant simplement:

        Hashtable dic=new Hashtable();

ou

        Hashtable dic=new Hashtable(n);

pour prévoir une capacité initiale de n.

Ajouter un objet

On ajoute un objet o dans la Hashtable dic en l'associant au nom S avec l'instruction:

        dic.put(S,o);

Lire un objet

On retrouve l'objet o associé au nom S avec l'instruction:

        o=dic.get(S);

Attention la méthode get renvoie des objets généraux (classe Object), il est donc souvent nécessaire d'effectuer un transtypage pour retrouver le type qui a été stocké.

Par exemple, si on crée une Hashtable contenant des entiers associés à leurs noms, on obtiendra l'entier associé à la chaîne "deux" en écrivant :

        Integer I=(Integer)dic.get("deux");

Exemple : noms de couleurs

Ecrivons une applet qui permet de choisir une couleur à partir d'une liste de noms.

Déclarations

On utilise un Canvas pour colorier, une liste de couleurs et une Hashtable qui associe les couleurs à leurs noms. On implémente l'interface ItemListener pour gérer les changements dans la liste de sélection.

        import java.applet.*;
        import java.awt.*;
        import java.awt.event.*;
        import java.util.*;

        public class Couleurs extends Applet 
         implements ItemListener {

         Canvas zoneDessin=new Canvas();
         List liste=new List();
         Hashtable dico=new Hashtable();

Méthode init

La méthode init place les composants et remplit le dictionnaire et la liste.

         public void init() {
          setLayout(new BorderLayout());
          add(BorderLayout.WEST,liste);
          add(BorderLayout.CENTER,zoneDessin);
          liste.addItemListener(this);
          //initialisation du dictionnaire et de la liste
          dico.put("blanc",Color.white);
          liste.add("blanc");
          dico.put("bleu",Color.blue);
          liste.add("bleu");
          dico.put("cyan",Color.cyan); 
          liste.add("cyan");
          dico.put("gris",Color.gray); 
          liste.add("gris");
          dico.put("gris clair",Color.lightGray);
          liste.add("gris clair");
          dico.put("gris foncé",Color.darkGray);
          liste.add("gris foncé");
          dico.put("jaune",Color.yellow); 
          liste.add("jaune");
          dico.put("magenta",Color.magenta);
          liste.add("magenta");
          dico.put("noir",Color.black);
          liste.add("noir");
          dico.put("orange",Color.orange);
          liste.add("orange");
          dico.put("rose",Color.pink);
          liste.add("rose");
          dico.put("rouge",Color.red);
          liste.add("rouge");
          dico.put("vert",Color.green);
          liste.add("vert");
          liste.select(0);
          zoneDessin.setBackground(Color.white);
         }

Lecture d'une couleur

La méthode lireCouleur retrouvera l'objet de type Color associé à un nom de couleur.

         public Color lireCouleur(String nom) {
          return (Color)dico.get(nom);
         }

Notons le transtypage nécessaire car la méthode get renvoie par défaut une variable de type Object.

Changements de couleurs

La méthode itemStateChanged exigée par l'interface ItemListener va permettre de réagir aux changements de couleurs.

         public void itemStateChanged(ItemEvent e) {
          if (e.getStateChange()==ItemEvent.SELECTED) {
           Color col=lireCouleur(liste.getSelectedItem());
           zoneDessin.setBackground(col);
           zoneDessin.repaint();
          }
         }

Le choix d'une nouvelle couleur dans la liste correspond à l'évènement de statut SELECTED.



Retour au menu