cours intensif java - vivredeprofits25.files.wordpress.com · cours intensif java 3er cours:...

23
. Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 Enrica D UCHI LIAFA, Paris 7 [email protected]

Upload: truongtruc

Post on 12-Sep-2018

239 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

.

Cours intensif Java

3er cours: introduction aux Applets

Septembre 2009

Enrica DUCHI LIAFA, Paris 7

[email protected]

Page 2: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

JAVA ET L ’ INTERNET

Applet:

programmes écrits en java et intégrés dans une page web

utilisées pour créer des applications interactives qu’on ne peut pas faireavec HTML

chargée depuis une machine distante (serveur)

exécutée sur la machine locale (client)

exécutée sous le controle d’une autre application (navigateur avecinterpréteur java)

Servlet: (hors du champs de ce cours)

pour développer des serveurs pour internet.

Page 3: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

RESTRICTIONS ET SÉCURITÉ

Pour assurer la sécurité des utilisateurs, certaines opérations sont interditesaux applets par défaut.

Une applet ne peut exécuter que son propre code, ne peut accéder auxfichiers de la machine client et ne peut modifier les propriétés système dela machine client.

Une applet peut interagir au travers du réseau uniquement avec leserveur sur lequel elle a été chargée.

Il est possible, avec le consentement explicite de l’utilisateur, de donnerquelques permissions, toujours assez limités, à des applets dont on a vérifiéla provenance au moyen de signatures électroniques (pas traité ici).

Page 4: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

UNE PREMIÈRE APPLET

Une applet qui écrit Hello web.

import java.awt.*;

import java.applet.*;

public class MonApplet extends Applet

{

public void paint(Graphics gc){

gc.drawString("Hello Web",40,40);

}

}

Notre applet est un objet de la classe Applet du package java.applet.

La classe Applet hérite de la classe Panel définie dans la bibliothèqued’interface graphique awt: une applet est donc un objet graphique !

Pour comprendre cette applet il nous faut étudier un peu la bibliothèque awt

où sont définis la classe Graphics et la méthode drawString.

Page 5: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

INTERFACES GRAPHIQUES

Les packages pour interfaces graphiques (GUI pour Graphical User Interface)

Le package initial java.awt.

Le package javax.swing, plus avancé et permettant de faire certainesopérations plus simplement, mais réutilisant les concepts de base de awt.

Les applications utilisent maintenant plutôt swing, mais pour comprendre lesconcepts de base en peu de temps, awt est plus commode.

On distingue deux grandes parties dans la création d’une GUI:

la définition de tout ce qui peut être affiché: fenêtre, dessins, bouton,barre d’outils, menu déroulant, etc.

la gestion des évènements: interagir avec l’utilisateur (souris, clavier, etc).

Nous aurons le temps d’aborder uniquement la première partie: suffisantepour faire une page applet animée, à défaut d’être interactive.

Page 6: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

MON PREMIER COMPOSANT GRAPHIQUE: UNE FENÊTRE

Pour ouvrir une fenêtre on commence par créer une classe qui la décrit: cetteclasse hérite de la classe Frame (fenêtre générique) et de ses méthodes,entre autres setTitle, setSize, setVisible:

public class Fenetre extends Frame

{

public Fenetre(){

setTitle("Fenetre, modele Duchi");

setSize(500,700);

setVisible(true);

}

}

Il suffit maintenant de créer un objet de la classe Fenetre !class Essai

{

public static void main(String [] arg){

Fenetre f=new Fenetre();

}

}

L’exécution ouvre une fenêtre moins large que haute: les boutons habituelssont présents mais inactifs, il faut tuer le processus (Ctrl-C) pour l’arrêter.

Page 7: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

LA VOILÀ

Page 8: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

CONTENANT ET CONTENU

Notre objet fenêtre est un composant graphique avec deux qualités:

la fenêtre dispose d’un environnement graphique: il s’agit d’un objet quigère l’affichage dans le rectangle de la fenêtre.

les fenêtre est un contenant: elle peut contenir d’autres composantsgraphiques (des applets, des menus, des boutons, etc).

Pour utiliser un composant, par exemple une fenêtre, on peut:

utiliser les méthodes de l’environnement graphique pour dessinerdirectement dans le rectangle, indexé en coordonnées cartésiennes.

ou ajouter des (sous-)composants dans le contenant, comme parexemple, des zones de dessins, des boutons, des menus, etc.Ces composants sont alors disposés suivant une mise-en-pageautomatique (layout) paramétrable, qui s’adapte au rectangle.

Les composants ajoutés dispose de leur environnement graphique et peuventêtre aussi des contenants auxquels on peut ajouter d’autres composants, etc.

(Pour compléter le tableau, on dira seulement que les interactions avec l’utilisateur sont réaliséesen associant à ces composants des écouteurs qui attendent un évènement particulier (clic ouclavier) pour effectuer des actions.)

Page 9: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

L’ ENVIRONNEMENT GRAPHIQUE D’ UN COMPOSANT

L’environnement graphique d’une fenêtre (ou plus généralement d’uncomposant graphique) est un objet g de la classe java.awt.Graphics

l’objet g s’occupe de gérer une zone graphique: un rectangle dedimension fixée dans lequel on peut dessiner;

l’objet g dispose de méthodes graphiques variées telles que drawLine(),drawString(), drawImage(), setColor(), fillRectangle(), dont leseffets sont d’effectuer les opérations nommées dans le rectangle:

le rectangle est muni d’un système de coordonnées cartésiennes (origineen haut à gauche); ces coordonnées sont utilisées par les méthodesgraphiques pour spécifier les opérations à faire dans le rectangle.

void monLogo(Graphics g, int x, int y){

g.drawOval(x,y,10,10);

g.drawRect(x+5,y+10,10,20);

}

Pour dessiner mon logo (un rond et un carre) en position 50,50 il suffitd’appeler la méthode: monLogo(g,50,50);

Page 10: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

LA GESTION DE L’ ENVIRONNEMENT GRAPHIQUE

Chaque composant (en particulier notre fenêtre) hérite d’une méthodepaint(Graphics g) qui par défaut ne fait rien et d’une méthode repaint().

La méthode paint est appelée automatiquement avec l’environnementgraphique de notre fenêtre en argument lorsque le window manager décidequ’il faut la raffraichir, ou lorsqu’on appelle explicitement repaint().

Pour dessiner dans notre fenêtre il faut redéfinir sa méthode paint:

public class Fenetre extends Frame

{

public Fenetre(){

setTitle("Fenetre, modele Duchi");

setSize(500,700);

setVisible(true);

}

public void paint(Graphics g){

monLogo(g,50,50,10);

g.drawString("Quel progres !",50,100);

}

}

La fenêtre créée se redessine automatiquement chaque fois que nécessaire.

Page 11: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

LES COMPOSANTS ET LEUR DISPOSITION

La méthode paint est fournie par la classe abstraite java.awt.Component,avec d’autres méthodes permettant de fixer les caractéristiques principalesdu composant. Par exemple:

setBackground(Color.yellow), setForeground(Color.red),etc.

Les sous-classes de Component qui nous serviront sont:

Canvas. Un objet de cette classe n’a que son environnement graphique,pas de sous-composants. Il peut être inclus dans un contenant.

Container. Les objet de cette classe sont ceux qui peuvent contenir dessous-composants. Les sous-classes de cette classe sont:

Panel. Les objets de cette classe sont les contenants qui peuvent êtreeux-mêmes inclus dans un autre contenant.

Windows. Les objets de cette classe sont les contenants quiinteragissent directement avec le window manager (ils peuvent êtredéplacés). Ils ne peuvent pas être inclus dans un autre contenantFrame: pour les “vraies” fenêtres (déjà utilisées)Dialog: pour les boites de dialogue.

La classe Applet est une sous-classe de la classe Panel.

Page 12: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

AJOUTER DES COMPOSANTS DANS UN CONTENEUR

On a dit que les conteneurs, comme par exemple une fenêtre, peuventrecevoir des composants. La méthode pour ajouter un composant à unconteneur est la méthode add de la classe Container.

Par exemple définissons une classe Message qui étend la classe Canvas etutilisons la pour ajouter des composants dans un Panel.

class Message extends Canvas

{

String texte;

public Message(String texte){

setSize(100,30);

this.texte=texte;

}

public void paint(Graphics g){

g.drawString(this.texte,10,20);

}

}

class Bandeau extends Panel

{

public Bandeau(){

setSize(400,50);

setLayout(new BorderLayout);

add(new Message("A gauche"),"West");

add(new Message("A droite"),"East");

}

}

L’appel new Message("toto") crée un rectangle de taille 100 × 100 contenantle texte toto. Le panel créé par l’appel new Bandeau() est de taille 100 × 100

et contient deux messages.

Page 13: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

AJOUTER DES COMPOSANTS DANS UN CONTENEUR

class Message extends Canvas

{

String texte;

public Message(String texte){

setSize(100,30);

this.texte=texte;

}

public void paint(Graphics g){

g.drawString(this.texte,10,20);

}

}

class Bandeau extends Panel

{

public Bandeau(){

setSize(400,50);

setLayout(new BorderLayout);

add(new Message("A gauche"),"West");

add(new Message("A droite"),"East");

}

}

L’appel new Message("toto") crée un rectangle de taille 100 × 100 contenantle texte toto. Le panel créé par l’appel new Bandeau() est de taille 100 × 100

et contient deux messages.

La méthode setLayout de la classe Container sélectionne une mise en pagedes sous-composants: dans la mise en page BorderLayout, les composantspeuvent être mis sur les différents bords (nord, sud, est, ouest) ou au centre.

Page 14: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

AJOUTER DES COMPOSANTS DANS UN CONTENEUR

On crée une classe Dessin qui étend Canvas pour y mettre un dessin, puis onajoute ce dessin et notre bandeau à une fenêtre.

class Dessin extends Canvas

{

public Dessin(){

setSize(200,200);

}

public void paint(Graphics g){

g.drawRect(50,50,75,100);

}

}

public class Fenetre extends Frame

{

public Fenetre(){

setTitle("Fenetre, modele Duchi 2");

setLayout(new BorderLayout());

setSize(500,700);

add(new Bandeau(),"North");

add(new Dessin(),"Center");

setVisible(true);

}

}

La fenêtre obtenue contient en haut le bandeau et au centre le dessin.

Page 15: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

RETOUR SUR NOTRE APPLET

On est maintenant en mesure de lire le code de l’applet:

import java.awt.*;

import java.applet.*;

public class MonApplet extends Applet

{

public void paint(Graphics gc){

gc.drawString("Hello Web",40,40);

}

}

La classe Applet est une sous-classe de la classe Panel: on peut doncajouter une applet à une fenêtre avec la méthode add.

public class Fenetre extends Frame

{

public Fenetre(){

...

add(new MonApplet());

}

}

et l’utiliser dans un programme Java normal.On verra bientôt une autre façon d’utiliser les applets, via les pages HTML.

Page 16: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

LES MÉTHODES DES APPLETS, CYCLE DE VIE

En tant que sous-classe de la classe graphique Panel, la classe Applet

hérite des méthodes paint(Graphic g) pour s’afficher et add(Component c)

pour inclure des composants graphiques.

Par ailleurs les applets ont un cycle d’exécution, controlé par les méthodes:init(): initialisation de l’applet; appelée une seule fois au démarrage;

start(): réveil de l’applet; pour réveiller l’applet

stop(): endormissement de l’applet; pour endormir l’applet;

destroy(): destruction de l’applet; appelée à la terminaison.Après avoir inclu une applet on va donc l’initialiser et la réveiller:

public Fenetre(){ // constructeur de la classe Fenetre

...

MonApplet uneApplet = new MonApplet();

add(uneApplet);

uneApplet.init();

uneApplet.start();

}

Si on savait gérer les évènements, on mettrait des boutons pour endormir etreveiller l’applet (en appellant uneApplet.stop() et uneApplet.start()) etun appel de uneApplet.destroy() à la fermeture de la fenêtre.

Page 17: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

APPLETS ET WEB

Les applets sont avant tout faites pour aller sur des pages web: on va voirqu’on peut directement créer un objet Applet en chargeant la classeMonApplet depuis une page HTML.

Le cycle de vie de l’applet prend alors tout son sens:

init(): initialisation de l’applet; elle sera lancée automatiquement auchargement de la page web.

start(): reveil de l’applet; elle sera appelée automatiquement chaquefois que la page web redevient visible.

stop(): endormissement de l’applet; elle sera appelée automatiquementchaque fois que la page web est cachée.

destroy(): destruction de l’applet; elle sera appelée lorsqu’on quitte lapage web (pour aller sur une autre page par ex).

De plus, chaque fois que le window manager jugera utile de raffraichir lapage, la méthode MonApplet.paint() sera invoquée.

Page 18: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

DANS LE FICHIER HTML

Pour créer une applet il suffit d’insérer une balise <APPLET>:<HTML>

<BODY>

<APPLET CODE="MonApplet.class"

CODEBASE="http://serveur/mesapplets"

WIDTH=500 HEIGHT=700

ALT="chargement impossible">

J’ecris ca si je suis un navigateur sans java.

</APPLET>

</BODY>

</HTML>

CODE indique le nom du fichier bytecode de la classe: MonApplet.class

CODEBASE donne l’adresse web où trouver le fichier (si il n’est pas dansle même répertoire que la page HTML)

WIDTH et HEIGHT fixent les dimensions de l’environnement graphique(remplace l’appel à setSize)

ALT donne le message pour le cas où on n’arrive pas à charger l’applet

entre les 2 balises <APPLET> et </APPLET> on écrit le message quiremplace l’applet si le navigateur ne gère pas Java.

Page 19: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

APPLET LANCÉE DEPUIS UNE PAGE WEB

Récapitulons: à la lecture du code HTML, le navigateur

charge le bytecode de la classe

crée un objet a de la classe MonApplet en appelant le constructeur pardéfaut de la classe

appelle les méthodes a.init() et a.start()

Ensuite le cycle de vie se déroule avec appels automatiques de a.start(),a.stop(), a.paint(), a.destroy(), comme décrits précédement.

Page 20: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

PARAMÉTRAGE D’ UNE APPLET DEPUISHTML

Pour transmettre des paramètres à une applet depuis la page HTML:

dans le code HTML, on insère entre <APPLET> et </APPLET> la balise:<PARAM NAME = "monParametre" VALUE = "saValeur">

dans l’applet on insère un appel getParameter("monParametre") quirenvoit un String contenant "saValeur".

Un exemple:

public class MonApplet implements Applets

{

private String message;

public void init(){

message = getParameter("monParametre");

}

public void paint(Graphics g){

g.drawString(message,100,50)

}

}

Page 21: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

INSÉRER DES IMAGES

La classe java.awt.Image fournit les outils pour charger des images à partird’une adresse web: en particulier la méthode

Image monImage = getImage(adresseWeb,"photoVacances.jpeg")

Le paramètre adresseWeb est un objet de la classe java.net.URL, obtenu àl’aide de la méthode getCodeBase() de la classe Applet:

URL adresseWeb=getCodeBase();

Le chargement des images se fait en général à l’initialisation, dans laméthode init.

On peut ensuite insérer l’image obtenue dans un environnement graphiqueavec la méthode drawImage() de la classe Graphics:

dans la méthode paint(Graphics g) faire:g.drawImage(monImage,0,0,this)

pour insérer l’image à la position 0,0.

Page 22: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

ARCHIVES.JAR

Le programme jar permet de créer une archive au format ZIP contenant lesfichier .class et les éventuels autres fichiers dont l’applet pourrait avoirbesoin (images, etc).

En chargant un fichier .jar contenant tout ce qui sert on évite que l’appletn’aille chercher les classes et les images dont elle a besoin une par une surle serveur web.

La commande jar s’utilise avec une syntaxe similaire à la commande tar.Par exemple pour créer une archive ArchiveApplet.jar contenant tous lesfichiers .class du répertoire et un fichier image uneImage.jpeg on écrit:

jar cf ArchiveApplet.jar *.class uneImage.jpeg

Pour charger une applet sous forme d’archive a partir d’une page web il fautajouter le champs ARCHIVE="ArchiveApplet.jar" dans la balise <APPLET>où figure le champs CODE qui indique le nom de la classe à exécuter.

Page 23: Cours intensif Java - vivredeprofits25.files.wordpress.com · Cours intensif Java 3er cours: introduction aux Applets Septembre 2009 ... exécutée sur la machine locale (client)

APPLETVIEWER

Lorsqu’on développe des applets le programme Appletviewer est très utile: ilpermet de lancer une applet comme depuis une page web sans avoir à écrirele code HTML et sans lancer de navigateur.

La commande appletviewer prend en argument un fichier texte contenantune balise <APPLET CODE="maClasse.class" WIDTH=100 HEIGHT=80></APPLET>. Une façon commode de l’utiliser est d’inclure une ligne decommentaire:// <APPLET CODE="maClasse.class"> </APPLET>.

au début du fichier maClasse.java, ce qui permet de lancer depuis unterminal la commande :appletviewer maClasse.java

pour exécuter l’applet.

Le programme Appletviewer effectue alors les opérations suivante:

il extrait le nom de l’applet indiqué par la balise et oublie le reste du fichier,

il crée une fenêtre et y ajoute une instance de l’applet ainsi qu’un menudéroulant permettant d’appeler les méthodes init, start, stop etdestroy