|
|
|
|
|
|
Développons en Java v 1.60 | |
| Copyright (C) 1999-2011 Jean-Michel DOUDOUX |
![]() |
![]() |
![]() |
Une applet est un programme Java qui s'exé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 :
Ce chapitre contient plusieurs sections :
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 guillemets à la suite du paramètre 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 | Rôle |
| 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 spécifié par le paramètre 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 être inclus entre les tags APPLET et /APPLET.
<PARAM nomParametre value=« valeurParametre »> </APPLET>
La valeur est toujours passée sous forme de chaîne de caractères donc entourée de guillemets.
Exemple : <APPLET code=« Exemple.class » width=200 height=300>
Le texte contenu entre <APPLET> et </APPLET> est afficher si le navigateur ne supporte pas java.
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éthodes 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.
Cette méthode permet l'initialisation de l'applet : elle n'est exécutée qu'une seule et unique fois après le chargement de l'applet.
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.
Le navigateur appelle automatiquement la méthode lorsque l'on quitte la page HTML. Elle interrompt les traitements de tous les processus en cours.
Elle est appelée après l'arrêt de l'applet ou lors de l'arrêt de la machine virtuelle. Elle libère les ressources et détruit les threads restants
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 :
| Exemple : |
public void update(Graphics g) { paint (g);} |
Cette méthode permet d'afficher le contenu de l'applet à l'écran. Ce rafraî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.
| Exemple : |
public void paint(Graphics g) |
La méthode repaint() force l'utilisation de la méthode paint().
Il existe des méthodes dédiées à 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 trois manières différentes :
| utiliser les noms standards prédéfinis | Color.nomDeLaCouleur
Les noms prédéfinis de la classe Color sont : black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow |
||
| utiliser 3 nombres de type entier représentant le RGB |
(Red,Green,Blue : rouge,vert, bleu)
|
||
| utiliser 3 nombres de type float utilisant le système 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
dans ce cas 0.0,0.0,0.0 représente le noir et 1.0,1.0,1.0 représente le blanc. |
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 :
| Exemple ( code Java 1.0 ) : |
Dimension dim = size(); int applargeur = dim.width; int apphauteur = dim.height; |
Avec le JDK 1.1, il faut utiliser getSize() à la place de size().
| Exemple ( code Java 1.1 ) : |
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);
} |
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.
| Exemple : |
public void paint(Graphics g) {
super.paint(g);
g.drawString("CodeBase = "+getCodeBase(),10,15);
g.drawString("DocumentBase = "+getDocumentBase(),10,30);
} |
Affiche un message dans la barre de statut de l'applet
| Exemple : |
public void paint(Graphics g) {
super.paint(g);
showStatus("message à afficher dans la barre d'état");
} |
Permet de fournir des informations concernant l'auteur, la version et le copyright de l'applet
| Exemple : |
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.
Cette méthode 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} , ... }
| Exemple : |
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.
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).
Cette méthode permet l'accès à des fonctionnalités du navigateur.
Cette méthode permet d'attacher l'applet au navigateur.
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.
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.
| Exemple ( code Java 1.1 ) : |
public void actionPerformed(ActionEvent evt) { ... } |
Pour plus d'information, voir le chapitre «L'interception des actions de l'utilisateur».
| Exemple ( code Java 1.1 ) : |
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 sur «L'interception des actions de l'utilisateur».
La méthode getParameter() retourne les paramètres écrits dans la page HTML. Elle retourne une chaîne de caractères de type String.
| Exemple : |
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 chaîne de caractères dans le type voulu en utilisant les Wrappers
| Exemple : |
String taille;
int hauteur;
taille = getParameter(" hauteur ");
Integer temp = new Integer(taille)
hauteur = temp.intValue(); |
| Exemple : |
int vitesse;
String paramvitesse = getParameter(" VITESSE ");
if (paramvitesse != null) vitesse = Integer.parseInt(paramVitesse);
// parseInt ne fonctionne pas avec une chaîne vide |
| Attention : l'appel à la méthode getParameter() dans le constructeur pas défaut lève une exception de type NullPointerException. |
| Exemple : |
public MonApplet() {
String taille;
taille = getParameter(" message ");
} |
Java supporte deux standards :
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 fournis à 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 client. Celles ci seront chargées quand l'image sera dessinée pour la première fois.
| Exemple : |
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 cet 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.
| Exemple : |
int largeur = 0; int hauteur = 0; largeur = image.getWidth(this); hauteur = image.getHeight(this); |
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.
| Exemple : |
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 :
| Exemple : |
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.
| Exemple : |
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 exé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 du à l'effacement de l'écran et à son rafraichissement. Dans ce cas, seul le rafraichissement est effectué.
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 fenêtre.
| Exemple ( code Java 1.1 ) : |
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) { }
} |
Une applet est une application Java hébergée sur une machine distante (un serveur Web) et qui s'exécute, après chargement, sur la machine client équipée d'un navigateur. Ce navigateur contrôle 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 n'ont 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 chargé par le client 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
|
|
|
|
|
|
|
Développons en Java v 1.60 | ||
| Copyright (C) 1999-2011 Jean-Michel DOUDOUX |