Cours INF 4253 Programmation orientée objet

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 ...


un extrait du document



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]


Référence :  HYPERLINK "http://java.sun.com/docs/books/tutorial/applet/appletsonly/appletTag.html" 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

 HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" \o "class in java.lang" java.lang.Object
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET  HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html" \o "class in java.awt" java.awt.Component
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET  HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html" \o "class in java.awt" java.awt.Container
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET  HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Panel.html" \o "class in java.awt" java.awt.Panel
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET java.applet.Applet

Référence :  HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/applet/Applet.html" 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)










. . .


Référence :  HYPERLINK "http://java.sun.com/docs/books/tutorial/applet/appletsonly/getParam.html" 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

 HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" \o "class in java.lang" java.lang.Object
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET java.awt.Color
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET java.awt.Font
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET java.awt.FontMetrics
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET java.awt.Component
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET java.awt.Graphics
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET java.awt.Polygon
 INCLUDEPICTURE "http://java.sun.com/j2se/1.4.2/docs/api/resources/inherit.gif" \* MERGEFORMATINET 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

 HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#paint(java.awt.Graphics" 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
}
}

 HYPERLINK "http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Color.html" 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 :

 HYPERLINK "http://java.sun.com/products/jfc/tsc/articles/painting/index.html" http://java.sun.com/products/jfc/tsc/articles/painting/index.html
 HYPERLINK "http://java.sun.com/products/jfc/tsc/articles/painting/index.html#background" http://java.sun.com/products/jfc/tsc/articles/painting/index.html#background
 HYPERLINK "http://java.sun.com/docs/books/tutorial/uiswing/index.html" 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.