Cours de JAVA Les applets Emmanuel ADAM Institut des Sciences et Techniques de Valenciennes Université de Valenciennes et du Hainaut-Cambrésis source principale : « Thinking in Java (B. Eckel) » Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Une Applet... Second type de programmation Java, le plus connu car le plus visible Ne peut être exécutée que depuis un Navigateur Le Navigateur doit contenir en interne une machine virtuelle sa propre méthode main Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Les méthodes d'une applet Une applet est un objet graphique (descendant de panel), aussi contient elle des méthodes graphiques. Les principales méthodes d'une applet sont : init(), que le navigateur appelle après chaque chargement de l’applet., start(), lancée après l’initialisation, stop(), arrête l’applet lorsqu’elle n’est plus visible, destroy(), appelé à l’arrêt du navigateur, ou au rechargement de l’applet, paint(Graphics g) est appelé chaque fois que l’applet est réaffichée. Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Exemple d'applet import java.awt.*; import java.applet.*; public class Applet1 extends Applet { Font font; public void init() { font = new Font("TimesRoman", Font.PLAIN,20); } public void paint(Graphics g) { g.setFont(font); g.setColor(Color.red); g.drawString("Salut tout le monde!", 0, font.getSize()); g.draw3DRect(0, 0, 180, 30, true); } } Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Insertion dans une page Web L'insertion est possible par le tag APPLET : <HTML> <HEAD> <TITLE>Exemple d'applet</TITLE> </HEAD> <BODY> <H1>Un exemple dapplet</H1> <applet code="Applet1.class" width=200 height=50> desole ... ce navigateur ne supporte pas les applets </applet> </BODY> </HTML> Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Passage de paramètres dans une page Web La méthode getParameter("msg") retourne la valeur du paramètre indiqué dans la page web. Pour passer les paramètres, il faut appeler l’applet dans la page web comme ceci : <Applet code="Applet1.class" width=300 height=200> <param name=msg value="voici le message"> </Applet> Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Archiver les classes Lorsqu'une applet utilise une autre classe située dans le même répertoire, elle charge cette classe, ce qui cause un ralentissement. Pour éviter les multiples chargement il faut compresser les classes avec jar L’appel à partir d’une page web se fera sous la forme : <Applet code="Applet1.class" archive= "nom_archive.jar" width=300 height=200> <param name=msg value="voici le message"> </Applet> Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Applet permanente Toutes les applets utilisent la même machine virtuelle. Si l’on souhaite créer une applet à activité permanente (défilement de texte, d’images, ...), il faut la créer en tant que processus afin de ne pas bloquer les autres applets. Pour cela, il faut que l’applet implémente l’interface Runnable (similaire à Thread, mais qui permet de réécrire la fonction stop()) Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Exercice Ecrire une applet qui affiche un texte déroulant dans la barre d'état du navigateur. On utilisera la fonction showStatus de l'applet. La fréquence de défilement est passée en paramètre Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Exercice solution 1/3 import java.awt.Font; import java.applet.Applet; /** definition d'une applet faisant defiler un texte dans la barre d'état */ public class Defile extends Applet implements Runnable { /** processus lie a l'applet */ Thread process = null; /** texte defilant */ String texte; /** vitesse de defilement */ int temps; /** defilement ou non du texte*/ boolean go = false; /** initialisation de l'applet */ public void init() { // récupère les paramètres, la vitesse va de 0 tres rapide à 1000 lent (1 = seconde) String strFrequence = getParameter("vitesse"); if (strFrequence == null) temps = 400; else temps = Integer.parseInt(strFrequence); texte = getParameter("texte"); if (texte == null) texte = "..barre d'etat defilante.."; } // initialise la fonte Font font = new java.awt.Font("TimesRoman", Font.PLAIN, 24); setFont(font); Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Exercice solution 2/3 /** fonction modifiant la valeur du booléen go pour la mise en marche ou l'arrêt du défilement */ public void go() { go = !go; } /** commencement de l'applet, création d'un processus associé*/ public void start() { process = new Thread(this); process.start(); } /** fin de l'applet, destruction du processus associé*/ public void stop() { process = null; } } /** deroulement du processus - tant que le processus existe, et est le même, * le texte est decalé, et affiché en barre d'etat toute les temps millisecondes*/ public void run() { Thread tache = Thread.currentThread(); while (process == tache) { if (go) { try { Thread.currentThread().sleep(temps); texte = texte.substring(1) + texte.substring(0,1); showStatus(texte); } catch (InterruptedException e) { } } } } Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis Exercice solution 3/3 <html> <head> <title>Clignotement</title> </head> <body> <h1>Texte clignotant</h1> <hr> <applet code="Defile.class" width=1 height=1 name="defile"> <param name=texte value="Ceci est le texte destine à defiler dans la barre d'etat.."> <param name=vitesse value="4"> alt="Votre navigateur comprend le tag Applet, mais ne lance pas l'applet..." Votre navigateur ignore totalement l'applet ... </applet> <A HREF="javascript:document.defile.go();">Appel de l'applet</A> <hr> <a href="Defile.java">The source.</a> </body> </html> Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis