Une Applet... - IA - IAD - Java : Supports de cours

publicité
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
Téléchargement