Travaux pratiques en Java Séance 5: Les Applets Najib Tounsi Une applet est un petit programme java qui s'exécute dans un navigateur. L'appel à une applet se fait daonc dans une page HTML (balises <applet></applet> ou <object></object>). On peut aussi visualiser une applet par le programme appletviewer disponible avec les plateforme java. 1. Applets Bonjour. Exemple 1: Une applet simple qui affiche un message import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } }; Compiler normalement avec javac HelloWorld.java. Créer le fichier HTML HelloWorld.html suivant: <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head><title> Une simple applet </title></head> <body> <applet code="HelloWorld.class" width=200 height=100> </applet> </body> </html> La valeur de l'attribut code de la balise applet est le nom du fichier compilé HelloWorld.class correpondant à l'applet à lancer. On visualise l'applet dans un navigateur Web ou par le programme appletviewer. appletviewer HelloWorld.html Résultat: Noter... Exemple 2: Une applet simple qui affiche un message avec décorations import java.applet.Applet; import java.awt.*; // on utilise toutes les classes du package public class HelloWorld extends Applet { public void paint(Graphics g) { g.setColor(Color.red); //couleur de la fonte int x = getSize().width; //largeur de la zone d'affichage int y = getSize().height; //taille de la zone d'affichage g.drawRect(0, 0, x - 1, y - 1); // on entoure la zone par un rectangle g.setFont(new Font("Monotype Corsiva", Font.PLAIN, 24)); g.drawString("Hello world!", x/4, y/2); } }; Résultat: Noter... Exemple 3: Une applete simple qui affiche un message en Arabe import java.awt.*; import java.applet.Applet; public class Salamate extends Applet { public void paint(Graphics g){ char[] salam = new char[5]; salam[0]=1587; // lettre Sin en Unicode salam[1]=1604; // lettre lam salam[2]=1605; // lettre mim salam[3]=1575; // lettre alif salam[4]=1578; // lettre tah g.setFont(new Font("Traditional Arabic", Font.PLAIN, 25)); g.drawString(String.valueOf(salam), 20, 20); } } Résultat: Noter... Exemple 4: Une applete simple qui affiche un message bidirectionnel ar/fr. L'arabe s'affichant de droite à gauche (right-to-left ou RTL). Java aplique l'algorithme bidirectionnel d'Unicode. import java.awt.*; import java.applet.Applet; public class Salamate extends Applet { public void paint(Graphics g){ char[] salam = new char[5]; salam[0]=1587; // lettre Sin en Unicode salam[1]=1604; // lettre lam salam[2]=1605; // lettre mim salam[3]=1575; // lettre alif salam[4]=1578; // lettre tah g.setFont(new Font("Traditional Arabic", Font.PLAIN, 25)); char[] yah = {1610,1575}; g.drawString(String.valueOf(salam) + " " + String.valueOf(yah) + " ali" + " baba ", 10, 45); } } Résultat: Noter: 1. La différence entre l'ordre du texte en mémoire (l'ordre de saisie des caractères, dit ordre logique,) et l'ordre du texte affiché (ordre visuel). En notant en majuscule les mots arabes : ordre physique en mémoire: SALMATE YA ali baba ordre logique d'affichage: ali baba AY ETAMLAS 2. En outre, il y a deux notions à voir: le contexte globle d'affichage d'une texte bidi, et le passage directionnel (séquence de direction fixe). Ici, le contexte globale est aussi RTL: ali baba AY ETAMLAS ---ltr---> <---rtl---<----- r t l --------- deux passages directionnels différents, LTR et RTL contexte globale d'affichage (ordre de lecture orale) est RTL En remplaçant maintenant l'instruction g.drawString(...) précédente par (la chaîne commençant en français): g.drawString("Hello " + String.valueOf(salam) + " " + String.valueOf(yah) + " ali" + " baba ", 10, 45); on obtient : où le contexte globale est cette fois-ci ltr. Hello AY ETAMLAS ----> <---------- ali baba ---------> ------------ l t r ----------> trois passages directionnels différents le contexte globale d'affichage LTR 2. Applet complète. Voici maintenant une applet plus complète avec les méthodes init(), start(), paint(), stop(), destroy(). L'effet est d'afficher un message qui permet de suivre la thrace d'exécution de l'applet. Version 1: affichage dans la zone de l'applet elle même. import java.applet.Applet; import java.awt.*; public class TraceApplet extends StringBuffer message; public } public } public } public } public Applet { // message a afficher void start() { message.append(" starting"); void init(){ message = new StringBuffer(100); message.append( " initializing"); void stop() { message.append(" stoping"); void destroy() { message.append( " destroying"); void paint(Graphics g){ message.append(" painting") ; g.drawString(message.toString(), 10, 20); } } Compiler et lancer l'applet. La réduire ensuite en icone, la rétablir, l'aggrandir, la couvrir et l'arrêter. Noter qu'avec destroy, le message n'est pas visible. Version 2: affichage dans la zone de l'applet et sur le terminal de lancement. On rajout l'instruction System.out.println("--même message--"); dans chaque méthode. On devrait voir C:\APPLETS>appletviewer TraceApplet.html initializing starting painting stoping starting painting painting stoping destroying Notez que cette fois-ci on voir aussi le message finale destroying. Exercice: mettre un compteur pour afficher le numéro d'occurrence de chaque message painting. ...painting 1 painting 2 stoping starting painting 3 painting 4 ... That's all folks.