Dans cette fiche... |
Difficulté : ![]() |
Résultat |
Si vous souhaitez faire
communiquer plusieurs applets entre elles, vous aurez peut-être besoin de
détecter quelles sont les applets présentes dans votre page HTML. Voici comment faire... Vous aurez besoin de connaître le principe des énumérations pour cet exemple. |
|
// -------------------------------------------------- // LISTEAPPLETS : DETECTION DES APPLETS SUR LA PAGE // --------------------------------------------------
import java.applet.*; import java.awt.*; import java.util.*;
public class ListeApplets extends Applet { Enumeration e; // Liste des applets trouvées Applet a; // Une applet quelconque int NbApplets; // Le nombre total d'applets
// Initialisation de l'applet public void init() { setBackground(Color.black); }
// Affichage public void paint(Graphics g) { // Les couleurs... g.setColor(Color.white);
// Obtenir une énumération de toutes les applets de la page e = getAppletContext().getApplets();
// Afficher les noms des applets NbApplets = 0; while (e.hasMoreElements()) { // Compter une applet de plus NbApplets++;
// Obtenir l'applet a = (Applet)e.nextElement();
// Afficher le nom de l'applet g.drawString(a.getClass().toString(), 10, 15*NbApplets); }
// Afficher le nombre d'applets g.setColor(Color.orange); g.drawString("La page contient : " + NbApplets + " applet(s)", 10, 15+15*NbApplets);
// Demander un nouvel affichage de cette applet, dans 1 seconde repaint(1000); } }
Les lignes non commentées ont déjà été traitées dans les exemples précédents.
import java.util.*; |
On importe le package java.util, pour pouvoir utiliser l'objet Enumeration. |
Enumeration e; Applet a; int NbApplets; |
On déclare :
|
e = getAppletContext().getApplets(); |
On identifie l'environnement (ou le contexte) actuel de notre
applet, par la méthode getAppletContext(). L'objet AppletContext ainsi créé possède la méthode getApplets() qui liste toutes les applets de la page, sous forme d'énumération. On aurait pu écrire, en détaillant :
Note : à la fin de cette opération, l'énumération e contient toutes les applets de la page, y compris celle dans laquelle on se trouve. |
NbApplets = 0; while (e.hasMoreElements()) { // Compter une applet de plus NbApplets++; ... } |
Il ne reste plus qu'à afficher les applets trouvées, en les
récupérant une à une dans l'énumération e. La boucle se déroule tant que l'énumération contient des éléments supplémentaires (des applets). Pour plus de détails sur les méthodes hasMoreElements() et nextElement(), consultez la fiche Enumérations. |
a = (Applet)e.nextElement(); |
Rappel pratique sur l'objet Enumeration e : celui-ci fournit un objet générique (une classe Object, et non une classe Applet qui nous intéresse). Il faut donc convertir l'objet reçu en objet Applet, par un cast. D'où le (Applet) de début de ligne. |
g.drawString(a.getClass().toString(), 10, 15*NbApplets); |
La méthode getClass() donne la classe dont
fait partie l'applet (la famille d'objets, en quelque sorte). La méthode toString() permet ensuite le nom de la classe, sous forme de chaîne de caractères. On aurait pu également écrire :
pour obtenir une chaîne de caractères désignant l'applet, directement. |
repaint(1000); |
On demande ici de redessiner l'applet ListeApplets dans 1
seconde (et donc une fois à chaque seconde)
Si vous supprimez cette ligne, vous constaterez que dans certains cas,
l'applet ListeApplets ne détecte pas les autres applets de la page. Ceci
s'explique par le fait que ces applets ne pas encore chargées ou
initialisées (elles ne sont pas référencées par getAppletContext()). On résoudrait le problème de façon plus élégante par les threads. Dans une prochaine fiche pratique ! |
Voici le code qui a été utilisé dans cette page HTML pour faire apparaître l'applet :
<applet code="ListeApplets.class" width=250 height=50> Votre navigateur n'est pas compatible Java ! </applet>
Une seconde applet (AppletParams.class) a été placée sur la page, pour montrer les effets de getApplets().
Pour plus de précisions sur l'intégration d'une applet, cliquez ici.