IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Développons en Java

13/07/2003




14. Les applets
14.1. L'intégration d'applets dans une page HTML
14.2. Les méthodes des applets
14.2.1. La méthode init()
14.2.2. La méthode start()
14.2.3. La méthode stop()
14.2.4. La méthode destroy()
14.2.5. La méthode update()
14.2.6. La méthode paint()
14.2.7. Les méthodes size() et getSize()
14.2.8. Les méthodes getCodeBase() et getDocumentBase()
14.2.9. La méthode showStatus()
14.2.10. La méthode getAppletInfo()
14.2.11. La méthode getParameterInfo()
14.2.12. La méthode getGraphics()
14.2.13. La méthode getAppletContext()
14.2.14. La méthode setStub()
14.3. Les interfaces utiles pour les applets
14.3.1. L'interface Runnable
14.3.2. L'interface ActionListener
14.3.3. L'interface MouseListener pour répondre à un clic de souris
14.4. La transmission de paramètres à une applet
14.5. Applet et le multimédia
14.5.1. Insertion d'images.
14.5.2. Insertion de sons
14.5.3. Animation d'un logo
14.6. Applet et application (applet pouvant s'éxécuter comme application)
14.7. Les droits des applets


14. Les applets


Une appet est une programme Java qui s'éxécute dans un logiciel de navigation supportant java ou dans l'appletviewer du JDK.

Attention : il est recommandé de tester les applets avec l'appletviewer car les navigateurs peuvent prendre l'applet contenu dans leur cache plutôt que la dernière version compilée.
Le mécanisme d'initialisation d'une applet se fait en deux temps :

  • la machine virtuelle java instancie l'objet Applet en utilisant le constructeur par défaut
  • la machine virtuelle java envoie le message init à l'objet Applet

Ce chapitre contient plusieurs sections :

  • L'intégration d'applets dans une page HTML
  • Les méthodes des applets
  • Les interfaces utiles pour les applets
  • La transmission de paramètres à une applet
  • Applet et le multimédia
  • Applet et application (applet pouvant s'éxécuter comme application)
  • Les droits des applets


14.1. L'intégration d'applets dans une page HTML


Dans une page HTML, il faut utiliser le tag APPLET avec la syntaxe suivante :

<APPLET CODE=« Exemple.class » WIDTH=200 HEIGHT=300 > </APPLET>
Le nom de l'applet est indiqué entre guillement à la suite du parametre CODE.

Les paramètres WIDTH et HEIGHT fixent la taille de la fenêtre de l'applet dans la page HTML. L'unité est le pixel. Il est préférable de ne pas dépasser 640 * 480 (VGA standard).

Le tag APPLET peut comporter les attributs facultatifs suivants :

Tag Role
CODEBASE permet de spécifier le chemin relatif par rapport au dossier de la page contenant l'applet. Ce paramètre suit le paramètre CODE.
Exemple : CODE=nomApplet.class CODEBASE=/nomDossier

HSPACE et VSPACE permettent de fixer la distance en pixels entre l'applet et le texte
ALT affiche le texte specifié par le parametre lorsque le navigateur ne supporte pas Java ou que son support est désactivé.
Le tag PARAM permet de passer des paramètres à l'applet. Il doit etre inclus entre les tags APPLET et /APPLET.

<PARAM nomParametre value=« valeurParametre »> </APPLET>
La valeur est toujours passée sous forme de chaine de caractères donc entourée de guillemets.

<APPLET code=« Exemple.class » width=200 height=300>
Le texte contenu entre <APPLET> et </APPLET> est afficher si le navigateur ne supporte pas java.


14.2. Les méthodes des applets


Une classe dérivée de la classe java.applet.Applet hérite de méthodes qu'il faut redéfinir en fonction des besoins et doit être déclarée public pour fonctionner.

En général, il n'est pas nécessaire de faire un appel explicite aux méthode init(), start(), stop() et destroy() : le navigateur se charge d'appeler ces méthodes en fonction de l'état de la page HTML contenant l'applet.


14.2.1. La méthode init()


Cette méthode permet l'initialisation de l'applet : elle n'est éxécutée qu'une seule et unique fois après le chargement de l'applet.


14.2.2. La méthode start()


Cette méthode est appelée automatiquement après le chargement et l'initialisation (via la méthode init()) lors du premier affichage de l'applet.


14.2.3. La méthode stop()


Le navigateur appelle automatiquement la méthode lorsque l'on quitte la page HTML. Elle interrompt les traitements de tous les processus en cours.


14.2.4. La méthode destroy()


Elle est appelée après l'arrêt de l'applet ou lors de l'arret de la machine virtuelle. Elle libère les ressources et détruit les threads restants


14.2.5. La méthode update()


Elle est appelée à chaque rafraichissement de l'écran ou appel de la méthode repaint(). Elle efface l'écran et appelle la méthode paint(). Ces actions provoquent souvent des scintillements. Il est préférable de redéfinir cette méthode pour qu'elle n'efface plus l'écran :

public void update(Graphics g) { paint (g);}

14.2.6. La méthode paint()


Cette méthode permet d'afficher le contenu de l'applet à l'écran. Ce refraîchissement peut être provoqué par le navigateur ou par le système d'exploitation si l'ordre des fenêtres ou leur taille ont été modifiés ou si une fenêtre recouvre l'applet.

public void paint(Graphics g)
La méthode repaint() force l'utilisation de la méthode paint().

Il existe des méthodes dédié à la gestion de la couleur de fond et de premier plan

La méthode setBackground(Color), héritée de Component, permet de définir la couleur de fond d'une applet. Elle attend en paramètre un objet de la classe Color.

La méthode setForeground(Color) fixe la couleur d'affichage par défaut. Elle s'applique au texte et aux graphiques.

Les couleurs peuvent être spécifiées de 3 manières différentes :

utiliser les noms standard predéfinis Color.nomDeLaCouleur
Les noms predéfinis de la classe Color sont : black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow

utiliser 3 nombres entiers représentant le RGB
(Red,Green,Blue : rouge,vert, bleu)

Color macouleur = new Color(150,200,250); setBackground (macouleur); // ou setBackground(150,200,250);
utiliser 3 nombre de type float utilisant le systeme HSB
(Hue, Saturation, Brightness : teinte, saturation, luminance). Ce système est moins répandu que le RGB mais il permet notamment de modifier la luminance sans modifier les autres caractéristiques

setBackground(0.0,0.5,1.0);
dans ce cas 0.0,0.0,0.0 représente le noir et 1.0,1.0,1.0 représente le blanc.


14.2.7. Les méthodes size() et getSize()


L'origine des coordonnées en Java est le coin supérieur gauche. Elles s'expriment en pixels avec le type int.

La détermination des dimensions d'une applet se fait de la façon suivante :

Dimension dim = size(); int applargeur = dim.width; int apphauteur = dim.height;
Avec le JDK 1.1, il faut utiliser getSize() à la place de size().

public void paint(Graphics g) { super.paint(g); Dimension dim = getSize(); int applargeur = dim.width; int apphauteur = dim.height; g.drawString("width = "+applargeur,10,15); g.drawString("height = "+apphauteur,10,30); }

14.2.8. Les méthodes getCodeBase() et getDocumentBase()


Ces méthodes renvoient respectivement l'emplacement de l'applet sous forme d'adresse Web ou de dossier et l'emplacement de la page HTML qui contient l'applet.

public void paint(Graphics g) { super.paint(g); g.drawString("CodeBase = "+getCodeBase(),10,15); g.drawString("DocumentBase = "+getDocumentBase(),10,30); }

14.2.9. La méthode showStatus()


Affiche une message dans la barre de status de l'applet

public void paint(Graphics g) { super.paint(g); showStatus("message à afficher dans la barre d'état"); }

14.2.10. La méthode getAppletInfo()


Permet de fournir des informations concernant l'auteur, la version et le copyright de l'applet

static final String appletInfo = " test applet : auteur, 1999 \n\nCommentaires"; public String getAppletInfo() { return appletInfo; }
Pour voir les informations, il faut utiliser l'option info du menu Applet de l'appletviewer.


14.2.11. La méthode getParameterInfo()


Permet de fournir des informations sur les paramètres reconnus par l'applet

Le format du tableau est le suivant :

{ {nom du paramètre, valeurs possibles, description} , ... }

static final String[][] parameterInfo = { {"texte1", "texte1", " commentaires du texte 1" } , {"texte2", "texte2", " commentaires du texte 2" } }; public String[][] getParameterInfo() { return parameterInfo; }
Pour voir les informations, il faut utiliser l'option info du menu Applet de l'appletviewer.


14.2.12. La méthode getGraphics()


Elle retourne la zone graphique d'une applet : utile pour dessiner dans l'applet avec des méthodes qui ne possèdent pas le contexte graphique en paramètres (ex : mouseDown ou mouseDrag).


14.2.13. La méthode getAppletContext()


Cette méthode permet l'accès à des fonctionnalités du navigateur.


14.2.14. La méthode setStub()


Cette méthode permet d'attacher l'applet au navigateur.


14.3. Les interfaces utiles pour les applets



14.3.1. L'interface Runnable


Cette interface fournit le comportement nécessaire à un applet pour devenir un thread.

Les méthodes start() et stop() de l'applet peuvent permettre d'arrêter et de démarrer un thread pour permettre de limiter l'usage des ressources machines lorsque la page contenant l'applet est inactive.


14.3.2. L'interface ActionListener


Cette interface permet à l'applet de répondre aux actions de l'utilisateur avec la souris

La méthode actionPerformed() permet de définir les traitements associés aux événements.

public void actionPerformed(ActionEvent evt) { ... }
Pour plus d'information, voir le chapitre "Gestion des événements avec Java 1.1"


14.3.3. L'interface MouseListener pour répondre à un clic de souris


import java.applet.*; import java.awt.*; import java.awt.event.*; public class AppletMouse extends Applet implements MouseListener { int nbClick = 0; public void init() { super.init(); addMouseListener(this); } public void mouseClicked(MouseEvent e) { nbClick++; repaint(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { super.paint(g); g.drawString("Nombre de clics : " + nbClick, 10, 10); } }
Pour plus d'information, voir le chapitre "Gestion des événements avec Java 1.1" et celui sur "l'interface MouseListener"


14.4. La transmission de paramètres à une applet


La méthode getParameter() retourne les paramètres écrits dans la page HTML. Elle retourne une chaine de caractères de type String.

Sting parametre; parametre = getParameter(« nom-parametre »);
Si le paramètre n'est pas renseigné dans la page HTML alors getParameter retourne null

Pour utiliser les valeurs des paramètres, il sera souvent nécessaire de faire une conversion de la chaine de caractères dans le type voulu en utilisant les Wrappers

String taille; int hauteur; taille = getParameter(« hauteur »); Integer temp = new Integer(taille) hauteur = temp.intValue();
int vitesse; String paramvitesse = getParameter(« VITESSE »); if (paramvitesse != null) vitesse = Integer.parseInt(paramVitesse); // parseInt ne fonctionne pas avec une chaine vide

Attention : l'appel à la méthode getParameter() dans le constructeur pas défaut lève une exception de type NullPointerException.
public MonApplet() { String taille; taille = getParameter(" message "); }

14.5. Applet et le multimédia



14.5.1. Insertion d'images.


Java supporte deux standards :

  • le format GIF de Compuserve qui est beaucoup utilisé sur internet car il génère des fichiers de petite taille contenant des images d'au plus 256 couleurs.
  • et le format JPEG. qui convient mieux aux grandes images et à celles de plus de 256 couleurs car le taux de compression avec perte de qualité peut être précisé.

Pour la manipulation des images, le package nécessaire est java.awt.image.

La méthode getImage() possède deux signatures : getImage(URL url) et getImage (URL url, String name).

On procède en deux étapes : le chargement puis l'affichage. Si les paramètres fournies à getImage ne désignent pas une image, aucune exception n'est levée.

La méthode getImage() ne charge pas de données sur le poste clinkt. Celles ci seront chargées quand l'image sera dessinée pour la première fois.

public void paint(Graphics g) { super.paint(g); Image image=null; image=getImage(getDocumentBase( ), "monimage.gif"); //chargement de l'image g.drawImage(image, 40, 70, this); }
Le sixième paramètre de la méthode drawImage() est un objet qui implémente l'interface ImageObserver. ImageObserver est une interface déclarée dans le package java.awt.image qui sert à donner des informations sur le fichier image. Souvent, on indique this à la place de cette argument représentant l'applet elle même. La classe ImageObserver détecte le chargement et la fin de l'affichage d'une image. La classe Applet contient le comportement qui se charge de faire ces actions d'ou le fait de mettre this.

Pour obtenir les dimensions de l'image à afficher on peut utiliser les méthodes getWidth() et getHeight() qui retourne un nombre entier en pixels.

int largeur = 0; int hauteur = 0; largeur = image.getWidth(this); hauteur = image.getHeight(this);

14.5.2. Insertion de sons


Seul le format d'extension .AU de Sun est supporté par java. Pour utiliser un autre format, il faut le convertir.

La méthode play() permet de jouer un son.

import java.net.URL; ... try { play(new URL(getDocumentBase(), « monson.au »)); } catch (java.net.MalformedURLException e) {}
La méthode getDocumentBase() détermine et renvoie l'URL de l'applet.

Ce mode d'exécution n'est valable que si le son n'est à reproduire qu'une seule fois, sinon il faut utiliser l'interface AudioClip.

Avec trois méthodes, l'interface AudioClip facilite l'utilisation des sons :

  • public abstract void play() // jouer une seule fois le fichier
  • public abstract void loop() // relancer le son jusqu'à interruption par la méthode stop ou la fin de l'applet
  • public abstract void stop() // fin de la reproduction du clip audio

import java.applet.*; import java.awt.*; import java.net.*; public class AppletMusic extends Applet { protected AudioClip aC = null; public void init() { super.init(); try { AppletContext ac = getAppletContext(); if (ac != null) aC = ac.getAudioClip(new URL(getDocumentBase(), "spacemusic.au")); else System.out.println(" fichier son introuvable "); } catch (MalformedURLException e) {} aC.loop(); } }
Pour utiliser plusieurs sons dans une applet, il suffit de déclarer plusieurs variables AudioClip.

L'objet retourné par la méthode getAudioClip() est un objet qui implémente l'interface AudioClip défini dans la machine virtuelle car il est très dépendant du système de la plate forme d'exécution.


14.5.3. Animation d'un logo


import java.applet.*; import java.awt.*; public class AppletAnimation extends Applet implements Runnable { Thread thread; protected Image tabImage[]; protected int index; public void init() { super.init(); //chargement du tableau d'image index = 0; tabImage = new Image[2]; for (int i = 0; i < tabImage.length; i++) { String fichier = new String("monimage" + (i + 1) + ".gif "); tabImage[i] = getImage(getDocumentBase(), fichier); } } public void paint(Graphics g) { super.paint(g); // affichage de l'image g.drawImage(tabImage[index], 10, 10, this); } public void run() { //traitements éxécuté par le thread while (true) { repaint(); index++; if (index >= tabImage.length) index = 0; try { thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } public void start() { //demarrage du tread if (thread == null) { thread = new Thread(this); thread.start(); } } public void stop() { // arret du thread if (thread != null) { thread.stop(); thread = null; } } public void update(Graphics g) { //la redéfinition de la méthode permet d'éviter les scintillements paint(g); } }
La surcharge de la méthode paint() permet d'éviter le scintillement de l'écran due à l'effacement de l'écran et à son rafraichissement. Dans ce cas, seul le rafraichissement est effectué.


14.6. Applet et application (applet pouvant s'éxécuter comme application)


Il faut rajouter une classe main à l'applet, définir une fenêtre qui recevra l'affichage de l'applet, appeler les méthodes init() et start() et afficher la fenetre.

import java.applet.*; import java.awt.*; import java.awt.event.*; public class AppletApplication extends Applet implements WindowListener { public static void main(java.lang.String[] args) { AppletApplication applet = new AppletApplication(); Frame frame = new Frame("Applet"); frame.addWindowListener(applet); frame.add("Center", applet); frame.setSize(350, 250); frame.show(); applet.init(); applet.start(); } public void paint(Graphics g) { super.paint(g); g.drawString("Bonjour", 10, 10); } public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) { System.exit(0); } public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } }

14.7. Les droits des applets


Une applet est une application Java hébergée sur une machine distante (un serveur Web) et qui s'éxécute, après chargement, sur la machine clinkt équipée d'un navigateur. Ce navigateur controle les accès de l'applet aux ressources locales et ne les autorisent pas systématiquement : chaque navigateur définit sa propre règle.

Le modèle classique de sécurité pour l 'exécution des applets, recommandé par Sun, distingue deux types d'applets : les applets non dignes de confiance (untrusted) qui non pas accès aux ressources locales et externes, les applets dignes de confiance (trusted) qui ont l'accès. Dans ce modèle, une applet est par défaut untrusted.

La signature d'une applet permet de désigner son auteur et de garantir que le code charger par le clinkt est bien celui demandé au serveur. Cependant, une applet signée n'est pas forcement digne de confiance.

La suite de ce chapitre sera développée dans une version future de ce document


Copyright (C) 1999-2003 Jean Michel DOUDOUX