Académique Documents
Professionnel Documents
Culture Documents
Sommaire
Chapitre 1 - Les bases ................................................................................................................ 1
Chapitre 2 – Les instructions conditionnelles et itératives ......................................................... 7
Chapitre 3 – Les variables et les méthodes ................................................................................ 9
Chapitre 4 – Les exceptions ..................................................................................................... 15
Chapitre 5 – Les flux d‟entrée/sortie ........................................................................................ 18
Chapitre 6 – Les filtres sur les flux d‟entrée/sortie .................................................................. 21
Chapitre 7 – Les interfaces utilisateurs : les classes AWT et Swing ....................................... 25
Chapitre 8 – La gestion d‟événement ....................................................................................... 32
Chapitre 9 – La classe Graphics ............................................................................................... 38
Chapitre 10 – Les applets ......................................................................................................... 40
Introduction :
JAVA est un langage hybride semi-compilé (compilateur en langage byte-
code qui sera interprété ensuite lors de l‟exécution),
Il est portable (byte-code interprétable par une machine virtuelle MVJ),
Il est distribué et sécurisé, défini pour un environnement serveur :
structure + sécurité non négligées,
C‟est un langage orienté-objet,
Il est simple (proche du C ou C++; pas de pointeurs explicites),
Il est fiable (moins d‟erreurs : pourquoi ? pas de gestion dynamique de
la mémoire, pas de pointeur à gérer par le programmeur ; 2 filtres :
compilateur + interpréteur ce qui évite par exemple de confondre
allocation ou test d‟égalité dans une proposition conditionnelle ; pas
d‟héritage multiple)
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 1
Télécharger JAVA :
Télécharger et installer une plate-forme JAVA (télécharger le Java Development
Kit pour développer des applications et des applets, contenant le Java Runtime
Environnement) :
http://www.oracle.com/technetwork/java/javase/downloads/index.html ou
http://java.com/fr/download/index.jsp),
Types d’exécutable :
- application : programme indépendant du Web, exécuté en local en
tapant la commande java nomdelaclasse sans extension à partir
d‟une fenêtre MS-DOS (via l‟invité de commande) ou via un
éditeur dédié (Eclipse, NetBeans, JBuilder, etc.)
- applet : programme à insérer dans un page Web, est exécuté par le
client. C‟est le fichier byte-code qui est envoyé au client (et non le
fichier source). Dans une page Web, une applet est une image
statique ou dynamique.
- servlet : programme exécuté sur le serveur permettant de répondre à
une requête d‟un client http. Un servlet reçoit une requête http avec
des données, traite ces données, et peut renvoyer une réponse sous
la forme d‟une page Web dynamique
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 2
l‟Invité de commandes), différentes possibilités s‟offrent au développeur pour
pré-compiler et exécuter :
- Se mettre dans le répertoire \bin du jdk (changement de
répertoire en MS-DOS : cd .. pour revenir au répertoire précédent ;
cd nomdurepertoire pour accéder au répertoire nomdurepertoire à
partir du répertorie courant ; etc.). Taper les commandes javac
chemindelapplication\Nomduprogramme.java puis java
chemindelapplication\Nomduprogramme
- Modifier la variable d‟environnement utilisateur Path en intégrant
le chemin du répertoire \bin du jdk. Variable à créer si elle n‟existe
pas dans votre compte utilisateur. Par défaut, l‟installation de
JAVA est proposée dans le répertoire C:\Programme File, mais
l‟utilisateur peut définir l‟emplacement lui-même… Voir figure ci-
dessous. Dans cet exemple, le JDK a été installé dans le compte
utilisateur dans la variable « Path » du compte utilisateur est créée
car elle n‟existait pas, et le chemin pour accéder directement aux
commandes JAVA telles que « javac » ou « java » est :
C:\Users\FredV\Documents\jdk1.7.0_11\bin
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 3
- Ecrire le corps du programme (déclaration de variables, création de
méthodes, création des Interfaces Utilisateurs (IU), etc)
- Ecrire la méthode main(). Toutes les applications doivent avoir une
méthode main() car c‟est ce qui les différencie des applets et les
détermine en tant que programme ; possibilité d‟intégrer des
arguments à l‟exécution du programme.
- Insérer des commentaires (// sur une ligne ; /* … */ sur plusieurs
lignes)
Packages
Appel des packages existants par import nomPackage.nomClasse (égale à
#include du C)
Package importé automatiquement : java.lang où il y a les bases de JAVA telles
que String ou System
Exemples de noms de package « standard » du JRE:
Java.applet : contient la classe Applet et interfaces, sert d‟intermédiaire
entre applet et navigateur
Java.awt : interfaces utilisateur, graphiques
Java.io : entrées-sorties (écriture / lecture de données)
Java.lang : classe racine Object, types de données avancés, …
Java.math : fonctions mathématiques
Java.net : client/server
Java.rmi : Remote Method Invocation –méthodes à distance)
Java.security : sécurisation des transmissions
Java.sql : accès à des bases de données relationnelles via SQL
Java.text : formatage de chaîne de texte
Java.util : conversions, structures de données, gestion d‟événements
Déclaration de variables :
Les classes de base et la taille des objets associés sont les suivants :
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 4
La déclaration de ces variables simples ne nécessite pas l‟usage du mot clé
« new » pour instancier une des classes. Par contre, la création d‟un tableau dont
le contenu n‟est pas défini préalablement requiert une instanciation de la classe
associée avec le mot clé « new ».
Opérateurs d’affectation :
Opération Opération développée Opération simplifiée
Addition x=x+y x+=y
Soustraction x=x-y x-=y
Multiplication x=x*y x*=y
Division x=x/y x/=y
Modulo x=x%y x %= y
Opérateurs de comparaison :
Opérateur Description
= = (2 égalites) Egal à
!= Différent de
< Inférieur à
> Supérieur à
<= Inférieur ou égal à
>= Supérieur ou ègale à
Opérateurs logiques :
Opérateur Description
&& ET logique
|| OU logique
! NON logique
^ OU EXCLUSIF
Caractères d’échappement :
JAVA distingue les minuscules des majuscules et nécessite parfois l‟usage de
caractères d‟échappement tels que :
\n : nouvelle ligne
\t : tabulation
\b : retour arrière
\r : retour chariot
\f : changement de page
\\: antislash
\‟ : guillemet simple
\ » : guillemet double
\xd : hexadécimal
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 5
\ud : caractère unicode (à : \u2026 ; â : \u0192 ; é : \u201a ; è : \u0160 ; ê :
\u02c6 ; î : \u0152 ; ô: \u201c ; û: \u00ea) (voir: http://www.unicode.org)
class PremierProgrammeJAVA
{
public static void main (String args[])
{
System.out.println(“Premier Programme JAVA”);
}
}
Etapes à realiser:
Sauvegarde de ce fichier qui aura le nom PremierProgrammeJAVA.java
Pré-compilation avec la commande suivante: javac
PremierProgrammeJAVA.java
Ce qui génèrera le fichier PremierProgrammeJAVA.class
L‟exécution de cette application s‟obtiendra avec la commande : java
PremierProgrammeJAVA
Après cette commande, voici ce qui est affiché à l‟écran : Premier
Programme JAVA
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 6
Note : le paramètre de la méthode main est un tableau de chaîne de caractères.
Les éléments de ce tableau peuvent être exploités dans le code source (e.g.,
args[0], args[1], etc.), ce qui oblige d‟intégrer ces éléments lors de l‟exécution
de l‟application (i.e., lors du lancement de la commande jave nomdelaclasse
args[0] args[1]).
Exercice 1
Faire la même chose mais sur 3 lignes distinctes, écrire les phrases suivantes:
Je suis en cours
de simulation
et de systèmes h-m
Exercice 2
Faire un programme qui écrit des mots mis en paramètre lors de l‟appel
Exercice 3
Un passager achète un billet de train à 55 euros. Il donne 100 euros. Avec la
monnaie, il achète un carnet de tickets de métro à 13 euros. Il donne 20 euros au
guichet. Faire un programme qui affiche les flux d‟argent depuis l‟achat du billet
de train jusqu‟à la monnaie rendu au guichet de métro.
Instructions conditionnelles:
Voici quelques exemples d‟instructions conditionnelles:
If then else:
if (age > 39) System.out.println(“plus de 39 ans”);
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 7
Opérateur conditionnel :
test ? retourtrue retourfalse ;
Si la variable test est vrai alors retour de la valeur « retourtrue » sinon
« retourfalse »
Que fait la commande suivante ?
int meilleurresultat = resultat1 > resultat2 ? resultat1 resultat2 ;
switch
Dans l‟exemple suivant, si la variable grade contient A, le programme affiche
“OK”, si elle contient B, il affiche “BOF”, sinon il affiche “Pas terrible”:
switch (grade)
{
case „A‟: System.out.println(“OK”); break;
case „B‟: System.out.println(“BOF”); break;
default: System.out.println(“Pas terrible”);
}
Instructions itératives:
Voici quelques exemples d‟instructions itératives. Implémenter-les et vérifier ce
qu‟elles font.
while (i<10)
x = x + i++;
while (i!=0)
System.out.println(“valeur de i = “+i--);
do
x = x + i++;
while (i<10);
for (i=10;i!=0;i--)
System.out.println(“valeur de i = “+i); /* affichage de ? à ? */
for (i=10;i>=0;i--)
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 8
System.out.println(“valeur de i = “+i); /* affichage de ? à ? */
Exercice 1
Ecrire un programme qui dit si un point de coordonnée (x, y) se trouve dans un
cercle de centre (a,b) et de rayon r, tous les paramètres étant donnée lors de
l‟appel de l‟application.
Exercice 2
Ecrire un programme qui permet de trier un tableau d‟entiers comprenant (12, 5,
7, 45, 18, 20, 60) par ordre croissant
Exercice 3
Ecrire un programme qui permet de dire si un nombre entier donné supérieur à 1
(valeur constante donné au départ en paramètre) est un nombre premier (un
nombre premier est un nombre divisible par 1 et par lui-même).
Exercice 4
Ecrire un programme donnant la somme des éléments du tableau d‟entiers
comprenant (10, 40, 10, 7, 7, 8, 10, 40), et donnant la plus grande valeur du
tableau ainsi que le nombre d‟occurrence de cette valeur.
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 9
les instances de la classe elle-même, et il est possible de les rendre
accessible à d‟autres classes. Il n‟est alors pas nécessaire de disposer
d‟une instance de la classe lorsque l‟application n‟utilise pas le mot-clé
« new ». Sans le mot clé « static », la méthode devient une méthode
d‟instance associée à une référence d‟un objet : ref_objet.nommethode()
ou this.nommethode().
Par exemple : public static void main(String args[]) signifie que 1) main()
est accessible dans toutes les autres classes, et de tous les autres objets
(obligatoirement déclarée en public) ; 2) main() est une méthode de classe
avec le « static » ; 3) ne revoie pas de valeur ; 4) peut avoir des
paramètres dans une matrice de chaînes.
Mot-clé « this »
Mot clé utilisée pour :
Faire référence à l‟objet en cours, i.e. faire référence à l‟objet pour lequel
la méthode est appelée
Utiliser les variables d‟instance de l‟objet en cours ou transmettre l‟objet
en cours sous forme d‟argument à une autre méthode
Utiliser partout où l‟objet est susceptible d‟apparaître
Exemples :
t= this.x /* variable d‟instance x de cet objet */
this.demarrer(this) /* appeler la méthode demarrer(this) définie dans la
classe et lui transmettre l‟objet */
return this /* retourner l‟objet en cours */
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 10
Définition d’une méthode :
La définition d‟une méthode nécessite une signature et le corps ou contenu de la
méthode. La signature comprend :
Le nom de la méthode
Le type d‟objet ou de données que la méthode retourne
La liste paramètres
Méthode Constructeur :
C‟est une méthode appelée sur un objet lors de sa création
Elle ne peut pas être appelée directement comme les autres méthodes :
elle est appelée automatiquement par JAVA lors de la création d‟objets
(i.e. arguments nécessaires à la création d‟un objet)
3 opérations sont réalisées lors de l‟instaciation d‟une classe avec le mot-
clé « new » : 1) allocation mémoire, 2) initialisation des variables
d‟instance (avec valeur initiale donnée par le programmeur ou valeur par
défaut : 0 pour les nombres, null pour les objets, false pour les booléens,
„\0‟ pour les caractères), 3) appel de la méthode constructeur de la classe
qui peut être une méthode choisie parmi plusieurs (i.e., méthodes
constructeur surchargées)
Avantage de la définition de méthodes constructeurs : possibilité
d‟initialiser les variables d‟instance, appel de méthodes reposant sur ces
valeurs, appel de méthodes sur d‟autres objets, définition de propriétés
initiales d‟un objet.
S‟il n‟y a pas de création de méthode constructeur car ceci est facultatif :
JAVA en crée une.
Les méthodes constructeurs portent toujours le même nom que la classe
Les méthodes constructeurs ne possèdent pas de retour, i.e. ne contienne
pas le mot-clé « return ».
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 11
Le principe est le suivant: une méthode effectue le travail d‟une autre, i.e.
une méthode fait appel à une autre méthode de même nom
Quand une méthode constructeur reproduit une partie du comportement
d‟une méthode, il est possible d‟appeler la première méthode constructeur
depuis le corps de la seconde méthode constructeur.
La syntaxe pour ce type d‟opération est par exemple: this(arg1, arg2,
arg3) où arg1, arg2 et arg3 sont les arguments utilisés pour la méthode
constructeur ;
« this » s‟utilise avec une méthode constructeur comme pour accéder aux
variables de l‟objet en cours
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 12
super(1, 2) ;
Méthodes de finalisation
Elles sont le contraire des méthodes constructeurs
Une méthode constructeur permet l‟initialisation d‟un objet alors
qu‟une méthode de finalisation permet de nettoyer la mémoire
en libérant la place occupée par l‟objet.
Mot-Clé : finalize()
Exercice 1 :
Que fait ce programme ?
class essai
{
int test = 10 ;
void printTest()
{
int test = 20 ;
System.out.println(“Test = “+test) ;
}
public static void main (String args[])
{
essai es = new essai();
es.printTest();
}
}
Exercice 2 :
Que fait ce programme :
Import java.awt.Point ;
Class NomPoint extends Point
{
String nom ;
NomPoint(int x, int y, String nom)
{
super(x, y) ;
this.nom = nom ;
}
public static void main(String argc[])
{
NomPoint np = new NomPoint(5, 5, « Centre ») ;
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 13
System.out.println(« x= »+np.x+ « et y= »+np.y+ « et nom = »+np.nom) ;
}
Exemple 3 :
Que fait l‟application suivante :
class Person
{
String name ;
int age ;
Person(String n, int a)
{
name = n;
age = a;
}
void printPerson()
{
System.out.println(“Nom = “+name+“ et age =“+age);
}
public static void main(String args[])
{
Person p;
p = new Person(“Luc”, 35);
p.printPerson();
p = new Person(“Antoine”, 25);
p.printPerson();
}
}
Exercice 4
Développer une classe qui définit un cercle à partir de son centre (x, y) et son
rayon à partir deux méthodes constructeurs
une pour définir le centre et le rayon,
et une seconde pour définir le centre et paramétrer ce rayon sur une valeur
par défaut de 1
Exercice 5 :
Définir un rectangle à partir de 4 coordonnées, de 2 points, d‟un point, de sa
hauteur et longueur – à partir de méthodes surchargées ordinaires et méthodes
surchargées constructeurs.
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 14
Chapitre 4 – Les exceptions
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 15
o …
Error
o VirtualMachineError
OutOfMemoryError
StackOverflowError
InternalError
UnknownError
…
o LinkageError
NoClassDefFoundError
…
o …
Exercice 1
Que font ces programmes ?
Le premier programme :
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 16
Le deuxième programme:
Exercice 2
Avec le try et le catch, faire une méthode qui permet de renvoyer la somme des
éléments du tableau en incluant une exception liée à un dépassement d‟indice du
tableau.
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 17
Chapitre 5 – Les flux d’entrée/sortie
Pour ces quatre classes, il existe plusieurs constructeurs avec des paramètres
identiques. Par exemple, lors de l‟instanciation d‟une de ces classes, il est
possible de mettre en paramètre :
Un objet de la classe File en paramètre
Le nom ou le chemin du fichier à traiter avec un String
FileInputStream
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 18
int read(): lit un octet, renvoie -1 quand le flux est terminé
int read(byte[]): lit un tableau d‟octets, renvoie -1 quand le flux est
terminé
int read(byte[], int, int) Reads up to len bytes of data from this input
stream into an array of bytes.
FileOutputStream
void write(int) : écrit l‟octet spécifié en paramètre
void write(byte[]): écrit le tableau d‟octets donné en paramètre
void write(byte[], int, int): écrit le tableau d‟octets donné à partir de
l‟indice du deuxième paramètre, et ce pour un nombre d‟octets donné par
le troisième paramètre
FileReader :
int read(): lit un caractère, renvoi de -1 si fin du flux
int read(char[]): lit un tableau de caractères
int read(char[], int, int): lit un tableau de caractères, le premier entier
donne l‟indice du tableau dans lequel le premier caractère lu sera stocké,
le deuxième entier étant le nombre de caractères à lire, renvoie le nombre
de caractères lus ou -1 quand rien n‟a été lu
FileWriter :
void write(int): écrit le caractère donné en paramètre
void write(char[]): écrit le tableau de caractères donné en paramètre
void write(char[], int, int): écrit le tableau de caractères donné, depuis
l‟indice du tableau donné par le premier entier, le deuxième entier
donnant le nombre de caractères à écrire
La classe File
Objet File comprenant les méthodes constructeurs suivantes :
o File(String) = crée un objet File dont le nom String est donné en
paramètre ;
o File(String, String) = crée un objet File avec le chemin et le nom
donnés en paramètre ;
o File(File, String) = crée un objet File dont le chemin est File et le
nom String
Quelques exemple de méthodes :
o boolean exists() : renvoie un booléan pour l‟existence ou non du
fichier
o long length() : renvoie la taille du fichier
o boolean renameTo(File) : renomme un fichier et renvoie un booléen
pour dire si opération réalisée correctement ou non
o boolean delete() : suppriment un fichier
o boolean mkdir() : crée un répertoire ou dossier
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 19
Une classe particulière : la classe Scanner
Elle se trouve dans le package java.util.Scanner
Elle simplifie la lecture de données
Exemple 1: lecture d‟un entier au clavier
Scanner sc = new Scanner(System.in);
int i = sc.nextInt() ;
Exemple 2: lecture dans un fichier
Scanner sc = new Scanner(new File(“fichierentree.txt”));
/* hasNextLong ou hasNextLine() pour une ligne ou hasNext()
pour un mot */
While (sc.hasNextLong())
{
long var = sc.nextLong(); // ou nextLine() ou next()
}
Exemple 3: séparateur de champs
String inp = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(inp).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
Résultats:
1
2
red
blue
Exercice 1 :
Ecrire une application pour la saisie au clavier d‟octets, transformés en chaîne
de caractères pour écrire à l‟écran ce qui a été saisi. La transformation d‟octet en
chaîne de caractère s‟obtient par l‟instruction : String s = new String(byte). On
utilise le System.in (i.e., périphérique d‟entrée par défaut du système = le
clavier), et le System.out (i.e., le périphérique de sortie par défaut du système =
l‟écran). A l‟affichage du résultat saisi, l‟application doit afficher 128 octets.
Exercice 2 :
Ecrire une application qui permet de charger le contenu d‟un fichier donné en paramètre lors
de l‟exécution de l‟application et d‟écrire son contenu à l‟écran après avoir transformé les
octets en chaîne de caractères. Le nombre d‟octets à lire dans le fichier est également donné
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 20
au départ. Le flux d‟entrée est une instanciation de la classe FileInputStream ou FileReader ou
Scanner.
Exercice 3 :
Ecrire une application qui permet de sauvegarder ce qui est saisi au clavier dans
un fichier dont le nom est donné en paramètre d‟appel de l‟application. Le flux
de sortie est une instanciation de la classe FileOutputStream ou de FileWriter.
Exercice 4 :
Ecrire une application qui permet de copier caractère par caractère un fichier
dans un autre, en utilisant FileReader et FileWriter.
Le filtre BufferedInputStream
C‟est un filtre sur un flux d‟entrée InputStream.
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 21
Une de ses méthodes constructeurs prend donc un objet InputStream en
paramètre.
Quelques méthodes
o int read(): idem que pour FileInputStream
o int read(byte[], int, int): idem que pour FileInputStream
o …
Le filtre DataInputStream
C‟est un filtre sur un flux d‟entrée InputStream
Une de ses méthodes constructeurs prend donc un objet InputStream
en paramètre
Quelques méthodes :
o int read(byte[]) : idem que pour FileInputStream
o int read(byte[], int, int): idem que pour FileInputStream
o boolean readBoolean(): lit un octet et renvoie la valeur true s‟il
est différent de zéro et false s‟il est à zéro
o byte readByte(): lit un octet et revoie
o char readChar(): lit un caractère et renvoie sa valeur
o int readInt(): lit quatre octets et renvoie un nombre entier
o float readFloat() : lit quatre octets et renvoie un nombre à
virgule (float)
o …
Le filtre BufferedOutputStream
C‟est un filtre sur un flux d‟entrée OutputStream
Une de ses méthodes constructeurs prend donc un objet OutputStream
en paramètre
Quelques méthodes :
o void write(byte[], int, int): idem que pour FileOutputStream
o void write(int) : idem que pour FileOutputStream
o …
Le filtre DataOutputStream
C‟est un filtre sur un flux d‟entrée OutputStream
Une de ses méthodes constructeurs prend donc un objet OutputStream
en paramètre
Quelques méthodes :
o void write(byte[], int, int): idem que pour FileOutputStream
o void write(int) : idem que pour FileOutputStream
o void writeBoolean(boolean): écrit un booléen sur un octet
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 22
o void writeBytes(String): écrit une chaîne de caractères comme
une séquence d‟octets.
o void writeChars(String): écrit une chaîne de caractères comme
une séquence de caractère.
o void writeInt(int): écrit un entier sur quatre octets
o …
Le filtre PrintStream
C‟est un filtre sur un flux d‟entrée OutputStream
Une de ses méthodes constructeurs prend donc un objet OutputStream
en paramètre
Quelques méthodes :
o void write(int) : idem que pour FileOutputStream
o void write(byte[], int, int): idem que pour FileOutputStream
o void print(char) : écrit un caractère
o void print(char[]) : écrit un tableau de caractères
o void print(int) : écrit un entier
o void println(…) : écrit un caracgtère, un tableau, un entier …
avec le passage à la ligne suivante (i.e. « \n »)
o …
Le filtre BufferedReader
C‟est un filtre sur un flux d‟entrée Reader
Une de ses méthodes constructeurs prend donc un objet Reader en
paramètre
Quelques méthodes :
o int read() : idem que pour FileReader
o int read(char[], int, int ): idem que pour FileReader
o String readLine() : lit une ligne de texte
o …
Le filtre BufferedWriter
C‟est un filtre sur un flux d‟entrée Writer
Une de ses méthodes constructeurs prend donc un objet Writer en
paramètre
Quelques méthodes :
o void write(int) : idem que pour FileWriter
o void write(char[] cbuf, int off, int len): idem que pour FileWriter
o void write(String, int, int): idem que pour FileWriter à partir
d‟une chaîne de caractèresvoid newLine() : écrit le caractère de
passage à la ligne (i.e., « \n »)
o …
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 23
Le filtre PrintWriter
C‟est un filtre sur un flux d‟entrée Writer ou OutputStream
Une de ses méthodes constructeurs prend donc un objet Writer ou
OutputStream en paramètre
Quelques méthodes :
o void write(int): idem que pour FileWriter
o void write(char[] ) : idem que pour FileWriter
o void write(char[], int, int): idem que pour FileWriter
o void write(String) : écrit une chaine de caractères
o void write(String s, int off, int len): écit une partie d‟une chaîne
de caractères
o void print(boolean) : écrit une valeur booléenne
o void print(char) : écrit un caractère
o void print(char[]) : écrit un tableau de caractères
o void …
Exercice 1
Ecrire une application permettant de copier un fichier dans un autre en prenant
un filtre BufferedReader sur un flux d‟entrée FileReader, et un filtre PrintWriter
sur un flux de sortie FileWriter.
Exercice 2
Ecrire une application permettant de copier un fichier dans un autre en prenant
un filtre BufferedReader sur un flux d‟entrée FileReader, et un filtre PrintStream
sur un flux de sortie FileOutputStream.
Exercice 3
Lire 4 lignes de texte dans un fichier, les trier par ordre alphabétique, et mettre
le résultat dans un fichier. Utiliser la méthode compareTo() de la classe String
qui permet de comparer alphabétiquement deux objets de la classe String
(exemple : string1.compareTo(string2)==0 le contenu de string1 et string2
sont identiques ; string1.compareTo(string2)>0 le contenu de string1 est plus
grand que le contenu de string2, i.e. par ordre alphabétique, string2 est avant
string1)
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 24
Chapitre 7 – Les interfaces utilisateurs : les classes AWT et
Swing
Principes de base sur les interfaces
Une interface est un moyen pour une classe d‟hériter des méthodes dont elle
n‟hériterait pas autrement de sa classe mère
Une interface est une classe abstraite particulière dont toutes les variables sont
constantes et dont toutes les méthodes sont abstraites (i.e., elles sont limitées à leur
signature, elles n'ont pas de corps).
Pour signifier qu'une classe hérite d'une interface on dit qu'elle implémente l'interface,
on utilise le mot clé « implements »
Lorsqu'une classe implémente une interface, elle doit obligatoirement redéfinir toutes
les méthodes de l'interface (leur attribuer du code). Si une méthode de l'interface ne
sert pas, on lui attribue alors un corps vide (écrire l'en-tête avec une paire d'accolades
vides).
En JAVA, il n‟existe que le principe d‟héritage simple : une classe ne peut avoir
qu'une seule classe mère (un seul extends). Par contre, elle peut implémenter plusieurs
interfaces. Les interfaces permettent donc de réaliser une certaine forme d'héritage
multiple.
Remarque sur la limite de l‟héritage simple en JAVA. Par exemple : si une classe
Animal a deux sous-classe Oiseau (avec les méthodes becs, plumes et œufs) et
Mammifères (avec les méthodes fourrures et bébés vivants), le cas de l‟ornithorynque
qui fait des œufs et a une fourrure ne peut pas être traité !
Une classe abstraite ne peut pas être instanciée, i.e. on ne peut pas utiliser l‟opérateur
« new » pour créer une instance de cette classe.
Utilisation par le mot-clé « implements » + Nom de l‟interface ou Noms des interfaces
séparés par une virgule (C‟est le principe du multi-interfaçage)
Pour la création d‟une nouvelle interface : public interface Nominterface { // Code }
Possibilité de créer à partir du mot clé « extends » une classe fille à partir d‟une classe
mère qui implémente une interface
Avertissement : certaines méthodes sont dites « deprecated », i.e. elles sont amenées à
disparaître dans les futures versions de Java. Elles ne sont pas traiter dans ce cours.
Par exemple :
interface Fruitlike {
void pourrir() ;
void secraser() ;
}
class Fruit implements Fruitlike {
private Color MaCouleur;
private int jourconcerve;
}
interface Spherelike {
void lancer();
void rouler();
}
class Orange extends Fruit implements Spherelike {
...
}
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 25
Remarque: la classe Orange n‟a pas besoin d‟indiquer “implements Fruitlike” car cela est
indiqué dans le fait qu‟elle étend la classe Fruit !
La classe AWT
Abstract Window Toolkit disponible dans la package java.awt
Hiérarchie de classes :
Component
Button
Container
Label
Window
Frame
Dialog
FileDialog
TextComponent
TextArea
TextField
…
MenuComponent
MenuBar
MenuItem
Menu
…
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 26
Composant pouvant contenir d‟autres composants
Quelques méthodes
add(Component) : ajoute un composant à la fin du conteneur.
Par exemple, l‟ajout de composants comme Button ou Label
dans un cadre : add(ref_bouton), add(ref_label), etc. La mise en
page ou la disposition des composants dans le conteneur : traiter
avec le setLayout
o add(Component, int) : ajoute un composant à la position
prédéfinie par l‟entier donné en paramètre
o paint() : dessine le contenu du conteneur
o setFont(Font) : alloue une police de caractère au conteneur
o setLayout(LayoutManager) : alloue un ordre d‟affichage des
composants du conteneur
o …
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 27
Composant fenêtre sans bordure ni menu.
Quelques méthodes
o addWindowListener(WindowListener) : ajoute un écouteur
d‟événement fenêtre (voir chapitre suivant)
o setBounds(int, int, int, int) : dimensionne la taille de la fenêtre par les
coordonnées d‟un point, avec une hauteur et une largeur
o setBackground(Color) : donne une couleur de fond à la fenêtre
o setLocation(int, int) : déplace la fenêtre aux coordonnées du point
donné (le point en haut, à gauche de la fenêtre)
o setLocation(Point) : idem mais avec un objet de la classe Point
o setSize(int, int) : dimensionne la hauteur et la largeur de la fenêtre
o setVisible(boolean) : affiche (boolean=true) ou cache (boolean=false)
la fenêtre
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 28
o getDirectory() et getFile() renvoie le nom de répertoire ou de
fichier sélectionné.
o setVisible(boolean) : affiche ou n‟affiche pas la boite de dialogue
(boolean= true ou false respectivement)
o getTitle() : renvoie le titre de la boite de dialogue
o …
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 29
o getLabel() : renvoie le nom du bouton
o setLabel(String) : envoie un nom au bouton
La classe Swing
Principes
o Extension de la classe AWT
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 30
o Fonctionnalités améliorées
Exemple de composants :
JFrame, JButton, JLabel, JTextArea, JTextField, JRadioButton, JCheckBox,
JPasswordField, JComboBox, JList, JScrollBar, etc.
JButton(String) : crée un bouton avec le texte ; JButton(Icon) : crée un
bouton avec l‟icône ; JButton(String, Icon) : crée un bouton avec le texte et
l‟icône
JLabel(String, int) : crée un intitulé avec le texte et l‟alignement (LEFT,
RIGHT, CENTER) ; JLabel(String, Icon, int) : crée un intitulé avec le texte ,
l‟icône, et l‟alignement
JTextArea(int, int) : crée un zone de texte avec lignes et colonnes ;
JTextArea(String, int, int) : crée un zone de texte avec le texte, lignes et
colonnes
JCheckBox(String) : crée une case à cocher avec le texte ; JCheckBox(String,
boolean) : crée une case à cocher avec le texte, case sélectionnée si
l‟argument booléen est vrai ; JCheckBox(Icon) : crée une case à cocher avec
l‟icône ; JCheckBox(Icon, boolean) : crée une case à cocher avec l‟icône,
case sélectionnée si l‟argument booléen est vrai
JComboBox() : crée une liste de choix en utilisant à chaque ajout de choix la
méthode addItem(Object), puis setEditable(boolean) qui rend la liste éditable
JScrollBar(int) : crée une barre de défilement avec l‟orientation ;
JScrollBar(int, int, int, int, int) : crée une barre de défilement avec
l‟orientation (HORIZONTAL, VERTICAL), la valeur de départ, la taille du
curseur de défilement, les valeurs min et max
JTable(int, int) : permet de créer des tableaux en précisant le nombre de
lignes et colonnes
…
Note : pour simplifier, les classes de swing ne sont pas développées mais seront illustrées au
travers des exercices.
Exercice 1
Afficher une fenêtre avec AWT et swing
Exercice 2
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 31
Afficher une fenêtre et la déplacer de (0, 0) à (500, 500) contenant deux boutons B1 et B2, en
utilisant AWT et swing, et en testant le FlowLayout ou le BorderLayout. Mettre une
instruction itérative qui ne fait rien pour percevoir le mouvement de la fenêtre (sinon le
déplacement se fera trop vite et donnera l‟impression qu‟il n‟y en a pas ! Sinon utiliser
l‟instruction Thread.sleep(int))
Exercice 3
Créer une barre de menu dans une fenêtre avec AWT et swing, contenant deux boutons
« bouton1 » et « bouton2 », et dans « bouton 1 », intégrer un menu déroulant contenant deux
options : « sous-menu1 » et « sous-menu2 »
Exercice 4
Avec AWT, afficher dans une fenêtre le contenu d‟un fichier de chaînes de caractère, mettre
le contenu de chaque enregistrement dans une barre de menu
Note : dans ces exemples d‟application, il n‟est pas possible de quitter proprement
l‟application car les événements ne sont pas traiter. En JAVA, il faut explicitement préciser ce
que le programme doit faire lorsqu‟il y a tel ou tel événement. Ces événements sont par
exemple des touches du clavier, des clics avec la souris, des actions sur une fenêtre, etc. Le
chapitre suivant traite de cette gestion des événements.
La classe Component
Cette classe contient les composants de la classe AWT.
Elle comporte des méthodes utiles dont certaines pouvant traitées des
évènements sur des composants :
o addMouseListener(MouseListener) : ajoute un écouteur d‟événement
de la souris sur le composant courant
o addMouseMotionListener(MouseMotionListener) : ajoute un écouteur
de déplacement du curseur de la souris sur le composant courant
o addKeyListener(KeyListener) : ajoute un écouteur d‟événement du
clavier sur le composant courant
o getX() : renvoie l‟abscisse du composant d‟origine
o getY() : renvoie l‟ordonnée du composant d‟origine
o getMousePosition() : renvoie un objet Point dont les coordonnées sont
celles du curseur de la souris
o getLocation() :
o paint() : dessine le composant
o processFocusEvent(FocusEvent) : traite les événements liés à la mise
au premier plan ou en arrière plan d‟un composant
o processKeyEvent(KeyEvent) : traite les événements liés au clavier
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 32
o processMouseEvent(MouseEvent) : traite les événements liés à la
souris
o processMouseMotionEvent(MouseEvent) : traite les événements liés
au déplacement du curseur de la souris
o processMouseEvent(MouseEvent)
o repaint() : redessine le composant
o …
La classe event
Cette classe contient :
o Les classes d‟événements telles que : ActionEvent, MouseEvent,
WindowEvent, etc. Ces classes ont leurs propres méthodes et héritent
d‟autres méthodes intéressantes telles que :
getComponent() : renvoie l‟objet Component à partir duquel
l‟événement a été généré
getSource() : renvoie l‟objet Object à partir duquel l‟événement
a été généré
…
o Les écouteurs d‟événements (classes abstraites d‟interface) sur les
composants tels que ActionListener, FocusListener, KeyListener,
MouseListener, TextListener, WindowFocusListener,
WindowListener, etc :
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 33
Utiliser les méthodes addxxxListener sur les composants de l‟application ou
de l‟applet sur lesquels des événements sont traités
Ecrire le contenu de toutes les méthodes d‟instance des écouteurs
d‟événements
L’écouteur ActionListener
Méthodes d‟instance à réécrire :
o void ActionPerformed(ActionEvent e) {code à écrire si besoin}
L’écouteur MouseListener
Méthodes d‟instance à réécrire :
o void mouseClicked(MouseEvent) {code à écrire si besoin lorqu‟un
bouton de la souris est activé}
o void mouseEntered(MouseEvent) {code à écrire si besoin lorsque e
curseur de la souris entre dans l‟application}
o void mouseExited(MouseEvent) {code à écrire si besoin lorsque le
curseur de la souris sort de l‟application}
o void mousePressed(MouseEvent) {code à écrire si besoin lorsqu‟un
bouton de la souris est appuyé}
o void mouseReleased(MouseEvent) {code à écrire si besoin lorsqu‟un
bouton de la souris est relâché}
L’écouteur MouseMotionListener
Méthodes d‟instance à réécrire :
o void mouseDragged(MouseEvent) {code à écrire si besoin lorsque la
souris est déplacée avec le maintien d‟appui sur un bouton}
o void mouseMoved(MouseEvent {code à écrire si besoin lorsque le
curseur de la souris a été déplacé sur un composant}
L’écouteur WindowsListener
Méthodes d‟instance à réécrire :
o void windowActivated(WindowEvent) {code à écrire si besoin
lorsqu‟une fenêtre est activée}
o void windowClosed(WindowEvent) {code à écrire si besoin
lorsqu‟une fenêtre est fermée, cette méthode est appelée après
fermeture de la fenêtre}
o void windowClosing(WindowEvent) {code à écrire si besoin
lorsqu‟une fenêtre est fermée, mais cette méthode donne la possibilité
de réaliser certaines actions avant la fermeture}
o void windowDeactivated(WindowEvent) {code à écrire si besoin
lorsqu‟une fenêtre est désactivée}
o void windowDeiconified(WindowEvent) {code à écrire si besoin
lorsqu‟une fenêtre est restaurée}
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 34
o void windowIconified(WindowEvent) {code à écrire si besoin
lorsqu‟une fenêtre est mise sous icône}
o void windowOpened(WindowEvent) {code à écrire si besoin
lorsqu‟une fenêtre est ouverte}
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 35
o Event.WINDOW_DEICONIFY : généré quand une fenêtre est
restaurée après avoir été réduite à l‟état d‟icône
o Event.WINDOW_MOVED : généré quand une fenêtre est déplacée
o Event.MOUSE_DOWN : généré quand le bouton souris est enfoncé
o Event.MOUSE_UP : généré quand le bouton souris est relâché
o Event.MOUSE_ENTER : généré quand la souris entre dans l‟aplet ou
dans une application
o Event.MOUSE_EXIT : généré quand la souris sort de l‟application ou
de l‟applet
o Event.MOUSE_MOVE : généré quand le curseur de la souris est
déplacé sans appui sur un bouton de la souris
o Event.MOUSE_DRAG : généré quand la souris est déplacée avec un
bouton maintenu appuyé
o Quelques touches clavier : Event.HOME (home ou début), Event.END
(fin ou end), Event.PGUP (clavier : page précédente), Event.PGDN
(page suivante), Event.UP (flèche haute), Event.DOWN (flèche
descendante), Event.LEFT (flèche gauche), Event.RIGHT (flèche
droite), Event.F1 à Event.F12 (touche F1 à F12)
o Barre de défilement : Event.SCROLL_ABSOLUTE (curseur de barre
de défilement déplacé), Event.SCROLL_LI NE_DOWN (bouton
gauche ou inférieur sélectionnée), Event.SCROLL_LINE_UP (bouton
droit ou supérieur sélectionné), Event.SCROLL_PAGE_DOWN
(champ du dessous ou à gauche du champ d‟une barre de défilement
sélectionné), Event.SCROLL_PAGE_UP (champ au-dessus ou à
droite du champ d‟une barre de défilement sélectionné)
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 36
o int donne les boutons d‟options à afficher
(YES_NO_CANCEL_OPTION ou YES_NO_OPTION)
o int pour le type de boîte de dialogue (ERROR_MESSAGE,
INFORMATION_MESSAGE, PLAIN_MESSAGE,
QUESTION_MESSAGE ou WARNING_MESSAGE)
o showInputDialog(Component, Object) ou showInputDialog(Component,
Object, String, int) : String est le texte du titre, et int est le type de la boîte
(ERROR_MESSAGE, INFORMATION_MESSAGE,
PLAIN_MESSAGE, QUESTION_MESSAGE ou
WARNING_MESSAGE)
o showMessageDialog(Component, Object) ou
showMessageDialog(Component, Object, String, int)
o showOptionDialog(Component, Object, int, int, Icon, Object[], Object) :
o String est le titre de la boîte,
o int les boutons d‟option de la boîte de dialogue
(YES_NO_CANCEL_OPTION ou YES_NO_OPTION ou 0 si autres
boutons)
o int pour les icônes de type de la boîte (ERROR_MESSAGE,
INFORMATION_MESSAGE, PLAIN_MESSAGE,
QUESTION_MESSAGE ou WARNING_MESSAGE)
o Icon à afficher à la place de l‟une des icônes précédentes
o Object[] une matrice d‟objets contenant les composants ou autres
objets représentant les choix de la boîte (si
YES_NO_CANCEL_OPTION et YES_NO_OPTION ne sont pas
utilisés),
o Object l‟objet représentant les choix par défaut (si
YES_NO_CANCEL_OPTION et YES_NO_OPTION ne sont pas
utilisés)
o Exemple :
JButton[] gender = new JButton[3] ;
gender[0] = new JButton(« Masculin ») ;
gender[1] = new JButton(« Feminin ») ;
gender[2] = new JButton(« Indetermine ») ;
int reponse = JoptionPane.showOptionDialog(null, “Specifier votre
sexe”, “questionnaire”, 0,
JoptionPane.INFORMATION_MESSAGE, null, gender,
gender[2]);
Résultat:
Le titre de la boite de dialogue est: questionnaire
Icône de la boîte: Icône de message d‟information avec le texte
“Spécifier votre sexe”
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 37
Trois boutons alignés s‟affichent: « Masculin », « Feminin » et
« Indetermine »
Choix par défaut sélectionné : Indetermine
Exercice 1
Mettre en œuvre une application permettant de sélectionner trois boutons
« Masculin », « Feminin » et « Indetermine », et d‟indiquer dans un objet Label
le choix effectué
Exercice 2
Ecrire une application qui affiche sur une zone de texte d‟une fenêtre
l‟historique des événements générés (se limiter aux événements de la souris)
Exercice 3
Faire une palette de couleur sur 64 boutons ayant une couleur de fond variant du
vert vers le blanc
Exercice 4
Ecrire une application affichant deux boutons « Ouvrir/Afficher Fichier » et
« Quitter ». Le premier bouton permet d‟ouvrir une boite de dialogue pour
l‟ouverture d‟un fichier et afficher son contenu dans une zone de texte. Le
deuxième bouton permet de quitter l‟application.
Généralités :
import java.awt.Graphics
Système de coordonnées graphiques de JAVA: en haut à gauche (0, 0) et
en bas à droite = (max, max)
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 38
o drawPolygon(x[], y[], nbpt) ou drawPolygon(xy[][], nbpt) ou
fillPolygon(x[], y[], nbpt) ou fillPolygon(xy[][], nbpt) dessinent des
polygones
o drawOval(x1, y1, haut-ou-larg) : dessine un forme oval inclut dans le
rectangle partant du point (x1, y1) avec une hauteur « haut » et une
largeur « larg » ; fillOval(x1, y1, haut-ou-larg) : dessine une forme ovale
pleine
o drawArc(x1, y1, larg-de-oval, haut-de-oval, angle-debut-arc, nb-degre-a-
tracer) ou fillArc (pour dessiner les camemberts par ex) dessinent des arcs
o …
Textes et polices :
o getFont() : renvoie la police de caractères courante
o getFontMetrics(Font) : renvoie les caractéristiques de la police de
caractères donné
o Objet Font spécifié avec des constructeurs ayant différents
arguments (e.g., nom de la police, style de la police, taille en point
de la police).
o Exemple : Font f = new Font(« Dialogue »,
Font.BOLD+Font.ITALIC, 24).
o Les méthodes de la classe FontMetrics donnent des infos sur la
police courante. Par exemple :
stringWidth(String) renvoie la largeur en entier de la chaîne
de caractère donnée
charWidth(char) renvoie la largeur en entier du caractère
donné
getHeight() : renvoie la hauteur de la police courante
…
o setFont(Font) : spécifie la police de caractère à utiliser
Couleur :
getColor() : renvoie la couleur de l‟objet Graphics
setColor(Color) : donne une couleur à l‟objet GRaphics
La classe Color :
Codage Rouge Vert Bleu de noir (0, 0, 0) à blanc (255, 255, 255).
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 39
Objets de la classe Color dont le constructeur prend 3 int ou float
pour les valeurs RVB.
Exemple de valeurs par défaut connues :
Color.red (255, 0, 0)
Color.black(0, 0, 0)
Color.pink(255, 175, 175)
Color.white(255, 255, 255)
Color.yellow (255, 255, 0)
…
Dans les composants contenant les objets Graphics, possibilité de
paramétrer les couleurs de fond et de premier plan avec : les méthodes
setBackground(Color) ou setForeground(Color). Pour obtenir les
couleurs de fond de plan ou de premier plan : getBackground() ou
getForeground()
Exercice 1
Ecrire une application permettant d‟afficher une grille 8x8 dans une fenêtre.
Exercice 2
Ecrire une application permettant d‟afficher une grille 8x8 dans une fenêtre et de
saisir 10 cercles dans 10 cases distinctes. L‟application s‟arrête lorsque les 10
cercles ont été saisis.
Exercice 3
Ecrire une application permettant d‟afficher ou d‟effacer une grille 8x8 en
fonction d‟un clic de la souris
Exercice 4
Ecrire une application permettant d‟afficher ou d‟effacer une grille 8x8 en
cliquant sur deux boutons « Afficher grille » et « Effacer grille ».
Consignes de sécurité
Restriction d‟usage des applets au nom de la sécurité mais sans 100% de
garantie (éviter de lire des fichiers confidentiels de l‟ordinateur de
l‟utilisateur où l‟aplet tourne, d‟en effacer, d‟en créer, etc …)
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 40
Règles d‟usage des applets :
o Ne pas écrire et ne pas lire sur le système de fichiers de l‟utilisateur
o Ne pas communiquer avec un site Internet autre que celui qui
diffuse la page Web dont fait partie l‟applet
o Ne pas faire fonctionner des programmes sur le système du lecteur
o Ne pas charger des programmes stockés sur le système de
l‟utilisateur, tels que des exécutables ou des bibliothèques
partagées.
Principes de base
Différences entre applets et applications: dans l‟exécution. Applications =
exécutées en utilisant un interpréteur JAVA qui charge le fichier de classe
principal (java nom.class). Applets = exécutées via un navigateur Web
compatible avec JAVA (e.g., Netscape Navigator, Microsoft Internet
Explorer, Google Chrome, etc.) ou testées avec l‟utilitaire appletviewer
inclus dans le JDK.
Possibilité d‟écrire un programme à la fois sous forme d‟application ou
d‟applet : procédures particulières à appliquer
Les applications contiennent une méthode main() pour appeler le début du
programme, créer des objets, définir des variables d‟instance et appeler
d‟autres méthodes. Les applets ne contiennent pas de main(). Elles
utilisent différentes méthodes appelées à différents instants de l‟exécution
de l‟applet.
Les applets sont des sous-classes de la classe Applet qui fait partie du
package java.applet.
Une applet est un conteneur pouvant intégrer des objets graphiques de la
classe AWT. Avec Swing, il est préférable d‟utiliser JApplet. Dans ce
cours, nous resterons sur AWT. Pour ajouter des composants graphiques
dans l‟applet, utiliser la méthode add(Component).
Créer une applet :
public class MonApplet extends java.applet.Applet { // Code de l‟Applet
ici }
Ou
import java.applet.*;
public classe MonApplet extends Applet{ // Code de l‟Applet ici }
Tous les applets: « public » pour la classe Applet principale, les classes
auxiliaires sont soit publiques soit privées.
Lors du chargement d‟une applet dans un navigateur, la classe de cette
applet et ses classes auxiliaires sont chargées. Il est possible que
différentes applets utilisent la même classe, utilisant des instances
différentes : il est possible de placer plusieurs exemplaires d‟une applet
sur une même page : ils fonctionnent indépendamment les uns des autres.
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 41
Exécution d‟une applet : incorporation dans une page Web à l‟aide de
balises HTML, comme une image. Quand un utilisateur charge une page
Web contenant une applet, le navigateur télécharge l‟applet depuis un
serveur Web et l‟exécute sur l‟ordinateur de l‟utilisateur.
Aucun interpréteur séparé n‟est nécessaire. Il est inclut dans le navigateur.
Comme une application, une applet inclut un fichier de classe, et les
classes auxiliaires
La balise Applet
A partir d‟un navigateur Web, il faut charger un fichier html contenant
la balise Applet.
Ce fichier contient par exemple ces lignes de code :
<HTML>
<HEAD>
<TITLE> La page de mon applet</TITLE>
</HEAD>
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 42
<BODY>
<P> Mon applet …
<BR>
<APPLET CODE= « MonApplet.class » WIDTH=600 HEIGHT=100>
... Message d‟erreur
</APPLET>
</BODY>
</HTML>
Une balise HTML commence par « <NOM_DE_BALISE> » et se
termine par « </NOM_DE_BALISE> ».
La balise TITLE donne le nom de votre page Web, la balise P définit un
paragraphe et la balise BR un retour à la ligne (cette balise ne nécessite
pas de « </NOM_DE_BALISE>), etc.
La balise <APPLET> comprend 3 attributs : CODE (nom de fichier de la
classe principale de l‟applet, stocké dans le même dossier que la page
Web contenant l‟applet), WIDTH (largeur de la fenêtre de l‟applet sur la
page Web) et HEIGHT (hauteur de la fenêtre de l‟applet).
Pour exécuter une applet, il faut un fichier MonApplet.java, qui sera
précompilé avec la commande javac MonApplet.java, ce qui génèrera le
fichier MonApplet.class qu‟on retrouve dans la balise applet.
Il suffira donc de recopier le fichier HTML ci-dessus et d‟intégrer le nom
de la classe de votre applet, i.e. remplacer « MonApplet.class » par votre
nom de classe.
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 43
bas à gauche avec 50 pixels verticalement et 10 pixels horizontalement le
séparant du texte :
<APPLET CODE= »ShowSmiley.class » WIDTH = 45 HEIGHT=42
ALIGN=LEFT VSPACE=50 HSPACE=10>
</APPLET>
Attribut ARCHIVE : pour lire des archives et réduire les temps de
chargement des applets :
o Archives Java avec extension .jar (= série de classes Java et
d‟autres fichiers réunis dans un seul et même fichier ; une seule
connexion est donc nécessaire)
o Autres formats d‟archivage tels que les fichiers .zip)
o Exemple de l‟archive Smiley.jar qui archive les fichiers *.class et
*.giff :
…
<APPLET CODE=« ShowSimley.class » ARCHIVE=
« Smiley.jar » WIDTH=45 HEIGHT=42
...
…
<APPLET CODE=« MonApplet.class » ARCHIVE=
«appletstuff.zip » WIDTH=45 HEIGHT=42
...
Balise PARAM pour paramétrer une applet. NAME est le nom d‟une
variable définie dans le fichier MonApplet.java, et VALUE donne affecte
une valeur à cette variable :
…
<APPLET CODE=« MonApplet.class » WIDTH=45 HEIGHT=42>
<PARAM NAME=”etudiant” VALUE=”master2”>
…
…
<APPLET CODE=« MonApplet.class » WIDTH=45 HEIGHT=42>
<PARAM NAME=font VALUE=”TimesRoman”>
<PARAM NAME=size VALUE=”24”>
…
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 44
<PARAM NAME=chainedecaractere VALUE= « valeur par
defaut »>
…
Dans le fichier MonApplet.java, on a :
import java.awt.* ;
public class MonApplet extends java.applet.Applet
{
Font f = new Font(“TimesRoman, Font.BOLD, 36);
String chainedecaractere;
public void paint(Graphics screen)
{
screen.setFont(f);
screen.setColor(Color.red);
screen.drawString(chainedecaractere, 5, 50);
}
public void init()
{
chainedecaractere=getParameter(“ chainedecaractere “) ;
if (chainedecaractere== null)
chainedecaractere= “valeur initiale” ;
}
}
Exercice 1 :
Ecrire une applet permettant d‟afficher une palette de couleur à partir de 64
boutons pour lesquels la couleur de fond varie du rouge vers le blanc, en
fonction de paramètres RVB. Donner la possibilité de sélectionner un bouton
pour voir afficher dans un TextField ces paramètres RVB. Le texte initial de
TExtField est « 000 000 000 ». Utiliser La méthode getActionCommand() qui
renvoie le texte du bouton que l‟utilisateur sélectionne.
Exercice 2 :
Ecrire une applet permettant d‟afficher la couleur de fond d‟un bouton en
fonction de paramètres RVB saisie au clavier via un composant TextField.
Exercice 3 :
Ecrire une applet permettant d‟afficher une grille 8x8 et de saisir 4 cercles dans
les cases. Implémenter la classe MouseListener.
Cours Programmation Orientée Objet – JAVA – F. VANDERHAEGEN – UVHC– ISTV 2016/2017 Valenciennes 45