Une Applet... - IA - IAD - Java : Supports de cours
Transcription
Une Applet... - IA - IAD - Java : Supports de cours
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