Enoncé lab #6

publicité
Cours INF 1573 Programmation II
Laboratoire 8 Hiver 2008
Prof. Ilham Benyahia
Chargées de laboratoire
Diagne Fatou et Lahcen Boumedjout
Objectifs du laboratoire
-
Renforcer la programmation par événements et la réutilisation de composantes de l’API de
java,
Utilisation de classes abstraites
Introduire des éléments de la qualité de programmation : la documentation du code javadoc
Les applets :
- point d’entrée
- le tag HTML Applet
- la transmission de paramètres
- le cycle de vie et le paradigme d’événements
Le package AWT (Abstract Windowing Toolkit) :
- La classe abstraite Graphics, les objets et les contextes graphiques
- La classe Color
- La classe Font
- Autres packages graphiques
Autres notions : restrictions de sécurité
Les applets
Exemple de code java :
import java.applet.Applet;
import java.awt.Graphics;
public class Bienvenue extends Applet {
public void paint(Graphics g) {
g.drawString("Bienvenue dans le monde des applets!", 50, 25);
}
}
Imbrication dans le code html :
< APPLET
[CODEBASE = codebaseURL]
CODE = appletFile
[ALT = alternateText]
[NAME = appletInstanceName]
WIDTH = pixels
HEIGHT = pixels
[ALIGN = alignment]
[VSPACE = pixels]
[HSPACE = pixels]
>
[< PARAM NAME = appletParameter1 VALUE = value >]
[< PARAM NAME = appletParameter2 VALUE = value >]
. . .
[alternateHTML]
</APPLET>
Référence : http://java.sun.com/docs/books/tutorial/applet/appletsonly/appletTag.html
Exercice 1.a Employez le code java ci-haut pour créer l’applet Bienvenue, puis l’exécuter dans le
appletviewer et dans un navigateur.
Cycle de vie d’un applet
Le cycle de vie d’un applet se découpe en diverses étapes ponctuées par des événements :
public class Simple extends Applet {
. . .
public void init() { . . . } // evt : (re)chargement de l’applet
public void start() { . . . } // evt : chargement de l’applet
public void stop() { . . . } // evts : changement de page,
//
sortie du navigateur
public void destroy() { . . . } // ménage final
. . .
}
Exercice 1.b Modifiez la classe Simple ci-haut pour créer une applet qui génère une trace du cycle
de vie d’une applet à l’aide de la méthode println().
Hiérarchie de classe d’une applet
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Panel
java.applet.Applet
Référence : http://java.sun.com/j2se/1.4.2/docs/api/java/applet/Applet.html
Exercice 1.c Trouvez la méthode paint() dans la hiérarchie ci-haut. A quelle classe appartient
cette méthode ? Dans quelles circonstances est-elle invoquée ?
Paramètres d’une applet
-
public String getParameter(String name)
<APPLET CODE=AppletSubclass.class WIDTH=anInt HEIGHT=anInt>
<PARAM NAME=parameter1Name VALUE=aValue>
<PARAM NAME=parameter2Name VALUE=anotherValue>
</APPLET>
<APPLET CODE="Animator.class" WIDTH=460 HEIGHT=160>
<PARAM NAME="image" VALUE="images/Beans">
<PARAM NAME="x" VALUE="50">
<PARAM NAME="y" VALUE="100">
. . .
</APPLET>
Référence : http://java.sun.com/docs/books/tutorial/applet/appletsonly/getParam.html
Exercice 1.d Créez un paramètre dans le code html de l’exercise 1.a et modifier à nouveau la
classe Simple pour obtenir la valeur de ce paramètre.
Le package AWT (Abstract Windowing Tollkit)
Hiérarchie partielle de AWT
java.lang.Object
java.awt.Color
java.awt.Font
java.awt.FontMetrics
java.awt.Component
java.awt.Graphics
java.awt.Polygon
java.awt.Toolkit
La classe abstraite Graphics
-
Déclare un ensemble de méthodes : drawstring(), drawLine(), etc…
Méthodes implémentées par la JVM spécifiquement pour chaque plate-forme
L’invocation des méthodes se fait par l’intermédiaire d’un contexte graphique auquel nous
avons accès grâce à l’objet graphique passé en référence à paint()
public void paint(Graphics g) {
Système de coordonnées de points, d’origine 0,0 située dans le coin supérieur gauche
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#paint(java.awt.Graphics)
La classe Color
Encapsule un ensemble de couleurs appartenant à l’espace de couleurs défini par une valeur RGB
(Red Green Blue) (entre 0 et 2563 – 1, 16.7 millions de couleurs )
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.setColor(Color.red);
g.setColor(new Color(255,0,0)); // constructeur1
g.setColor(new Color(256*256*255)); // constructeur2
}
}
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Color.html
La classe Font
Une police est définie par son nom (ex. Helvetica), son style (ex. bold) et sa grandeur (size) ( ex.
14 points). Si une police n’est pas définie sur un système, celle-ci sera remplacée par la police par
défaut.
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.setFont(new Font("Helvetica”, Font.BOLD,14);
}
}
La classe abstraite Toolkit et la classe abstraite GraphicsEnvironment
Ces superclasses abstraites chapeautent les implémentations du AWT. Elles stipulent diverses
méthodes pour accéder aux composants concrets d’une implémentation spécifique.
Exercice 2.a 1) Compilez et exécutez la classe ListeDesPolices. 2) Remplacez la méthode
obsolète (deprecated) getFontList() de la classe Toolkit par la méthode plus récente
getAvailableFontFamilyNames() de la classe GraphicsEnvironment. Affichez les noms de polices
avec drawString() en employant comme dimension d’espacement entre chaque ligne la dimension
de la police courante.
import java.applet.Applet.*;
import java.awt.*;
public class ListeDesPolices extends Applet { // liste des polices disponibles
String [] Polices;
public void init() {
Polices = GetToolkit().getFontList();
}
public void paint(Graphics g) {
for (int i = 0; i < Polices.length; i++) {
System.out.println(i + “: “ + Polices[i]);
}
}
}
Exercice 2.b Créez une applet pour dessiner diverses formes de diverses couleurs ainsi que leur
nom respectif en employant différentes polices.
Quelques références à leur sujet :
http://java.sun.com/products/jfc/tsc/articles/painting/index.html
http://java.sun.com/products/jfc/tsc/articles/painting/index.html#background
http://java.sun.com/docs/books/tutorial/uiswing/index.html
Exercice 2.c Pour cet exercice, vous devrez consulter la documentation en ligne de la classe
Graphics. Indiquez si les énoncés sont vrai ou faux. Si faux, indiquez pourquoi.
-
Les deux premiers arguments de drawOval(x, y, 50, 100) spécifient les coordonnées du centre
de l’ovale.
-
La méthode fillPolygon() dessine un polygone solide avec la couleur courante.
-
La méthode drawArc() permet des angles négatifs.
-
La méthode drawRoundRect peut être utilisée pour dessiner un cercle.
-
La méthode getSize() retourne la grandeur en centimètres de la police courante.
-
Le pixel de coordonnées (0,0) est situé exactement au centre du moniteur.
3. Notes sur la sécurité
Les applets posent un risque de sécurité pour la machine où elles sont téléchargées. Pour cette
raison le navigateur imposent des limitations sur ce qu’une applet peut faire :
-
L’applet s’exécute dans un espace restreint (sandbox)
L’applet ne peut exécuter une application locale
L’applet ne peut ni lire ni écrire de fichiers sur la machine locale
L’applet ne peut établir un connexion réseau qu’avec l’hôte d’où il a été téléchargé
Ces limitations sont mises en œuvre par la classe SecurityManager qui est configurée par le
navigateur ou l’appletviewer.
Téléchargement