Vous êtes sur la page 1sur 0

Oracle Fusion Middleware 11g :

Programmation Java
Manuel du stagiaire - Volume II
D53983FR11
Edition 1.1
Octobre 2009
D61458
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2009, Oracle. Tous droits rservs.
Avertissement
Cette documentation contient des informations qui sont la proprit d'Oracle
Corporation et sont protges par les lois relatives aux droits d'auteur et la proprit
intellectuelle. Vous ne pouvez copier et imprimer ce document qu' des fins
d'utilisation personnelle lors de la participation une formation dispense par Oracle.
Le document ne peut tre modifi ou altr en aucune manire. A l'exception des cas
o l'utilisation faite du document s'inscrit dans le respect des lois relatives aux droits
d'auteur, vous ne pouvez pas utiliser, partager, tlcharger, copier, imprimer, afficher,
excuter, reproduire, publier, breveter, diffuser, transmettre ou distribuer ce
document, en partie ou en totalit, sans l'autorisation expresse d'Oracle.
Les informations fournies dans ce document sont susceptibles de modification sans
pravis. Par ailleurs, Oracle Corporation ne garantit pas qu'elles soient exemptes
d'erreurs et vous invite, le cas chant, lui en faire part par crit l'adresse
suivante : Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065
USA
Restrictions applicables au gouvernement amricain :
Restricted Rights Notice
If this documentation is delivered to the United States Government or anyone using
the documentation on behalf of the United States Government, the following notice is
applicable:
U.S. GOVERNMENT RIGHTS
The U.S. Governments rights to use, modify, reproduce, release, perform, display,
or disclose these training materials are restricted by the terms of the applicable
Oracle license agreement and/or the applicable U.S. Government contract.
Marques
Oracle est une marque dpose d'Oracle Corporation et/ou de ses filiales. Tout autre
nom de produit ou de socit peut tre une marque de son propritaire.
Auteur
Kate Heap
Rvisions et
contributions techniques
Ken Cooper
Clay Fuller
Taj Islam
Peter Laseau
Yvonne Price
Rdacteurs
Daniel Milne
Joyce Raftery
Concepteur graphique
Satish Bettegowda
Editeurs
Pavithran Adka
Nita Brozowski
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

iii
Table des matires



I Introduction
Objectifs I-2
Prsentation du cours I-3

1 Prsentation des plates-formes Java et Oracle
Objectifs 1-2
Qu'est-ce que Java ? 1-3
Principaux avantages du langage Java 1-5
Approche oriente objet 1-7
Modles de conception 1-8
Modle de conception MVC 1-9
Indpendance par rapport la plate-forme 1-10
Utiliser Java dans un environnement Internet d'entreprise 1-11
Utiliser la JVM (Java Virtual Machine) 1-13
Fonctionnement de la JVM 1-15
Avantages des compilateurs JIT 1-17
Implmentation de la scurit dans l'environnement Java 1-19
Dploiement d'applications Java 1-21
Utiliser Java avec Oracle 11g 1-22
Kit SDK (Software Development Kit) Java 1-23
Utiliser le kit de dveloppement appropri 1-25
Java SE 6 1-26
Environnement de dveloppement intgr 1-27
Synthse 1-28

2 Conventions lmentaires relatives au code et la syntaxe Java
Objectifs 2-2
Composants du toolkit 2-4
Packages Java 2-5
Documentation l'aide de Java SE 2-6
Contenu d'un fichier source Java 2-8
Conventions d'appellation 2-9
Informations complmentaires sur les conventions d'appellation 2-11
Dfinir une classe 2-13
Exemple : Classe Rental 2-14
Crer des blocs de code 2-16
Dfinir des mthodes Java 2-17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

iv
Exemple de mthode 2-18
Dclarer des variables 2-19
Exemples de variables dans le contexte d'une mthode 2-20
Rgles de cration des instructions 2-21
Compiler et excuter une application Java 2-22
Dboguer un programme Java 2-23
Variable CLASSPATH 2-24
Exemples d'utilisation de CLASSPATH 2-25
Synthse 2-26
Prsentation de l'exercice 2 : Syntaxe Java lmentaire et
conventions de codage 2-27
Diagramme UML de l'application OrderEntry 2-28

3 Explorer les types de primitive et les oprateurs
Objectifs 3-2
Mots-cls et mots rservs 3-3
Types de variable 3-4
Types de primitive 3-5
Variables 3-7
Dclarer des variables 3-8
Variables locales 3-9
Dfinir des noms de variable 3-10
Littraux numriques 3-11
Littraux non numriques 3-13
Oprateurs 3-15
Catgories d'oprateurs 3-16
Utiliser l'oprateur d'affectation 3-17
Oprateurs arithmtiques 3-18
Informations complmentaires sur les oprateurs arithmtiques 3-19
Exercice dirig : Dclarer des variables 3-20
Examiner les conversions 3-22
Incrmenter et dcrmenter des valeurs 3-24
Oprateurs relationnels et oprateurs d'galit 3-25
Oprateur conditionnel (?:) 3-26
Oprateurs logiques 3-27
Oprateurs d'affectation composs 3-28
Priorit des oprateurs 3-29
Informations complmentaires sur la priorit des oprateurs 3-30
Concatner des chanes 3-31
Synthse 3-32
Prsentation de l'exercice 3 : Explorer les types de primitive et les oprateurs 3-33
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

v
4 Contrler le flux du programme
Objectifs 4-2
Types lmentaires de contrle de flux 4-3
Utiliser le contrle de flux en Java 4-4
Instruction if 4-5
Instructions if imbriques 4-6
Exercice dirig : Identifier les erreurs 4-7
Instruction switch 4-8
Informations complmentaires sur l'instruction switch 4-9
Boucles en Java 4-10
Boucle while 4-12
Boucle dowhile 4-13
Boucle for 4-14
Informations complmentaires sur la boucle for 4-15
Exercice dirig : Identifier les erreurs 4-16
Instruction break 4-17
Instruction continue 4-18
Synthse 4-19
Prsentation de l'exercice 4 : Contrler le flux d'un programme 4-20

5 Dvelopper des applications avec Oracle JDeveloper (11g)
Objectifs 5-2
Oracle JDeveloper (11g) 5-3
Environnement Oracle JDeveloper (11g) 5-4
Navigateur d'applications 5-6
Projets 5-8
Crer des lments JDeveloper 5-10
Crer une application 5-11
Page Project Properties : Dfinir les dtails d'un projet 5-13
Page Project Properties : Slectionner des bibliothques supplmentaires 5-14
Ajouter une nouvelle dfinition Java SE 5-15
Structure de rpertoires 5-16
Examiner le squelette d'une l'application Java 5-17
Rechercher des mthodes et des champs 5-18
Dveloppement assist de code avec les outils Profiler et CodeCoach 5-19
Fonctionnalits de l'diteur de code 5-20
Refactoring 5-22
Utiliser Javadoc 5-25
Systme d'aide de JDeveloper 5-26
Obtenir de l'aide sur un sujet 5-27
Dbogueur Oracle JDeveloper 5-28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

vi
Points d'arrt 5-30
Fentres de dbogage 5-32
Excuter un programme ligne par ligne 5-33
Examiner les donnes et les variables 5-34
Synthse 5-35
Prsentation de l'exercice 5 : Programmer en Java l'aide
d'Oracle JDeveloper 11g 5-36

6 Crer des classes et des objets
Objectifs 6-2
Programmation oriente objet 6-3
Classes et objets 6-5
Distinction entre classes et objets 6-6
Les objets sont modliss sous forme d'abstractions 6-7
Encapsulation 6-8
Hritage 6-9
Polymorphisme 6-10
Exercice dirig : Rechercher les oprations et les attributs 6-11
Classes Java 6-12
Comparer les classes et les objets 6-13
Crer des objets 6-14
Oprateur new 6-15
Variables de primitive et variables d'objet 6-16
Rfrence null 6-17
Affecter des rfrences 6-18
Dclarer des variables d'instance 6-19
Accder aux variables d'instance public 6-20
Dfinir des mthodes 6-21
Appeler une mthode 6-22
Indiquer les arguments d'une mthode : Exemples 6-23
Renvoyer une valeur partir d'une mthode 6-25
Appeler des mthodes d'instance 6-26
Encapsulation en langage Java 6-27
Transmettre des primitives des mthodes 6-28
Transmettre des rfrences objet aux mthodes 6-29
Packages Java 6-30
Regrouper des classes dans un package 6-31
Dfinir le CLASSPATH avec des packages 6-32
Modificateurs d'accs 6-34
Prsentation de l'exercice 6 : Crer des classes et des objets 6-36
Composants JavaBean 6-37
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

vii
Informations complmentaires sur les composants JavaBean 6-38
Grer les proprits des composants JavaBean 6-39
Exposer les proprits et les mthodes 6-40
Crer et utiliser un composant JavaBean dans JDeveloper 6-41
Synthse 6-42

7 Cycle de vie des objets et classes internes
Objectifs 7-2
Surcharger une mthode 7-3
Utiliser la rfrence this 7-5
Initialiser les variables d'instance 7-6
Variables de classe 7-7
Initialiser des variables de classe 7-8
Mthodes de classe 7-9
Exercice dirig : Mthodes de classe ou mthodes d'instance 7-10
Exemples de mthodes Java static 7-11
Constructeurs 7-12
Dfinir et surcharger des constructeurs 7-13
Partager du code entre des constructeurs 7-14
Variables, mthodes et classes final 7-15
Nettoyage de la mmoire 7-16
Mthode finalize() 7-17
Classes internes 7-19
Classe interne anonyme 7-21
Classe Calendar 7-23
Effectuer des calculs avec la classe Calendar 7-24
Synthse 7-27
Prsentation de l'exercice 7 : Classes de cycle de vie des objets 7-28

8 Utiliser les chanes
Objectifs 8-2
Les chanes en langage Java 8-3
Crer des chanes 8-4
Concatner des chanes 8-5
Effectuer des oprations sur les chanes 8-6
Effectuer d'autres oprations sur les chanes 8-7
Comparer des objets String 8-8
Gnrer des chanes partir d'autres objets 8-10
Gnrer des chanes partir de primitives 8-11
Gnrer des primitives partir de chanes 8-12
Mthodes de conversion des classes wrapper 8-13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

viii
Modifier le contenu d'une chane 8-14
Classes de formatage 8-16
Formater les dates 8-17
Sous-classe DecimalFormat 8-19
Utiliser DecimalFormat pour la localisation 8-21
Exercice dirig 8-23
Expressions rgulires 8-25
Identifier les chanes correspondant une expression rgulire 8-26
Remplacer et fractionner des chanes 8-27
Correspondance de modle de recherche 8-28
Syntaxe des expressions rgulires 8-29
Correspondance de modle de recherche : Etapes 8-31
Exercice dirig 8-33
Synthse 8-35
Prsentation de l'exercice 8 : Utiliser des chanes, des classes StringBuffer,
des classes wrapper et des classes de formatage de texte 8-36

9 Utiliser des flux pour les E/S
Objectifs 9-2
Flux 9-3
Jeux de classes d'E/S 9-4
Coder les E/S 9-5
Difficults lies au codage des E/S en Java 9-6
Flux binaires 9-7
Classe InputStream 9-9
Classe OutputStream 9-10
Utiliser des flux binaires 9-11
Flux d'E/S alphanumriques 9-13
Utiliser des flux alphanumriques 9-15
Classe InputStreamReader 9-17
Classe OutputStreamWriter 9-18
Concepts de base : Sortie standard 9-19
Classes PrintStream et PrintWriter 9-20
Sortie formate 9-22
Indicateurs de format 9-23
Exercice dirig 9-25
Concepts de base : Entre standard 9-26
API Scanner 9-28
E/S distance 9-29
Flux de donnes 9-31
Flux d'objets 9-32
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

ix
Srialisation d'objets 9-33
Flux de srialisation, interfaces et modificateurs 9-36
Classe IOException 9-37
Synthse 9-39
Prsentation de l'exercice 9 : Utiliser des flux pour les E/S 9-40

10 Hritage et polymorphisme
Objectifs 10-2
Principaux composants orients objet 10-3
Exemple d'hritage 10-5
Utiliser l'hritage en langage Java 10-6
Dfinir l'hritage l'aide d'Oracle JDeveloper 10-8
Variables de sous-classe et de superclasse 10-9
Initialisation par dfaut 10-10
Rfrence Super() 10-11
Exemple d'utilisation de la rfrence Super() 10-12
Utiliser des constructeurs de superclasse 10-13
Dsigner des mthodes supplmentaires 10-15
Redfinir les mthodes de la superclasse 10-17
Appeler les mthodes de la superclasse 10-19
Exemple de polymorphisme en langage Java 10-20
Traiter une sous-classe comme sa superclasse 10-21
Explorer les rfrences de superclasse avec Oracle JDeveloper 10-22
Afficher une hirarchie 10-23
Acme Video et le polymorphisme 10-24
Utiliser le polymorphisme dans le cas d'Acme Video 10-25
Oprateur instanceof 10-27
Limiter les mthodes et les classes avec final 10-29
Garantir l'hritage authentique 10-31
Synthse 10-32
Prsentation de l'exercice 10 : Hritage et polymorphisme 10-33

11 Tableaux et collections
Objectifs 11-2
Tableaux 11-3
Crer un tableau de primitives 11-4
Dclarer un tableau 11-5
Crer un objet tableau 11-6
Initialiser les lments d'un tableau 11-8
Crer un tableau de rfrences objet 11-9
Initialiser les objets d'un tableau 11-10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

x
Utiliser un tableau de rfrences objet 11-11
Passer en revue les lments d'un tableau 11-12
Tableaux et exceptions 11-13
Tableaux plusieurs dimensions 11-14
Transmettre des paramtres de ligne de commande main() 11-15
Java Collections Framework 11-16
Hirarchie des interfaces Java Collections Framework 11-17
Composants de Java Collections Framework 11-18
Interface Collection et classe AbstractCollection 11-19
Interface Iterator 11-20
Ensembles 11-22
Classe HashSet 11-23
Classe LinkedHashSet 11-25
Classe TreeSet 11-27
Listes 11-29
Classe ArrayList 11-30
Modifier une collection ArrayList 11-31
Accder une collection ArrayList 11-32
Classe LinkedList 11-33
Mappes 11-35
Types de mappe 11-36
Exemple d'utilisation des mappes 11-37
Synthse 11-39
Prsentation de l'exercice 11 : Utiliser les tableaux et les collections 11-40

12 Utiliser des types gnriques
Objectifs 12-2
Types gnriques 12-3
Dclarer des classes gnriques 12-5
Utiliser les classes gnriques 12-6
Mthodes gnriques 12-7
Caractres gnriques 12-9
Types bruts 12-11
Elimination de type 12-12
Synthse 12-13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

xi
13 Structurer le code l'aide de classes abstraites et d'interfaces
Objectifs 13-2
Classes abstraites 13-3
Crer des classes abstraites 13-5
Mthodes abstraites 13-6
Dfinir des mthodes abstraites 13-7
Dfinir et utiliser des interfaces 13-8
Exemples d'interfaces 13-9
Crer des interfaces 13-10
Comparaison entre interfaces et classes abstraites 13-11
Implmenter des interfaces 13-12
Tri : Exemple concret 13-13
Prsentation des classes 13-14
Fonctionnement du tri 13-15
Interface Sortable 13-16
Classe Sort 13-17
Classe Movie 13-18
Utiliser le tri 13-19
Utiliser instanceof avec des interfaces 13-20
Synthse 13-21
Prsentation de l'exercice 13 : Structurer le code l'aide de classes abstraites
et d'interfaces 13-22

14 Gnrer et dtecter les exceptions
Objectifs 14-2
Qu'est-ce qu'une exception ? 14-3
Traitement des exceptions par Java 14-4
Avantages des exceptions Java : Sparation du code de gestion des erreurs 14-5
Avantages des exceptions Java : Remonter les erreurs dans la pile d'appels 14-7
Avantages des exceptions Java : Les exceptions ne peuvent pas
tre ignores 14-8
Exceptions contrles, exceptions non contrles et erreurs 14-9
Traiter les exceptions 14-11
Dtecter et traiter les exceptions 14-12
Dtecter une exception unique 14-14
Dtecter plusieurs exceptions 14-15
Nettoyer l'aide d'un bloc finally 14-16
Exercice dirig : Dtecter et traiter les exceptions 14-17
Laisser une exception se transmettre la mthode appelante 14-19
Gnrer des exceptions 14-20
Crer des exceptions 14-21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

xii
Dtecter une exception et gnrer une autre exception 14-22
Synthse 14-23
Prsentation de l'exercice 14 : Gnrer et dtecter les exceptions 14-24

15 Utiliser JDBC pour accder la base de donnes
Objectifs 15-2
Java, Java EE, et Oracle 11g 15-3
Se connecter une base de donnes avec Java 15-4
JDBC (Java Database Connectivity) 15-5
Prparer l'environnement 15-6
Procdure d'utilisation de JDBC pour excuter des instructions SQL 15-7
Etape 1 : Enregistrer le pilote 15-8
Se connecter la base de donnes 15-9
Pilotes Oracle JDBC : Pilote pour les clients lgers 15-10
Pilotes Oracle JDBC : Pilote de client OCI 15-11
Choisir le pilote appropri 15-12
Etape 2 : Obtenir une connexion de base de donnes 15-13
URL JDBC 15-14
URL JDBC avec pilotes Oracle 15-15
Etape 3 : Crer une instruction 15-16
Utiliser l'interface Statement 15-17
Etape 4a : Coder l'instruction d'interrogation 15-18
Objet ResultSet 15-19
Etape 4b : Excuter des instructions LMD 15-20
Etape 4b : Excuter des instructions LDD 15-21
Etape 5 : Traiter les rsultats de l'interrogation 15-22
Mettre en correspondance des types de la base de donnes
avec des types Java 15-23
Etape 6 : Nettoyer les ressources 15-25
Exemple d'interrogation de base 15-26
Grer une instruction SQL inconnue 15-27
Traiter les exceptions 15-28
Transactions avec JDBC 15-29
Objet PreparedStatement 15-31
Crer un objet PreparedStatement 15-32
Excuter un objet PreparedStatement 15-33
Objet DataSource 15-34
Avantages des objets DataSource 15-35
Utiliser un objet OracleDataSource pour la connexion une base
de donnes 15-36
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

xiii
Optimisation des accs la base de donnes via la concentration
des connexions 15-38
Concentration des connexions 15-40
Synthse 15-43
Prsentation de l'exercice 15 : Utiliser JDBC pour accder la base
de donnes 15-44

16 Conception d'interface graphique : Utiliser Swing pour planifier la prsentation
d'une application
Objectifs 16-2
Classes AWT, Swing et JFC 16-3
Fonctionnalits de Swing 16-5
Composants lgers et composants lourds 16-6
Planifier la prsentation de l'interface graphique 16-7
La hirarchie de conteneurs Swing 16-8
Conteneurs de premier niveau 16-10
Conteneurs intermdiaires 16-12
Composants atomiques 16-14
Prsentation des gestionnaires de prsentation 16-15
Gestionnaire Border 16-17
Gestionnaire GridBag 16-18
Contraintes du gestionnaire GridBag 16-19
Utiliser les gestionnaires de prsentation 16-21
Associer des gestionnaires de prsentation 16-23
Classes de cadres Java 16-24
Conteneurs JPanel 16-26
Cadres internes 16-28
Ajouter des composants avec Oracle JDeveloper 16-29
Crer un cadre 16-30
Ajouter des composants 16-31
Prsentation la carte 16-33
Synthse 16-35
Prsentation de l'exercice 16 : Utiliser Swing pour planifier la prsentation
d'une application 16-36
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

xiv
17 Ajouter des composants d'interface graphique et la gestion des vnements
Objectifs 17-2
Composants Swing 17-3
Composants Swing dans JDeveloper 17-5
Appeler l'diteur d'interface graphique 17-7
Ajouter un composant un panneau 17-8
Modifier les proprits d'un composant 17-9
Code gnr par JDeveloper 17-10
Crer un menu 17-12
Utiliser l'diteur de menu de JDeveloper 17-13
Prsentation de l'exercice 17-1 : Ajouter des composants
d'interface graphique 17-14
Interface graphique de l'application OrderEntry 17-15
Le modle Java de gestion des vnements 17-16
Notions fondamentales relatives au code de gestion des processus
d'coute d'vnement 17-17
Processus de gestion des vnements : Enregistrement 17-18
Processus de gestion des vnements : L'vnement se produit 17-20
Processus de gestion des vnements : Excuter le gestionnaire
d'vnements 17-21
Utiliser des classes d'adaptateur pour les processus d'coute 17-22
Architecture MVC de Swing 17-23
Mthodes lmentaires des composants de type texte 17-26
Mthodes lmentaires des composants JList 17-27
Quels sont les vnements qu'un composant peut gnrer ? 17-28
Dfinir un gestionnaire d'vnements dans JDeveloper 17-29
Style par dfaut du code de gestion des vnements gnr
par JDeveloper 17-31
Complter la mthode de gestionnaire d'vnements 17-31
Synthse 17-32
Prsentation de l'exercice 17-2 : Ajouter le code de gestion des vnements 17-33

18 Deployer des applications Java
Objectifs 18-2
Crer des packages et dployer des projets Java 18-3
Dployer un fichier .jar 18-4
Dployer des applications avec JDeveloper 18-5
Crer le profil de dploiement 18-6
Slectionner les fichiers dployer 18-8
Crer le fichier d'archive et le dployer 18-10
Crer un fichier .jar excutable 18-11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

xv
Java Web Start 18-13
Avantages de Web Start 18-14
Excuter une application Web Start 18-15
Examiner le fichier JNLP 18-16
Dployer une application pour Java Web Start l'aide de JDeveloper 18-17
Etape 1 : Gnrer les profils de dploiement et l'archive de l'application 18-18
Etape 2a : Dmarrer le serveur 18-19
Etape 2b : Tester la connexion 18-20
Etape 3 : Utiliser l'assistant Java Web Start pour crer un fichier JNLP 18-21
Etape 4 : Archiver et dployer l'application sur le serveur WebLogic 18-22
Synthse 18-23

Annexe A : Exercices
Annexe B : Rappels sur le langage Java
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

xvi

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Tableaux et collections
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
dcrire comment crer des tableaux de primitives et
d'objets
traiter les variables de ligne de commande
grer des groupes d'objets l'aide de Java Collections
Framework
Objectifs du chapitre
Ce chapitre traite de la manipulation de groupes de primitives et d'objets. La premire partie
explique comment crer et utiliser des tableaux. La seconde partie du chapitre prsente Java
Collections Framework et l'utilisation de ses diffrentes interfaces pour rpondre diffrents
besoins.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-3
Copyright 2008, Oracle. Tous droits rservs.
Tableaux
Un tableau est une collection de variables de mme type.
Chaque lment peut contenir une seule donne.
Les donnes peuvent tre des primitives ou des
rfrences objet.
La longueur du tableau est dtermine au moment de sa
cration.
1
2
4
8
[0]
[1]
[2]
[3]
Action
Comedy
Drama
[0]
[1]
[2]
Tableaux
Les tableaux sont utiles lorsque vous souhaitez regrouper des objets manipuler globalement.
Par exemple, si vous crivez un programme destin permettre aux utilisateurs de rechercher
un film, vous pouvez consigner la liste des catgories de films dans un tableau.
La diapositive ci-dessus prsente un tableau de quatre nombres entiers et un tableau de trois
chanes. Les diapositives suivantes expliquent la cration et l'initialisation des tableaux.
Comme vous le verrez, un tableau Java est un objet.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-4
Copyright 2008, Oracle. Tous droits rservs.
Crer un tableau de primitives
1. Dclarez le tableau.
type est une primitive, comme int, etc.
2. Crez l'objet tableau.
3. Initialisez les lments du tableau (facultatif).
Null
arrayName
arrayName
1
2
4
0
0
0
arrayName
type[] arrayName;
ou
type arrayName[];
// Create array object syntax
arrayName = new type[size];
Crer un tableau de primitives
1. Dclaration : Crez la variable qui rfrence le tableau.
2. Cration : Crez un objet tableau du type et de la taille requis. Placez ensuite une
rfrence ce tableau dans la variable de tableau cre prcdemment.
3. Initialisation : Initialisez les lments du tableau en leur attribuant les valeurs
souhaites. Cette tape est facultative pour un tableau de primitives, car les lments sont
initialiss avec des valeurs par dfaut lors de la cration de l'objet tableau.
Les diapositives suivantes dtaillent ces trois tapes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-5
Copyright 2008, Oracle. Tous droits rservs.
Dclarer un tableau
Crez une variable pour rfrencer l'objet tableau :
Lorsqu'une variable tableau est dclare :
Sa variable d'instance est initialise avec la valeur null tant
que l'objet tableau n'a pas t cr.
Sa variable de mthode est inconnue tant que l'objet n'a pas
t cr.
int[] powers; // Example
null
powers
Dclarer un tableau
Il existe deux mthodes de dclaration d'un tableau :
Les programmeurs Java utilisent pour la plupart le premier style, car il spare le type de
variable (dans l'exemple, un tableau int) du nom de la variable, ce qui rend le code plus
facile lire.
Lorsque vous dclarez une variable de tableau, elle se rfre initialement la valeur null,
jusqu' ce que vous initialisiez le tableau l'aide de new.
Syntaxe Exemple
type[] arrayname; int[] powers;
type arrayname[]; int powers[];


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-6
Copyright 2008, Oracle. Tous droits rservs.
Crer un objet tableau
Crez un tableau de la longueur requise et affectez-le la
variable de tableau :
L'objet tableau est cr l'aide de l'oprateur new.
Le contenu d'un tableau de primitives est initialis
automatiquement.
int[] powers; // Declare array variable
powers = new int[4]; //Create array object
powers
0
0
0
0
Crer un objet tableau
Si vous utilisez l'oprateur new, vous devez indiquer la taille du tableau entre crochets.
Celle-ci doit tre une valeur entire, mais pas ncessairement une constante. Il peut s'agir
d'une expression value lors de l'excution.
Une fois que l'objet tableau a t cr, il garde une longueur fixe pendant toute sa dure de
vie.
Initialisation par dfaut des lments de tableau
Tous les lments d'un nouveau tableau de primitives sont automatiquement initialiss l'aide
de valeurs par dfaut, comme illustr ci-dessous :
La valeur \u0000 est affecte aux lments de type char.
La valeur 0 est affecte aux lments de type byte, short, int et long.
La valeur false est affecte aux lments de type boolean.
La valeur 0.0 est affecte aux lments de type float et double.
Remarque : \u0000 correspond Unicode 0000. Java utilise le jeu de caractres Unicode.
Exemples de cration de tableaux valides
Exemple 1
final int SIZE = 4;
int[] powers = new int[SIZE]; // SIZE is a constant
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-7
Crer un objet tableau (suite)
Exemple 2
int[] examMarks;
int num = askUserHowManyStudents(); // set the value of num
examMarks = new int[num]; // array is a fixed size
Exemples de cration de tableaux incorrects
Exemple 1
int powers[4]; // Syntaxe non valide : Vous ne pouvez pas dfinir
la taille
// du tableau dans l'instruction de dclaration.
Exemple 2
int num;
int[] examMarks = new int[num]; // Erreur de compilation : num
// n'a pas t initialis.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-8
Copyright 2008, Oracle. Tous droits rservs.
Initialiser les lments d'un tableau
Affectez des valeurs aux diffrents lments :
Crez et initialisez simultanment le tableau :
int[] primes = {2, 3, 5, 7};
type[] arrayName = {valueList};
primes
[0]
[1]
[2]
2
3
5
7 [3]
arrayName[index] = value;
powers[0] = 1;
powers
[0]
[1]
[2]
1
0
0
0 [3]
Initialiser les lments d'un tableau
Premire mthode : Affecter une valeur chaque lment du tableau
Pour faire rfrence un lment de tableau, utilisez un index entre crochets ([]) comme
indiqu dans la diapositive ci-dessus. Les lments de tableau sont numrots de 0 n-1, o
n reprsente le nombre d'lments du tableau. En d'autres termes, l'index du premier lment
d'un tableau est 0 et non 1.
Deuxime mthode : Utiliser des initialiseurs de tableau
Comme le montre la diapositive ci-dessus, il existe une technique plus directe pour crer et
initialiser un tableau de primitives. Cette technique ne ncessite pas l'utilisation de l'oprateur
new et la longueur du tableau est dfinie automatiquement. Notez l'utilisation des crochets et
du point-virgule la fin.
Les initialiseurs de tableau sont trs utiles pour la cration de tables de consultation, comme
l'illustre l'exemple suivant :
int[] daysInMonth = {31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31};
Cette mthode n'est utile que si la valeur de chaque lment est connue au moment de la
cration du tableau.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-9
Copyright 2008, Oracle. Tous droits rservs.
Crer un tableau de rfrences objet
1. Dclarez le tableau.
2. Crez l'objet tableau.
3. Initialisez les objets du tableau.
null
arrVar
null
null
null
arrVar
Action
Comedy
Drama
arrVar
ClassName[] arrVar;
ou
ClassName arrVar[];
// Create array object syntax
arrVar = new ClassName[size];
Crer un tableau de rfrences objet
Les tapes de la cration d'un tableau de rfrences objet sont les mmes que pour un tableau
de primitives, une exception prs : vous devez initialiser les lments du tableau, car cette
opration n'est pas effectue automatiquement.
1. Dclaration : La syntaxe est la mme que pour les tableaux de primitives. Par exemple,
String[] categories;
dclare une variable qui peut pointer sur un tableau de type String. Si la variable est
une variable d'instance, elle est initialise avec la valeur null.
2. Cration : La syntaxe est la mme que pour les tableaux de primitives. Par exemple,
categories = new String[3];
cre un objet tableau du type appropri (String) et de taille 3. A l'origine, la valeur
null est affecte tous les lments.
Un tableau peut tre dclar et cr dans la mme instruction.
Par exemple, String[] categories = new String[3];
3. Initialisation : Initialisez les lments du tableau en leur attribuant les valeurs
souhaites. Cette opration est dcrite dans la diapositive suivante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-10
Copyright 2008, Oracle. Tous droits rservs.
Initialiser les objets d'un tableau
Affectez une valeur chaque lment du tableau :
Crez et initialisez simultanment le tableau :
String[] categories =
{"Action", "Comedy", "Drama"};
// Create an array of four empty Strings
String[] arr = new String[4];
for (int i = 0; i < arr.length; i++) {
arr[i] = new String();
}
Initialiser les objets d'un tableau
Comme pour les tableaux de primitives, il existe deux mthodes d'initialisation d'un tableau
de rfrences objet. Vous pouvez initialiser le tableau en affectant une valeur chacun de ses
lments ou en initialisant le tableau au moment de sa cration.
Proprit length
Chaque tableau possde un attribut length qui contient le nombre d'lments du tableau.
Grce l'utilisation de la proprit length, vous pouvez viter de coder en dur ou de stocker
la taille d'un tableau dans le code. Etant donn que l'index du premier lment d'un tableau
est 0, l'index de son dernier lment est length 1.
L'exemple de la diapositive ci-dessus utilise la proprit length pour effectuer une boucle
sur tous les lments d'un tableau, dans le but de crer un tableau de chanes vides.
La classe System fournit galement une mthode utile de copie de tout ou partie d'un tableau
dans un autre tableau. Pour plus d'informations, recherchez System.arraycopy() dans la
documentation du kit JDK (Java Development Kit).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-11
Copyright 2008, Oracle. Tous droits rservs.
Utiliser un tableau de rfrences objet
Tout lment peut tre affect un objet de type correct :
Chaque lment peut tre trait comme un objet
individuel :
Un lment de tableau peut tre transmis n'importe
quelle mthode, par rfrence.
System.out.println
("Length is " + categories[2].length());
String category = categories[0];
Transmettre des tableaux des mthodes
Les tableaux se comportent comme des objets. Par consquent, lorsque vous transmettez un
tableau une mthode, il est transmis par rfrence (comme n'importe quel autre objet). Si la
mthode modifie le contenu du tableau, les modifications prennent effet dans le tableau
d'origine et non dans une copie.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-12
Copyright 2008, Oracle. Tous droits rservs.
Passer en revue les lments d'un tableau
Utilisez une boucle pour explorer chacun des lments
d'un tableau :
Java 5.0 fournit la syntaxe avance suivante :
for (String category: categories) {
System.out.println ("Category: " +category);
}
for (int i = 0;i < categories.length; i++){
System.out.println("Category: "+categories[i]);
}
Explorer les lments d'un tableau
Dans la plupart des cas, la recherche des lments qui seront manipuls par un programme
exige d'excuter une boucle sur un tableau et d'examiner chaque lment du tableau.
La diapositive ci-dessus prsente deux syntaxes diffrentes pour passer en revue les lments
d'un tableau.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-13
Copyright 2008, Oracle. Tous droits rservs.
Tableaux et exceptions
ArrayIndexOutOfBoundsException est utilis
lorsqu'un index de tableau est invalide :
NullPointerException est utilis lorsque vous tentez
d'accder un lment qui n'a pas t initialis :
Movie[] movieList = new Movie[3];
// The following will throw NullPointerException
String director = movieList[0].getDirector();
String[] list = new String[4];
//The following throws ArrayIndexOutOfBoundsException
System.out.println(list[4]);
Tableaux et exceptions
La diapositive ci-dessus illustre les exceptions (ou erreurs) qui s'affichent lorsque vous tentez
d'effectuer une opration non valide dans un tableau. Pour obtenir des informations dtailles
sur les exceptions, reportez-vous au chapitre "Gnrer et dtecter les exceptions". Vous
risquez de rencontrer ces erreurs si votre code essaie d'excuter une des oprations dcrites
dans la diapositive.
Si vous tentez d'accder un index de tableau non valide, le programme se bloque et affiche
le message d'erreur "ArrayIndexOutOfBoundsException".
Si vous tentez d'accder un lment de tableau qui n'a pas t initialis, le programme se
bloque et affiche le message d'erreur "NullPointerException".
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-14
Copyright 2008, Oracle. Tous droits rservs.
Tableaux plusieurs dimensions
Java prend en charge les tableaux de tableaux :
type[][] arrayname = new type[n1][n2];
int[][] mdarr = new int[4][2];
mdarr[0][0] = 1;
mdarr[0][1] = 7;
[0]
[1]
[2]
[3]
1 7
0 0
0 0
0 0
mdarr
[0][0] [0][1]
Tableaux plusieurs dimensions
Java prend en charge les tableaux plusieurs dimensions (c'est--dire les tableaux de
tableaux) :
int[][] tax = new int[5][4];
La syntaxe ci-dessus dclare et cre une matrice deux dimensions, compose de cinq lignes
contenant chacune quatre colonnes. L'accs aux diffrents lments s'effectue comme suit :
tax[rowIndex][colIndex] = value;
Complment : Tableaux plusieurs dimensions non rectangulaires
L'exemple suivant cre un tableau plusieurs dimensions comportant dix lignes, mais le
nombre de colonnes de chaque ligne est diffrent : la premire ligne comporte un lment, la
deuxime ligne deux lments, etc.
int[][] a = new int[10][];
for (int i = 0; i < a.length; i++) {
a[i] = new int[i + 1];
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-15
Copyright 2008, Oracle. Tous droits rservs.
Transmettre des paramtres de ligne
de commande main()
main() possde un seul paramtre : args.
args est un tableau d'objets String qui contient des
paramtres de ligne de commande :
public class SayHello {
public static void main(String[] args) {
if (args.length != 2)
System.out.println("Specify 2 arguments");
else
System.out.println(args[0]+" "+args[1]);
}
C:\> java SayHello Hello World
Transmettre des paramtres de ligne de commande main()
Une rfrence un tableau peut tre transmise n'importe quelle mthode. La mthode
main() utilise dans les applications Java en est un bon exemple. Au lancement d'une
application (mais pas d'une applet) Java, le systme recherche et appelle la mthode main()
de la classe correspondante.
La mthode main() possde un paramtre unique, qui est une rfrence un tableau d'objets
String. Chaque objet String contient un paramtre de ligne de commande. Le premier
lment du tableau contient le premier paramtre de ligne de commande et non le nom du
programme (comme c'est le cas en C et C++).
Les paramtres de ligne de commande sont toujours convertis en objets String
Il est important de noter que les paramtres de ligne de commande sont toujours reprsents
par des objets String. Dans la mthode main(), vous pouvez avoir besoin de convertir un
paramtre en type de primitive. Par exemple, si l'un des paramtres de ligne de commande
reprsente un nombre, vous devez le convertir en valeur int pour pouvoir effectuer des
oprations arithmtiques.
Dfinir des paramtres de ligne de commande dans JDeveloper
JDeveloper offre une bote de dialogue qui permet de dfinir des paramtres de ligne de
commande pour une application Java. Lorsque vous excutez l'application partir de
l'environnement JDeveloper, ce dernier transmet les paramtres la mthode main(),
comme d'habitude.
Pour dfinir des paramtres de ligne de commande dans JDeveloper, slectionnez Tools >
Project Properties dans la barre de menus, puis cliquez sur Run/Debug. Cliquez sur le bouton
Edit et indiquez les arguments du programme en tant que paramtres de ligne de commande.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-16
Copyright 2008, Oracle. Tous droits rservs.
Java Collections Framework
Java Collections Framework est une architecture API qui
permet la gestion d'un groupe d'objets pouvant tre manipuls
indpendamment de leur implmentation interne.
Elle se trouve dans le package java.util.
Elle est dfinie par six interfaces essentielles et des
classes d'implmentation :
Interface Collection : groupe gnrique d'lments
Interface Set : groupe d'lments uniques
Interface List : groupe ordonn d'lments
Interface Map : groupe de cls uniques et de leurs valeurs
SortedSet et SortedMap pour les interfaces Set et Map
tries
Java Collections Framework
Java Collections Framework est une architecture API qui permet la gestion d'une collection
d'objets pouvant tre manipuls indpendamment de leur implmentation interne. Il s'agit
d'une architecture unifie pour la reprsentation et la manipulation de collections. Toutes les
structures de collection contiennent trois lments : interfaces, implmentations et
algorithmes.
Une collection est un objet conteneur qui contient un groupe d'objets appels lments. Java
Collections Framework prend en charge trois grands types de collection, les ensembles, les
listes et les mappes, dfinis respectivement dans les interfaces Set, List et Map.
L'interface Collection est une abstraction qui reprsente un groupe d'lments.
L'interface Set modlise l'abstraction mathmatique ensemble. Il s'agit d'une collection
ne pouvant pas contenir de doublons.
L'interface List reprsente une collection ordonne (ou squence) d'lments, qui peut
comprendre des doublons. Les listes permettent de contrler l'emplacement o chaque
lment est insr. Les lments sont accessibles par l'intermdiaire de leur index entier
(position).
L'interface Map reprsente un objet qui mappe une ou plusieurs cls et leurs valeurs. Les
mappes ne contiennent pas de cls en double et chaque cl est mappe avec une valeur
unique.
Les interfaces SortedSet et SortedMap fournissent des collections ordonnes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-17
Copyright 2008, Oracle. Tous droits rservs.
Hirarchie des interfaces Java Collections
Framework
Collection
List Set
SortedSet
Map
SortedMap
Hirarchie des interfaces Java Collections Framework
Comme l'expliquait la diapositive prcdente, l'architecture Java Collections Framework est
constitue d'un ensemble d'interfaces permettant de manipuler des groupes d'objets.
Diffrentes interfaces dcrivent diffrents types de groupe. Il est ncessaire de crer des
implmentations spcifiques de ces interfaces, mais l'accs la collection proprement dite doit
se limiter l'utilisation des mthodes de l'interface, ce qui permet de modifier la structure
sous-jacente des donnes sans affecter le reste du code.
Le diagramme de la diapositive ci-dessus illustre la hirarchie des interfaces Java Collections
Framework. Il serait logique d'imaginer Map comme une extension de Collection. En
mathmatiques, une carte n'est en effet qu'une collection de paires de coordonnes. Pourtant,
les interfaces Map et Collection sont compltement indpendantes l'une de l'autre dans la
hirarchie. Les raisons de cet isolement sont lies la manire dont les bibliothques de
technologies Java utilisent les interfaces Set et Map. Une mappe sert gnralement fournir
l'accs aux valeurs stockes dans des cls. Vous disposez de tous les oprateurs de collection,
mais vous les utilisez sur des paires cl-valeur et non sur des lments simples. L'interface
Map est donc conue pour prendre en charge les oprations de base get() (obtenir) et
put() (envoyer) qui ne sont pas requises par Set.
Lors de la conception d'un logiciel l'aide de Java Collections Framework, il est utile d'avoir
en tte les relations hirarchiques suivantes entre les quatre interfaces fondamentales :
L'interface Collection est un groupe d'objets qui peut contenir des doublons.
L'interface Set tend Collection, mais interdit les doublons.
L'interface List tend Collection, autorise les doublons et introduit une indexation
par position.
L'interface Map n'tend aucune des autres interfaces.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-18
Copyright 2008, Oracle. Tous droits rservs.
Composants de Java Collections Framework
Java Collections Framework est un ensemble d'interfaces et de
classes qui permettent de stocker et de manipuler un groupe
de donnes sous la forme d'une entit unique.
Les interfaces standard sont celles utilises pour
manipuler les collections et pour les transmettre d'une
mthode une autre.
Les implmentations sont les objets de donnes rels
utiliss pour le stockage des collections. Les structures de
donnes implmentent l'interface de collection standard.
Les algorithmes sont des lments rutilisables fournis par
le JDK.
Composants de Java Collections Framework
La conception des programmes ncessite souvent la gestion de groupes d'objets. Java
Collections Framework offre un jeu de classes utilitaires standard permettant la gestion des
collections. La structure est constitue de trois composants principaux :
Interfaces standard : Ces interfaces permettent de manipuler les collections
indpendamment de leur implmentation. Elles dcrivent un jeu commun de
fonctionnalits, affiches par des collections, et amliorent l'change de donnes entre les
collections. Dans les langages orients objet, ces interfaces sont gnralement contenues
dans une hirarchie.
Implmentations : Un petit ensemble d'implmentations concrtes des interfaces
standard fournit une structure de donnes pouvant tre utilise par un programme. Dans
un certain sens, il s'agit de structures de donnes rutilisables. On distingue trois sortes
d'implmentation : les implmentations gnrales, les implmentations wrapper et les
implmentations simplifies.
Algorithmes : Il s'agit de mthodes qui effectuent des calculs utiles, tels que la recherche
et le tri, sur des objets qui implmentent des interfaces de collection. Ces algorithmes
sont dits polymorphiques, car la mme mthode peut tre utilise sur de nombreuses
implmentations diffrentes de l'interface de collection approprie.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-19
Copyright 2008, Oracle. Tous droits rservs.
Interface Collection et classe
AbstractCollection
L'interface Collection :
est l'interface racine pour la manipulation d'une collection
d'objets
fournit les oprations de base permettant d'ajouter et de
supprimer des lments dans une collection
fournit diverses oprations d'interrogation
fournit la mthode toArray qui renvoie une reprsentation de
la collection sous forme de tableau
AbstractCollection est une classe simplifie qui fournit
une implmentation partielle de l'interface Collection. Elle
implmente toutes les mthodes fournies par Collection,
l'exception de size et iterator.
L'interface Iterator est utilise pour parcourir les lments
d'une collection.
Interface Collection et classe AbstractCollection
L'interface Collection fournit les oprations de base permettant d'ajouter et de supprimer
des lments dans une collection. La mthode add ajoute un lment la collection, addAll
ajoute la collection tous les lments d'une collection dsigne, remove() supprime un
lment de la collection et removeAll() supprime de la collection les lments figurant
dans une collection spcifique. La mthode retainAll conserve dans la collection les
lments qui figurent galement dans une collection donne. Toutes ces mthodes renvoient
un rsultat de type boolean. La valeur renvoye est true si l'excution de la mthode a
modifi la collection. La mthode clear supprime tous les lments de la collection.
L'interface Collection fournit galement des oprations d'interrogation. La mthode
size renvoie le nombre d'lments de la collection. La mthode contains vrifie si la
collection contient tous les lments d'une collection dsigne. La mthode isEmpty
renvoie true si la collection est vide.
L'interface Iterator fournit un mcanisme uniforme de parcours des lments dans des
collections de divers types. La mthode iterator de l'interface Collection renvoie une
instance de l'interface Iterator qui permet l'accs squentiel aux lments de la collection
l'aide de la mthode next().
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-20
Copyright 2008, Oracle. Tous droits rservs.
Interface Iterator
L'interface Iterator peut tre utilise pour traiter une srie
d'objets. L'interface java.util.Iterator :
implmente une approche oriente objet pour accder aux
lments d'une collection
remplace l'approche java.util.Enumeration
contient les mthodes suivantes :
hasNext() renvoie true s'il existe davantage d'lments
next() renvoie l'objet suivant, s'il existe
remove() supprime le dernier lment renvoy
Interface Iterator
Les collections diffrent des tableaux en ce sens que les membres d'une collection ne sont pas
accessibles directement par l'intermdiaire d'index. Lorsque vous utilisez une interface
Enumeration ou Iterator, vous ne pouvez dplacer le pointeur de l'lment actuel que
vers le premier lment ou l'lment suivant d'une collection. L'interface Enumeration
faisait partie de l'API Java standard, tandis que l'interface Iterator a t ajoute avec Java
Collections Framework. Iterator permet de supprimer un objet d'une collection, tandis
que Enumeration permet seulement de parcourir une collection.
L'exemple qui suit cre une ArrayList contenant plusieurs lments String, puis appelle
la mthode iterator() afin de renvoyer un objet Iterator. La boucle utilise la
mthode next() de l'interface Iterator pour obtenir les lments et afficher leur valeur
de type chane en majuscules.
Lorsque hasNext() prend la valeur false, la boucle se termine.
import java.util.ArrayList;
import java.util.Iterator;
:
ArrayList al = new ArrayList();
al.add("Jazz");
al.add("Classical");
al.add("Rock 'n Roll");
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-21
Interface Iterator (suite)
for (Iterator e = al.iterator();
e.hasNext(); ) {
String s = (String) e.next();
System.out.println(s.toUpperCase());
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-22
Copyright 2008, Oracle. Tous droits rservs.
Ensembles
L'interface Set tend l'interface Collection.
Les classes concrtes qui implmentent Set doivent
garantir qu'aucun lment en double ne peut tre ajout
la collection.
AbstractSet tend AbstractCollection et
implmente l'interface Set.
Trois classes concrtes implmentent Set :
HashSet
LinkedHashSet
TreeSet
Ensembles
L'interface Set tend l'interface Collection. Elle n'introduit pas de nouvelles mthodes
ou constantes, mais elle stipule qu'une instance de Set (un ensemble) ne contient aucun
doublon.
La classe simplifie AbstractSet tend la classe AbstractCollection et
implmente Set. La classe AbstractSet fournit des implmentations concrtes pour les
mthodes equals et hashCode. Le code de hachage d'un ensemble est la somme des codes
de hachage de tous les lments de la collection.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-23
Copyright 2008, Oracle. Tous droits rservs.
Classe HashSet
Une collection HashSet peut tre utilise pour stocker des
lments sans doublons.
Vous pouvez crer un ensemble de hachage vide l'aide
de son constructeur sans argument ou utiliser une collection
existante pour crer un ensemble de hachage.
Les objets ajouts un ensemble de hachage doivent
implmenter la mthode hashCode d'une manire qui
rpartit correctement le code de hachage.
Deux objets gaux doivent avoir le mme code de hachage.
Deux objets qui ne sont pas gaux peuvent avoir le mme
code de hachage, mais vous devez implmenter la mthode
hashCode de manire limiter ce genre de situation.
Classe HashSet
Exemple de collection HashSet
Le programme suivant recherche tous les mots utiliss dans une section de texte. Il cre un
ensemble de hachage pour stocker les mots extraits, ainsi qu'un itrateur pour parcourir les
lments de l'ensemble.
import java.util.*;
public class TestHashSet {
public static void main(String[] args) {
//Create a hash set
Set<String> set = new HashSet<String>();
//Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-24
Classe HashSet (suite)
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
System.out.println(set);
//Display the elements in the hash set
for (Object element: set)
System.out.print(element.toString() + " ");
}
}
Remarque : Ce programme ajoute des lments de type String un ensemble de hachage, affiche
ces lments l'aide de la mthode toString et les parcourt l'aide d'un itrateur. "New York" est
ajout plus d'une fois la collection, mais une seule occurrence est stocke car un ensemble
n'autorise pas les doublons.
Lorsque vous excutez le programme, vous remarquez que les chanes ne sont pas stockes dans
l'ordre o elles ont t insres dans la collection. Les lments d'un ensemble de hachage ne sont pas
stocks dans un ordre particulier. Pour leur imposer un ordre, vous devez utiliser la classe
LinkedHashSet prsente dans la diapositive suivante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-25
Copyright 2008, Oracle. Tous droits rservs.
Classe LinkedHashSet
La classe LinkedHashSet a t introduite dans la
version JDK 1.4.
Elle prend en charge l'organisation des lments d'un
ensemble.
Vous pouvez crer une collection LinkedHashSet
l'aide du constructeur sans argument de cette classe.
Classe LinkedHashSet
Exemple de collection LinkedHashSet
L'exemple suivant rcrit le prcdent en utilisant la classe LinkedHashSet.
import java.util.*;
public class TestLinkedHashSet {
public static void main(String[] args) {
//Create a linked hash set
Set<String> set = new LinkedHashSet<String>();
//Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-26
Classe LinkedHashSet (suite)
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
System.out.println(set);
//Display the elements in the linked hash set
for (Object element: set)
System.out.print(element.toString() + " ");
}
}
Remarque : Lorsque vous excutez ce programme, vous remarquez que l'ensemble
LinkedHashSet a conserv l'ordre dans lequel les lments ont t insrs. Pour imposer un ordre
diffrent, vous devez utiliser la classe TreeSet prsente dans la diapositive suivante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-27
Copyright 2008, Oracle. Tous droits rservs.
Classe TreeSet
TreeSet est une classe concrte qui implmente
l'interface SortedSet.
SortedSet est une sous-interface de Set qui garantit le
tri des lments de l'ensemble.
SortedSet fournit les mthodes suivantes :
first() et last() renvoient respectivement le premier et
le dernier lments de l'ensemble.
headSet(toElement) et tailSet(fromElement)
renvoient la partie de l'ensemble dont les lments sont
respectivement infrieurs toElement et suprieurs
fromElement.
Vous ne pouvez ajouter un ensemble TreeSet que des
lments comparables entre eux.
Classe TreeSet
Vous devez pouvoir comparer entre eux les lments d'une collection TreeSet. Vous avez
le choix entre deux mthodes de comparaison :
Utiliser l'interface Comparable. Si les objets ajouts l'ensemble sont des instances de
Comparable, vous pouvez les comparer l'aide de la mthode compareTo. Dans
l'API Java, plusieurs classes implmentent l'interface Comparable, notamment
String, Date, Calendar et toutes les classes wrapper de primitives.
Si la classe des lments de la collection n'implmente pas l'interface Comparable ou
si vous ne voulez pas utiliser la mthode compareTo dans la classe qui implmente
l'interface Comparable, indiquez un comparateur pour les lments de l'ensemble.
Exemple d'ensemble TreeSet
L'exemple suivant utilise l'interface Comparable pour ordonner les lments de l'ensemble.
Il rcrit l'exemple prcdent pour afficher les mots en ordre alphabtique l'aide de la classe
TreeSet.
import java.util.*;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-28
Classe TreeSet (suite)
public class TestTreeSet {
public static void main(String[] args) {
//Create a hash set
Set<String> set = new HashSet<String>();
//Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
TreeSet<String> treeSet = new TreeSet<String>(set);
System.out.println(treeSet);
//Display the elements in the hash set
for (Object element: set)
System.out.print(element.toString() + " ");
}
}
Remarque : Ce programme cre un ensemble HashSet contenant des chanes, puis il cre un
ensemble TreeSet avec les mmes chanes. Les chanes de l'ensemble TreeSet sont tries
l'aide de la mthode compareTo de l'interface Comparable.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-29
Copyright 2008, Oracle. Tous droits rservs.
Listes
L'interface List tend Collection pour dfinir une
collection ordonne pouvant contenir des doublons.
Elle fournit des oprations qui tiennent compte de la
position des lments.
Un itrateur de liste permet de parcourir la collection dans
les deux sens.
La classe AbstractList fournit une implmentation
partielle de l'interface List.
La classe AbstractSequentialList tend
AbstractList et prend en charge les listes ordonnes.
Les classes ArrayList et LinkedList sont deux
implmentations concrtes de l'interface List.
Listes
Les ensembles n'autorisent pas les doublons. Pour stocker des doublons dans une collection,
vous devez utiliser une liste implmentant l'interface List. Une liste permet de stocker
plusieurs occurrences d'un mme lment, mais aussi d'indiquer leur emplacement dans la
collection. L'utilisateur peut accder ces lments via un index.
L'interface List comprend les mthodes suivantes :
add(index, element) Ajoute l'lment element la position index
addAll(index, collection) Insre la collection collection la position
index
remove(index) Supprime de la liste l'lment situ
la position index
set(index, element) Dfinit l'lment element la position index
listIterator Renvoie l'itrateur de liste utilis dans la collection
listIterator(startIndex) Renvoie l'itrateur des lments partir
de la position startIndex
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-30
Copyright 2008, Oracle. Tous droits rservs.
Classe ArrayList
Caractristiques de la classe ArrayList :
Elle stocke les lments dans un tableau.
Elle est une implmentation redimensionnable de
l'interface List.
Elle permet la manipulation de la taille des tableaux.
Elle prsente une capacit qui augmente mesure que
des lments sont ajouts la liste.
Pour crer une collection ArrayList vide :
Pour crer une collection ArrayList avec une taille initiale :
ArrayList members = new ArrayList();
// Create an ArrayList with 10 elements.
ArrayList members = new ArrayList(10);
Classe ArrayList
La classe ArrayList appartient au package java.util et fournit un tableau
redimensionnable d'objets. Les tableaux Java ont une taille fixe. La classe ArrayList est
donc utile lorsque vous ne connaissez pas la taille future d'un tableau au moment de sa
cration. Par exemple, vous pouvez recevoir une liste de noms en provenance d'un serveur et
stocker ces noms dans un tableau local. Avant d'extraire les donnes du serveur, vous ne
connaissez pas la taille de la liste.
La classe ArrayList fournit des mthodes permettant d'accder la liste et de la modifier.
Cette classe est en grande partie quivalente la classe Vector, ceci prs qu'elle n'est pas
synchronise.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-31
Copyright 2008, Oracle. Tous droits rservs.
Modifier une collection ArrayList
Ajouter un lment la fin de la collection ArrayList :
Ajouter un lment une position spcifique :
Supprimer l'lment une position spcifique :
String name = MyMovie.getNextName();
members.add(name);
// Remove the first element
members.remove(0);
// Insert a string at the beginning
members.add(0, name);
Modifier une collection ArrayList
Lorsque vous ajoutez un lment une collection ArrayList, celle-ci est tendue d'un
lment. A l'inverse, si vous supprimez un lment d'une collection ArrayList, la taille de
la collection diminue. Si vous insrez un lment une position spcifique, les index de tous
les lments situs aprs cette position augmentent de 1.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-32
Copyright 2008, Oracle. Tous droits rservs.
Accder une collection ArrayList
Extraire le premier lment :
Extraire un lment une position spcifique :
Rechercher un objet dans une collection ArrayList :
Obtenir la taille d'une collection ArrayList :
String s = members.get(0);
int size = members.size();
String s = members.get(2);
int position = members.indexOf(name);
Indexation des collections ArrayList
L'index du premier lment d'une collection ArrayList est 0.
Exemple de collection ArrayList contenant des objets diffrents
Vous pouvez combiner des objets de diffrents types dans une collection ArrayList. Voici
un exemple simple :
ArrayList al = new ArrayList();
al.add('pat');
al.add(10);
al.add(123456.789);
System.out.println(al); // to print the ArrayList
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-33
Copyright 2008, Oracle. Tous droits rservs.
Classe LinkedList
Caractristiques de la classe LinkedList :
Elle est une implmentation de l'interface List.
Elle fournit des mthodes permettant d'extraire, d'insrer et
de supprimer des lments partir des deux extrmits de
la liste.
Elle peut tre cre l'aide de son constructeur sans
argument ou de LinkedList(Collection).
Les classes ArrayList et LinkedList fonctionnent
de manire similaire. La diffrence essentielle rside dans
l'implmentation interne qui affecte les performances.
La classe ArrayList est efficace pour extraire des lments
et pour insrer et supprimer des lments partir de la fin
de la liste.
La classe LinkedList est efficace pour insrer et supprimer
des lments n'importe o dans la liste.
Exemple de collection LinkedList
L'exemple suivant cre une collection ArrayList d'lments numriques et insre de
nouveaux lments des positions spcifiques. A partir de cette collection, il cre ensuite une
collection LinkedList dans laquelle il insre et supprime des lments. Enfin, il parcourt
la liste dans les deux sens.
import java.util.*;
public class TestArrayAndLinkedList {
public static void main(String[] args) {
List<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(1); //1 is autoboxed to new Integer(1)
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(0, 10);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-34
Exemple de collection LinkedList (suite)
arrayList.add(3, 30);
System.out.println("A list of integers in the array
list:");
System.out.println(arrayList);
LinkedList<Object> linkedList = new
LinkedList<Object>(arrayList);
linkedList.add(1, "red");
linkedList.removeLast();
linkedList.addFirst("green");
System.out.println("Display the linked list forwards:");
ListIterator listIterator = linkedList.listIterator();
while (listIterator.hasNext()) {
System.out.print(listIterator.next() + " ");
}
System.out.println();
System.out.println("Display the linked list backwards:");
listIterator = linkedList.listIterator(linkedList.size());
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + " ");
}
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-35
Copyright 2008, Oracle. Tous droits rservs.
Mappes
L'interface Collection reprsente une collection
d'lments stocks dans un ensemble ou une liste.
L'interface Map associe des cls aux lments.
Les cls sont semblables aux index.
Tous les objets peuvent constituer des cls.
Chaque cl est associe une seule valeur.
L'interface Map fournit des mthodes permettant
d'interroger, de mettre jour et d'obtenir une collection de
valeurs et un ensemble de cls.
Mappes
Les mthodes d'interrogation sont containsKey, containsValue, isEmpty et size.
La mthode containsKey(Object key) vrifie si la mappe contient une
correspondance pour la cl indique. La mthode containsValue(Object value)
vrifie si la mappe contient une correspondance pour la valeur indique. La mthode
isEmpty() vrifie si la mappe contient des mappings cl-valeur. La mthode size()
renvoie le nombre de mappings cl-valeur contenus dans la mappe.
Les mthodes de mise jour sont clear, put, putAll et remove. La mthode clear()
supprime tous les mappings de la mappe. La mthode put(Object key, Object
value) associe la valeur Object value la cl Object key dans la mappe. Si la
mappe contenait dj un mapping pour cette cl, la mthode renvoie l'ancienne valeur. La
mthode putAll(Map m) ajoute la mappe indique la mappe en cours. La mthode
remove(Object key) supprime de la mappe les lments correspondant la cl
indique.
Vous pouvez obtenir l'ensemble des cls dfinies dans la mappe l'aide de la mthode
keySet, et l'ensemble des valeurs dfinies dans la mappe l'aide de la mthode values. La
mthode entrySet renvoie une collection d'objets qui implmentent l'interface
Map.Entry, Entry tant une interface interne l'interface Map. Chaque objet de cette
collection est une paire cl-valeur spcifique de la mappe sous-jacente.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-36
Copyright 2008, Oracle. Tous droits rservs.
Types de mappe
HashMap, LinkedHashMap et TreeMap sont trois
implmentations concrtes de l'interface Map.
HashMap est efficace pour rechercher une valeur et pour
insrer ou supprimer un mapping de cl.
LinkedHashMap prend en charge l'organisation des
entres dans la mappe.
TreeMap est efficace pour parcourir les cls dans un
certain ordre de tri.
Types de mappe
Trois types de mappe sont pris en charge : HashMap, LinkedHashMap et TreeMap.
HashMap est efficace pour rechercher une valeur et pour insrer ou supprimer un
mapping de cl.
LinkedHashMap prend en charge l'organisation des entres dans la mappe. Dans une
mappe HashMap, les entres ne sont pas ordonnes. En revanche, les entres
LinkedHashMap peuvent tre extraites soit dans l'ordre o elles ont t insres (ordre
d'insertion), soit dans l'ordre o elles ont t manipules (ordre d'accs), de l'accs le
moins rcent l'accs le plus rcent.
La classe TreeMap implmente la classe SortedMap. Elle est efficace pour parcourir
les cls dans un certain ordre de tri. Vous pouvez trier les cls l'aide de l'interface
Comparable ou de l'interface Comparator. Si vous crez une mappe TreeMap
l'aide du constructeur sans argument de la classe, la mthode compareTo de l'interface
Comparable est utilise pour comparer les lments de la collection, en supposant que
la classe de ces lments implmente l'interface Comparable. Si vous voulez utiliser
un comparateur, vous devez recourir au constructeur TreeMap(Comparator
comparator) pour crer une mappe trie dont les lments sont ordonns en fonction
des cls l'aide de la mthode compare du comparateur.
Remarque : Avant la version JDK 1.2, l'interface Map tait prise en charge dans la classe
java.util.Hashtable. Depuis, la classe Hashtable a t modifie pour tre intgre
Java Collections Framework, mais toutes ses mthodes ont t conserves pour des raisons
de compatibilit. La classe Hashtable implmente l'interface Map et s'utilise comme
HashMap, ceci prs que Hashtable est synchronise.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-37
Copyright 2008, Oracle. Tous droits rservs.
Exemple d'utilisation des mappes
L'exemple ci-aprs cre des mappes HashMap, LinkedHashMap
et TreeMap contenant des mappings tudiant-ge.
Exemple d'utilisation des mappes (suite)
Exemple de mappe
Le programme suivant commence par crer une mappe HashMap dans laquelle la cl est le
nom de l'tudiant, et la valeur, l'ge de l'tudiant. Il cre ensuite une mappe TreeMap partir
de la mappe HashMap et affiche les mappings dans l'ordre croissant des cls. Enfin, il cre
une mappe LinkedHashMap, y ajoute les mmes entres et affiche ces dernires.
import java.util.*;
public class testMap {
public static void main (String[] args) {
// Create a HashMap
Map<String, Integer> hashMap = new HashMap<String,
Integer>();
hashMap.put("Smith", 30);
hashMap.put("Anderson", 31);
hashMap.put("Lewis", 29);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-38
Exemple d'utilisation des mappes (suite)
hashMap.put("Cook", 29);
System.out.println("Display entries in HashMap");
System.out.println(hashMap);
//Create a TreeMap from the HashMap
Map<String, Integer> treeMap = new TreeMap<String,
Integer>(hashMap);
System.out.println("\nDisplay entries in ascending
order of key");
System.out.println(treeMap);
//Create a LinkedHashMap
Map<String, Integer> linkedHashMap = new
LinkedHashMap<String, Integer>(16, 0.75f, true);
linkedHashMap.put("Smith", 30);
linkedHashMap.put("Anderson", 31);
linkedHashMap.put("Lewis", 29);
linkedHashMap.put("Cook", 29);
//Display the age for Lewis
System.out.println("The age for " + "Lewis is " +
linkedHashMap.get("Lewis").intValue());
System.out.println("\nDisplay entries in
LinkedHashMap");
System.out.println(linkedHashMap);
}
}
Remarque 1 : Lorsque vous excutez ce programme, vous remarquez que les entres de la mappe
HashMap sont en ordre alatoire. Les entres de la mappe TreeMap sont dans l'ordre croissant des
cls. Les entres de la mappe LinkedHashMap sont dans l'ordre d'accs, de l'accs le moins rcent
l'accs le plus rcent.
Remarque 2 : L'exemple prcdent utilise des types gnriques, traits dans le chapitre suivant.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-39
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
crer des tableaux Java de primitives
crer des tableaux de rfrences objet
initialiser des tableaux de primitives ou de rfrences objet
traiter les arguments de ligne de commande dans la
mthode main()
utiliser Java Collections Framework pour grer des
collections d'objets
utiliser les interfaces de base de l'API Java Collections
Framework : Collection, Set, List, Map, SortedSet
et SortedMap
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-40
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 11 :
Utiliser les tableaux et les collections
Dans cet exercice, vous allez :
modifier la classe DataMan
crer un tableau contenant les objets Customer,
Company et Individual
ajouter une mthode pour garantir la russite de la
cration et de l'initialisation du tableau
ajouter une mthode pour rechercher un client par
l'intermdiaire d'une valeur d'ID
Prsentation de l'exercice 11 : Utiliser les tableaux et les collections
Dans cet exercice, vous manipulerez des tableaux Java et des classes de collection telles que
la classe java.util.ArrayList. Vous utiliserez galement des arguments de ligne de
commande.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les11, chargez
l'application OrderEntryApplicationLes11, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours jusqu' cet exercice,
chargez l'application OrderEntryApplicationLes11. Dans la fentre Application
Navigator, dveloppez OrderEntryApplicationLes11
OrderEntryProjectLes11 - Application Sources oe, puis cliquez deux
fois sur l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres
jusqu' prsent dans le cours.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Utiliser des types gnriques
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
expliquer comment l'utilisation de types gnriques peut
amliorer la fiabilit et la lisibilit du logiciel
dclarer et utiliser des classes et des interfaces gnriques
dclarer et utiliser des mthodes gnriques
utiliser des caractres gnriques
Objectifs du chapitre
Ce chapitre explique comment dclarer et utiliser des classes, des interfaces et des mthodes
gnriques. Il dcrit galement la manire d'y recourir pour amliorer la fiabilit et la lisibilit
des logiciels.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-3
Copyright 2008, Oracle. Tous droits rservs.
Types gnriques
Les types gnriques sont des types qui peuvent tre
paramtrs.
Les exemples les plus courants sont les conteneurs tels
que ceux de la hirarchie des collections.
L'utilisation de types gnriques vite les conversions
inutiles lors du traitement des objets d'une collection.
Les paramtres des types paramtrs sont indiqus entre
chevrons.
L'utilisation de types gnriques permet d'viter les erreurs
dues des types inattendus au moment de l'excution. Elle
contribue donc rendre le code plus robuste.
List<String> al = new ArrayList<String>();
Types gnriques
Les types gnriques ont t introduits dans le langage Java dans le cadre de Java SE 5.0. Ils
permettent aux applications de crer des classes et des objets qui peuvent fonctionner avec
n'importe quel type dfini.
Avantages des types gnriques : Exemple
Considrons les quatre lignes de code suivantes :
List al = new ArrayList();
al.add("test");
String s = (String) al.get(0);
Integer i = (Integer) al.get(0);
ArrayList contient une liste d'objets non typs, mais pour utiliser ces objets, le programme
doit les convertir dans le type de donnes correct. Si la conversion est incorrecte, le
compilateur ne dtectera pas l'erreur, mais l'excution du code chouera en gnrant une
exception java.lang.ClassCastException. Le fait de convertir les types chaque
utilisation d'un objet de la collection ArrayList est un processus lourd qui risque en outre
de gnrer des erreurs.
Avec des types gnriques, le code ci-dessus peut tre rcrit comme suit :
List<String> al = new ArrayList <String> ();
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-4
Types gnriques (suite)
al.add("test");
String s = al.get(0);
Integer i = al.get(0);
Remarquez la prsence de chevrons (<>) dans le code. Ils sont utiliss pour fournir les
paramtres aux types paramtrs. Il n'est pas ncessaire de convertir le rsultat en type String
puisque la rfrence al est de type List<String> et que sa mthode .get() renvoie donc
forcment un type String.
La compilation du code ci-dessus dans JDK 1.5 produit une erreur de type au niveau de la
dernire ligne, lors de la tentative de conversion d'un type String en type Integer. Ce type
d'erreur est dsormais dtect ds la compilation.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-5
Copyright 2008, Oracle. Tous droits rservs.
Dclarer des classes gnriques
Prenons l'exemple d'une classe simple appele
ObjectHolder qui peut contenir n'importe quel type
d'objet Java.
Dclaration de la classe ObjectHolder :
ObjectHolder est une classe paramtre.
O est un paramtre de type.
O sert de marque de rservation pouvant contenir
n'importe quel type d'objet.
public class ObjectHolder<O> { }
Dclarer des classes gnriques
La classe ObjectHolder peut contenir n'importe quel type d'objet Java. Elle fournit des
mthodes permettant d'obtenir (get) et de dfinir (set) l'objet en cours.
public class ObjectHolder<O> {
private O anyObject;
public O getObject(); {
return anyObject;
}
public void setObject(O anyObject) {
this.anyObject = anyObject;
}
public String toString() {
return anyObject.toString();
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-6
Copyright 2008, Oracle. Tous droits rservs.
Utiliser les classes gnriques
Pour dfinir une instance de type String de la classe
ObjectHolder :
La substitution de type est utilise pour remplacer le
paramtre de type O par le type String.
ObjectHolder<String> stringHolder = new
ObjectHolder<String>();
Utiliser les classes gnriques
Dans l'exemple ci-aprs, la classe ObjectHolderClient utilise la classe gnrique
ObjectHolder pour crer un objet stringHolder destin contenir un type String,
ainsi qu'un objet urlHolder destin contenir une URL :
public class ObjectHolderClient {
public static void main(String [] args) throws
Exception {
ObjectHolder<String> stringHolder = new
ObjectHolder<String>();
stringHolder.setObject(new String("String"));
System.out.println(stringHolder.toString());
ObjectHolder<URL> urlHolder = new
ObjectHolder<URL>();
urlHolder.setObject(new
URL("http://www.oracle.com/technology/
products/jdev/11/index.html"));
System.out.println(urlHolder,toString());
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-7
Copyright 2008, Oracle. Tous droits rservs.
Mthodes gnriques
Vous pouvez galement utiliser des types gnriques
pour dclarer des mthodes gnriques.
Les paramtres de type affectent uniquement la
mthode gnrique dclare avec ces paramtres.
Une classe non gnrique peut contenir la fois des
mthodes gnriques et des mthodes non
gnriques.
Pour appeler une mthode gnrique, ajoutez le type
rel entre chevrons devant le nom de la mthode.
public static <E> void print(E[] list)
GenericMethod.<String>print(strings);
Mthodes gnriques
Exemple de mthode gnrique
Le programme ci-aprs dclare une mthode gnrique print pour afficher un tableau
d'objets. Il appelle ensuite cette mthode en transmettant d'abord un tableau d'objets
Integer, puis un tableau d'objets String :
public class GenericMethod {
public static void main (String[] args) {
Integer[] integers = {1,2,3,4,5};
String[] strings = {"Dracula", "Titanic",
"Deliverance", "Casablanca"};
GenericMethod.<Integer>print(integers);
GenericMethod.<String>print(strings);
}
public static <E> void print(E[] list) {
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-8
Mthodes gnriques (suite)
for (int i = 0; i < list.length; i++)
System.out.print(list[i] + " ");
System.out.println();
}
}
Exemple : Utilisation d'une mthode gnrique avec une collection
L'exemple suivant utilise la mthode gnrique max pour calculer la plus grande valeur d'une
collection d'lments d'un type inconnu A.
class Collections {
public static <A extends Comparable<A>> A
max(Collection< A > xs) {
Iterator< A > xi = xs.iterator();
A w = xi.next();
while (xi.hasNext()) {
A w = xi.next();
if (w.compareTo(x) < 0) w = x;
}
return w;
}
}
La mthode max est dclare avec un seul paramtre nomm A. Ce paramtre est une marque de
rservation pour le type d'lment de la collection traite par la mthode. Ce paramtre de type
est soumis une contrainte : il doit s'agir d'un sous-type de Comparable<A>.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-9
Copyright 2008, Oracle. Tous droits rservs.
Caractres gnriques
Le point d'interrogation ? est un caractre gnrique.
? reprsente un type Java quelconque. C'est une marque
de rservation qui peut tre remplace par n'importe quel
type.
List<?> dsigne une liste dont les objets sont de type
inconnu.
L'utilisation de caractres gnriques est ncessaire
puisque les objets d'un paramtre de type ne peuvent pas
tre convertis en objets d'un autre paramtre.
List<?> anyObjects = null;
Caractres gnriques
Les paramtres de type gnrique ne sont pas limits des classes spcifiques dans Java. Le
langage Java permet d'utiliser des caractres gnriques pour dfinir des contraintes
concernant le type des paramtres admis par un objet gnrique donn. Les caractres
gnriques sont des paramtres de type de la forme "?".
Comme le type d'lment exact d'un objet dfini avec un caractre gnrique est inconnu, des
restrictions sont appliques au type des mthodes pouvant tre appeles sur cet objet. Un
caractre gnrique non restreint est utilis ci-dessus dans le code List<?> qui dsigne une
liste dont les objets sont de type inconnu. Les mthodes qui acceptent une telle liste comme
argument peuvent s'appliquer n'importe quel type de liste, quel que soit le type du
paramtre. La lecture de cette liste va renvoyer des objets de type Object et l'criture
d'lments non nuls dans la liste n'est pas autorise puisque le type du paramtre est inconnu.
Pour prciser la limite suprieure d'un lment gnrique, vous utilisez le mot-cl extends
et indiquez la classe dont le type gnrique est un sous-type. L'lment gnrique doit donc
tendre la classe indique ou implmenter l'interface de celle-ci. Ainsi, List<? extends
Number> signifie que la liste contient des objets d'un type inconnu qui tend la classe
Number. Par exemple, il peut s'agir de List<Float> ou de List<Number>.
L'utilisation de caractres gnriques est ncessaire puisque les objets d'un paramtre de type
ne peuvent pas tre convertis en objets d'un autre paramtre. Aucun des deux types
List<Float> et List<Number> n'est un sous-type de l'autre (bien que Float soit un
sous-type de Number). Le code qui traite List<Number> ne fonctionne donc pas avec
List<Float>. Les caractres gnriques constituent une solution car ils interdisent les
oprations qui violeraient la scurit des types.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-10
Caractres gnriques (suite)
Pour prciser la limite infrieure d'un lment gnrique, vous utilisez le mot-cl super et
indiquez la classe dont le type gnrique est un supertype. Ainsi, List<? super Number>
pourrait tre List<Number> ou List<Object>. La lecture de la liste renvoie des objets de
type Object. Tout lment de type Number peut tre ajout la liste puisqu'il s'agit d'un type
valide pouvant tre stock dans la liste.
Exemple : Utiliser une mthode gnrique et des caractres gnriques
La mthode suivante affiche tous les lments d'une collection. Notez que Collection<?>
est une collection de type inconnu.
void printCollection(Collection<?> c) {
for(Object o:c) {
System.out.println(o);
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-11
Copyright 2008, Oracle. Tous droits rservs.
Types bruts
Ce sont des types non paramtrs.
Ils sont autoriss dans les versions JDK 1.5 et
suivantes pour des raisons de compatibilit
descendante.
Ils sont compatibles avec toutes les instanciations du
type gnrique en matire d'affectation.
ArrayList rawlist = new ArrayList();
Types bruts
Un type gnrique sans argument de type est appel type brut. Les types bruts sont autoriss
dans le langage, essentiellement pour faciliter l'interfaage avec le code non gnrique des
versions plus anciennes. Par exemple, si vous avez une ancienne mthode non gnrique qui
admet un argument de type List, vous pouvez lui transmettre un type paramtr tel que
List<String>. Inversement, si vous avez une mthode qui renvoie un type List, vous
pouvez affecter son rsultat une variable de rfrence de type List<String> ds lors que
vous savez, d'une manire ou d'une autre, que la liste renvoye est effectivement une liste de
chanes.
Les types bruts sont compatibles avec toutes les instanciations du type gnrique en matire
d'affectation. L'affectation d'une instanciation de type gnrique au type brut correspondant
est autorise et ne gnre pas d'avertissement. L'affectation du type brut une instanciation
gnre un avertissement signalant que la conversion n'est pas vrifie :
ArrayList rawList = new ArrayList():
ArrayList<String> stringList = new
ArrayList<String>();
rawList = stringList;
stringList = rawList; //unchecked warning
L'avertissement "unchecked" indique que le compilateur ne sait pas si le type brut
ArrayList contient effectivement des chanes. Un ArrayList de type brut peut en
principe contenir des objets de n'importe quel type, comme le type gnrique
ArrayList<Object>.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-12
Copyright 2008, Oracle. Tous droits rservs.
Elimination de type
Le compilateur implmente les types gnriques au moyen
d'une limination de type.
Toutes les informations lies aux paramtres et aux
arguments du type sont limines.
Ce processus peut tre dcrit comme une traduction
du code source Java gnrique en code Java
standard.
List<String> devient List
Set<Long> devient Set
Map<String> devient Map
Le compilateur effectue les conversions vers le type
appropri.
Elimination de type
L'limination de type est un processus automatique interne au compilateur qui efface
(limine) toutes les informations lies aux types gnriques. Les informations de type figurant
entre chevrons sont supprimes. Ainsi, un type paramtr tel que List<String> est
converti en List. Toutes les autres utilisations de variables de type sont remplaces par la
limite suprieure de la variable de type (gnralement Object). Lorsque le code rsultant
n'est pas correct au niveau du type, une conversion est effectue vers le type appropri.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-13
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
utiliser les types gnriques pour viter des erreurs
de conversion et rendre le code plus robuste
dclarer un type gnrique dans une classe, une interface
ou une mthode
utiliser des caractres gnriques pour dfinir des
contraintes concernant le type des paramtres admis par
un objet gnrique donn
identifier les types bruts (types non paramtrs qui sont
autoriss des fins de compatibilit descendante)
dcrire le processus d'limination de type utilis par le
compilateur pour implmenter les types gnriques
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Structurer le code l'aide
de classes abstraites et d'interfaces
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
dfinir des classes abstraites
dfinir des mthodes abstraites
dfinir des interfaces
identifier les similitudes et les diffrences entre une classe
abstraite et une interface
implmenter des interfaces
Objectifs du chapitre
Dans le langage Java, vous pouvez utiliser des interfaces la place d'hritages multiples. Ce
chapitre explique comment procder. Il montre galement comment dfinir et utiliser des
classes abstraites et des mthodes abstraites en Java.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-3
Copyright 2008, Oracle. Tous droits rservs.
Classes abstraites
Une classe abstraite ne peut pas tre instancie.
Les mthodes abstraites doivent tre implmentes par des
sous-classes.
Les interfaces prennent en charge l'hritage multiple en ce
qui concerne le type.
Superclasse
abstraite
Sous-classes
concrtes
InventoryItem
Movie VCR
Classes abstraites
En langage Java, vous pouvez dfinir des classes qui sont des abstractions de haut niveau
d'objets rels. Ces classes de haut niveau permettent au concepteur de contrler l'aspect des
sous-classes ainsi que les mthodes qui sont obligatoires dans ces sous-classes.
Une classe abstraite est simplement une classe qui ne peut pas tre instancie. Seules ses sous-
classes non abstraites peuvent tre instancies. Par exemple, la classe InventoryItem ne
contient pas suffisamment de dtails significatifs pour l'entreprise. Elle peut correspondre un
film ou un lecteur de DVD. En revanche, elle constitue une collection de donnes et de
comportements communs tous les articles qui peuvent tre lous.
Mthodes abstraites
Les mthodes abstraites vont au-del de l'hritage standard. Une mthode abstraite est dfinie
uniquement dans une classe abstraite et doit tre implmente par une sous-classe. Grce
cette technique, le concepteur de la classe peut dfinir prcisment les comportements qu'une
sous-classe doit pouvoir adopter. En revanche, il ne peut pas dterminer comment ces
comportements seront implments. Les classes abstraites peuvent contenir des sous-classes
galement dclares comme tant abstraites. Le cas chant, les mthodes abstraites ne seront
pas implmentes par ces sous-classes abstraites.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-4
Classes abstraites (suite)
Interfaces
Une interface est la spcification d'un ensemble de mthodes, semblable une classe abstraite.
Outre les lments offerts par une classe abstraite, une interface peut fournir de faon efficace
des hritages multiples. Une classe peut implmenter un nombre illimit d'interfaces, mais ne
peut tendre qu'une seule superclasse.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-5
Copyright 2008, Oracle. Tous droits rservs.
Crer des classes abstraites
Utilisez le mot-cl abstract pour dclarer une classe comme
tant abstraite.
public abstract class InventoryItem {
private float price;
public boolean isRentable()
}
public class Movie
extends InventoryItem {
private String title;
public int getLength()
public class Vcr
extends InventoryItem {
private int serialNbr;
public void setTimer()
Crer des classes abstraites
Java fournit le mot-cl abstract, qui indique qu'une classe est abstraite. Par exemple, la
classe InventoryItem de la diapositive ci-dessus a t dclare comme abstraite.
public abstract class InventoryItem {

}
InventoryItem est dclare comme abstraite, car elle ne possde pas suffisamment de
dtails pour reprsenter un objet complet et autonome. L'utilisateur ne doit pas tre autoris
crer des objets InventoryItem, car InventoryItem n'est qu'une classe partielle. La
classe InventoryItem existe uniquement pour pouvoir tre tendue par des sous-classes
plus spcialises, telles que Movie et Vcr.
Que se passe-t-il si vous tentez d'instancier une classe abstraite ?
Si vous tentez de crer un objet InventoryItem quelque part dans le programme, le
compilateur indique une erreur :
InventoryItem i = new InventoryItem ();// Compiler error
L'utilisateur peut uniquement crer des objets correspondant des sous-classes concrtes :
Movie m = new Movie(); // This is fine
Vcr v = new Vcr(); // This is fine too
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-6
Copyright 2008, Oracle. Tous droits rservs.
Mthodes abstraites
Une mthode abstraite :
est une marque de rservation d'implmentation
fait partie d'une classe abstraite
doit tre redfinie dans une sous-classe concrte
Chaque sous-classe concrte peut implmenter la mthode
diffremment.
Mthodes abstraites
Lors de la conception d'une hirarchie d'hritage, il existe en gnral des comportements que
toutes les classes adoptent, chacune sa manire. Par exemple, dans le cadre d'une activit de
location de DVD, le commerant doit savoir pour chaque article s'il peut ou non tre lou. Par
ailleurs, chaque type d'article dtermine si ce dernier peut tre lou d'une manire spcifique.
Pour reprsenter ce concept en langage Java, la mthode commune "cet article peut-il tre
lou ?" est dfinie dans la classe InventoryItem. Cependant, il n'existe pas
d'implmentation concrte de cette mthode dans InventoryItem, car chaque type
d'article possde ses propres exigences. Une approche pourrait consister laisser la mthode
vide dans la classe InventoryItem :
public abstract class InventoryItem {
public boolean isRentable() {
return true;
}
}
Cette approche n'est pas satisfaisante, car elle ne force pas chaque sous-classe concrte
redfinir la mthode. Par exemple, si l'utilisateur oublie de redfinir la mthode
isRentable() dans la classe Vcr, que se passe-t-il s'il appelle la mthode sur un objet
Vcr ? La mthode isRentable() de InventoryItem est appele et renvoie toujours
true. Il ne s'agit pas du rsultat souhait. La solution consiste dclarer la mthode comme
abstraite, comme indiqu dans la diapositive suivante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-7
Copyright 2008, Oracle. Tous droits rservs.
Dfinir des mthodes abstraites
Utilisez le mot-cl abstract pour dclarer une
mthode comme tant abstraite :
Indiquez uniquement la signature de la mthode.
Assurez-vous que la classe est galement abstraite.
Quelle en est l'utilit ?
Vous pouvez dclarer la structure d'une classe sans
fournir l'implmentation complte de chaque mthode.
public abstract class InventoryItem {
public abstract boolean isRentable();

Dfinir des mthodes abstraites


Pour dclarer une mthode comme tant abstraite en langage Java, faites prcder le nom de
la mthode du mot-cl abstract, de la faon suivante :
public abstract class InventoryItem {
abstract boolean isRentable();

}
Lorsque vous dclarez une mthode abstract, vous devez simplement indiquer la
signature de la mthode, qui comprend son nom, la liste de ses arguments et le type de
donnes renvoy. Il n'est pas ncessaire de fournir le corps de la mthode. Chaque sous-classe
concrte doit redfinir la mthode et fournir son propre corps.
A prsent que la mthode est dclare comme tant abstraite, une sous-classe doit fournir une
implmentation de cette mthode.
Les classes abstraites peuvent contenir des mthodes qui ne sont pas dclares comme
abstraites. Ces mthodes peuvent tre redfinies par les sous-classes, mais cela n'est pas
obligatoire.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-8
Copyright 2008, Oracle. Tous droits rservs.
Dfinir et utiliser des interfaces
Une interface est semblable une classe totalement
abstraite.
Toutes ses mthodes sont abstraites.
Toutes les variables sont public static final.
Une interface rpertorie un ensemble de signatures de
mthode, sans aucun code.
Toute classe qui implmente l'interface doit fournir les
dtails du code de toutes les mthodes de l'interface.
Une classe peut implmenter de nombreuses
interfaces, mais ne peut tendre qu'une seule classe.
Dfinir et utiliser des interfaces
Une interface est semblable une classe abstraite, ceci prs qu'elle ne peut comporter ni
variable d'instance, ni mthode concrte. Il s'agit d'une collection de constantes et de
dclarations de mthodes abstraites, c'est--dire de variables static final. C'est en
quelque sorte un contrat que la sous-classe doit respecter.
Toute classe qui implmente une interface doit implmenter tout ou partie des mthodes
indiques dans cette interface. Si elle n'implmente pas toutes les mthodes, la classe est une
classe abstraite. Une sous-classe de la classe abstraite doit implmenter les mthodes
abstraites restantes.
Une classe peut implmenter de nombreuses interfaces, mais ne peut tendre qu'une seule
classe. Le langage Java ne prend pas en charge l'hritage partir de classes multiples, mais il
prend en charge l'implmentation d'interfaces multiples. Par exemple :
class Movie extends InventoryItem implements Sortable, Listable {

}
Comme cela a t illustr prcdemment, la classe Movie hrite de tous les attributs et
comportements de InventoryItem. En outre, elle doit prsent fournir les dtails
d'implmentation de toutes les mthodes dsignes dans les interfaces Sortable et
Listable. Ces mthodes peuvent tre utilises par d'autres classes pour implmenter des
comportements spcifiques (comme une routine de tri).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-9
Copyright 2008, Oracle. Tous droits rservs.
Exemples d'interfaces
Les interfaces dcrivent un aspect du comportement requis
par diffrentes classes.
Par exemple, les classes qui peuvent tre pilotes prennent
en charge l'interface "pilotable" (Steerable).
Les classes peuvent tre sans lien entre elles.
Pilotable Non pilotable
Exemples d'interfaces
Les interfaces dcrivent un aspect du comportement requis par diffrentes classes. Le nom
d'une interface est souvent un adjectif, par exemple Steerable, Traceable ou
Sortable. Cela le distingue du nom d'une classe, qui est le plus souvent un substantif, tel
que Movie ou Customer.
L'interface Steerable peut inclure des mthodes telles que turnRight(),
turnLeft() ou returnCenter(). Toute classe qui doit pouvoir tre "pilotable" peut
implmenter l'interface Steerable.
Les classes qui implmentent une mme interface peuvent tre totalement dnues de lien
entre elles. Elles peuvent n'avoir qu'une seule chose en commun, savoir la ncessit d'tre
"pilotables".
Par exemple, les packages Java standard incluent un certain nombre d'interfaces standard,
telles que Runnable, Cloneable et ActionListener. Ces interfaces sont
implmentes par tous les types de classe qui n'ont rien d'autre en commun que la ncessit
d'tre Cloneable ou d'implmenter un comportement ActionListener.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-10
Copyright 2008, Oracle. Tous droits rservs.
Crer des interfaces
Utilisez le mot-cl interface :
Toutes les mthodes sont public abstract.
Toutes les variables sont public static final.
public interface Steerable {
int MAXTURN = 45;
void turnLeft(int deg);
void turnRight(int deg);
}
Crer des interfaces
Vous pouvez dfinir une interface l'aide du mot-cl interface. Toutes les mthodes
dsignes dans une interface sont implicitement public et abstract. Toutes les variables
dsignes dans une interface sont implicitement public, static et final. Autrement dit,
il s'agit de constantes.
Ainsi, la dfinition de l'interface illustre dans la diapositive ci-dessus est quivalente la
dfinition ci-aprs, o les mots-cls public, static, final et abstract ont t
indiqus explicitement :
public interface Steerable {
public static final int MAXTURN = 45;
public abstract void turnLeft(int deg);
public abstract void turnRight(int deg);
}
Etant donn que les mthodes d'une interface sont implicitement public et abstract, il
est courant de ne pas utiliser ces modificateurs d'accs. Il en va de mme des variables. Etant
donn qu'elles sont implicitement public, static et final (il s'agit donc de constantes),
il n'est pas ncessaire d'indiquer ces modificateurs.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-11
Copyright 2008, Oracle. Tous droits rservs.
Comparaison entre interfaces
et classes abstraites
Interface
Classe
abstraite
Aucune restriction Les constructeurs sont
appels par des sous-
classes via le chanage de
constructeurs. Une classe
abstraite ne peut pas tre
instancie l'aide de
l'oprateur new.
Aucune restriction
Pas de constructeurs. Une
interface ne peut pas tre
instancie l'aide de
l'oprateur new.
Constructeurs
Toutes les
mthodes doivent
tre public
abstract.
Toutes les variables
doivent tre
public static
final.
Mthodes Variables
Comparaison entre interfaces et classes abstraites
Une interface peut tre utilise de la mme manire qu'une classe abstraite, mais sa
dclaration est diffrente. Le tableau de la diapositive ci-dessus rcapitule les principales
diffrences.
Les classes abstraites comme les interfaces peuvent tre utilises pour modliser des
fonctionnalits communes. Comment choisir entre les deux solutions ? En gnral, une
relation est un(e) forte qui dcrit clairement une relation parent-enfant doit tre modlise
l'aide de classes. Par exemple, un client est une personne, et la relation entre les deux doit tre
modlise via l'hritage de classe. Une relation est un(e) faible, galement appele relation est
une sorte de, indique qu'un objet possde une proprit particulire. Elle peut tre modlise
l'aide d'interfaces. Par exemple, toutes les chanes sont comparables, de sorte que la classe
String implmente l'interface Comparable.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-12
Copyright 2008, Oracle. Tous droits rservs.
Implmenter des interfaces
Utilisez le mot-cl implements :
public class Yacht extends Boat
implements Steerable {
public void turnLeft(int deg) {}
public void turnRight(int deg) {}
}
Implmenter des interfaces
La diapositive ci-dessus prsente un exemple de classe Yacht qui implmente l'interface
Steerable. La classe Yacht doit implmenter l'ensemble ou une partie des mthodes de
toute interface qu'elle implmente. Dans le cas prsent, Yacht peut implmenter
turnLeft() et turnRight().
Une classe peut implmenter plusieurs interfaces. Il suffit d'indiquer la liste de ces interfaces,
spares par des virgules. Examinons l'exemple suivant :
public class Yacht
extends Boat
implements Steerable, Taxable {

}
Ici, la classe Yacht implmente deux interfaces, savoir Steerable et Taxable. Cela
signifie que la classe Yacht doit implmenter toutes les mthodes dclares dans les
interfaces Steerable et Taxable.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-13
Copyright 2008, Oracle. Tous droits rservs.
Tri : Exemple concret
Caractristiques du tri :
Utilis par plusieurs classes non lies
Contient un ensemble connu de mthodes
Est ncessaire pour trier n'importe quel type d'objet
Utilise des rgles de comparaison connues uniquement
de l'objet pouvant tre tri
Permet la rutilisation du code
Tri : Exemple concret
Le tri est un exemple classique d'utilisation d'une interface. De nombreuses classes totalement
indpendantes doivent utiliser un tri. Il s'agit d'un processus bien connu et bien dfini, qu'il
n'est pas ncessaire de rcrire chaque fois.
Une routine de tri doit permettre de trier n'importe quel objet, de la manire adapte cet
objet particulier. L'approche de programmation traditionnelle conduirait crire un certain
nombre de sous-programmes et un arbre de dcision sans cesse croissant pour grer chaque
nouveau type d'objet. Grce aux techniques et interfaces de programmation oriente objet,
vous pouvez liminer tous les soucis de maintenance lis l'approche traditionnelle.
L'interface Sortable dsigne les mthodes requises pour faire en sorte que le tri fonctionne
sur chaque type d'objet devant tre tri. Chaque classe implmente l'interface en fonction de
ses besoins spcifiques en termes de tri. Seule la classe doit connatre ses rgles de
comparaison ou de tri.
L'implmentation du tri selon une approche oriente objet fournit un modle qui optimise la
rutilisation du code. Le code du tri est totalement isol des objets qui implmentent le tri.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-14
Copyright 2008, Oracle. Tous droits rservs.
Prsentation des classes
Cres par l'expert en tri :
Cres par l'expert en cinma :
public class
MyApplication
public class Movie
implements Sortable
public interface
Sortable
public abstract
class Sort
Prsentation des classes
La diapositive ci-dessus prsente les trois classes et l'interface unique impliques dans le tri
d'une liste de DVD. Les classes sont rparties en deux catgories :
Les classes cres par l'expert en tri, qui sait tout sur les algorithmes de tri, mais rien sur
les objets individuels que les utilisateurs peuvent tre amens trier.
Les classes cres par l'expert en cinma, qui sait tout sur les films, mais rien sur les
algorithmes de tri.
Vous allez voir comment les interfaces peuvent dissocier ces deux types de dveloppeur,
permettant ainsi la sparation des domaines fonctionnels distincts.
Classes et interfaces utilises dans l'exemple
L'interface Sortable dclare une mthode : compare(). Cette mthode doit tre
implmente par toute classe qui souhaite utiliser les mthodes de la classe Sort.
La classe Sort est une classe abstract qui contient sortObjects(), une mthode
permettant de trier un tableau d'objets. La plupart des algorithmes de tri fonctionnent par
comparaison de paires d'objets. sortObjects() effectue cette comparaison en
appelant la mthode compare() sur les objets du tableau.
La classe Movie implmente l'interface Sortable. Elle contient une mthode
compare() qui compare deux objets Movie.
MyApplication reprsente une application qui doit trier une liste de films. Il peut
s'agir d'un panneau qui affiche une liste de films trier.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-15
Copyright 2008, Oracle. Tous droits rservs.
Fonctionnement du tri
MyApplication
transmet un tableau
de films
Sort.sortObjects().
sortObjects()
demande un film
de se comparer
un autre film.
Le film renvoie
le rsultat de la
comparaison.
La mthode
sortObjects()
renvoie la liste
trie.
1
2 3
4
Sort
Movie
MyApplication
Fonctionnement du tri
La diapositive ci-dessus illustre le processus de tri d'une liste d'objets. La procdure est la
suivante :
1. L'application principale transmet un tableau de films la mthode
Sort.sortObjects().
2. La mthode sortObjects() trie le tableau. Chaque fois qu'elle doit comparer deux
films, elle appelle la mthode compare() d'un film et la transmet en indiquant l'autre
film comme paramtre.
3. Le rsultat de la comparaison est renvoy la mthode sortObjects().
4. La mthode sortObjects() renvoie la liste trie.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-16
Copyright 2008, Oracle. Tous droits rservs.
Interface Sortable
Elle dsigne la mthode compare() :
public interface Sortable {
// compare(): Compare this object to another object
// Returns:
// 0 if this object is equal to obj2
// a value < 0 if this object < obj2
// a value > 0 if this object > obj2
int compare(Object obj2);
}
Interface Sortable
L'interface Sortable dsigne toutes les mthodes et constantes requises pour qu'une classe
puisse tre trie. Dans l'exemple de la diapositive ci-dessus, la seule mthode est
compare().
Toute classe qui implmente Sortable doit fournir une mthode compare() qui accepte
un argument Object et qui renvoie une valeur de type int.
Le rsultat de la mthode compare() est le suivant :
Remarque : La classe qui implmente la mthode compare() est charge de dterminer la
signification de "suprieur ", "infrieur " et "gal ".
Valeur Signification
Entier positif Cet objet est suprieur l'argument.
Entier ngatif Cet objet est infrieur l'argument.
Zro Cet objet est gal l'argument.


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-17
Copyright 2008, Oracle. Tous droits rservs.
Classe Sort
Contient la mthode sortObjects() :
public abstract class Sort {
public static void sortObjects(Sortable[] items) {
// Step through the array comparing and swapping;
// do this length-1 times
for (int i = 1; i < items.length; i++) {
for (int j = 0; j < items.length - 1; j++) {
if (items[j].compare(items[j+1]) > 0) {
Sortable tempitem = items[j+1];
items[j+1] = items[j];
items[j] = tempitem; } } } } }
Classe Sort
La classe Sort contient la mthode sortObjects() qui trie un tableau d'objets
Sortable. Cette mthode accepte un tableau d'objets Sortable comme argument. Il est
possible de dsigner un type d'interface comme argument d'une mthode, ce qui permet de
s'assurer que la mthode ne sera sollicite que pour trier des objets qui implmentent
l'interface Sortable. Dans l'exemple, la mthode sortObjects() excute un simple tri
qui balaie plusieurs fois le tableau et qui compare chaque lment au suivant, en effectuant les
permutations ncessaires.
Lorsque la mthode sortObjects() doit comparer deux lments du tableau, elle appelle
compare() sur l'un des deux lments, en transmettant l'autre comme argument.
Notez que la mthode sortObjects() ne sait rien sur le type d'objet qu'elle trie. Elle sait
seulement qu'il s'agit d'objets Sortable et qu'elle peut donc appeler la mthode
compare() sur n'importe lequel. Elle sait galement interprter les rsultats.
L'interface en tant que contrat
Vous pouvez considrer une interface comme un contrat entre l'objet qui l'utilise et celui qui
l'implmente. Dans l'exemple considr, le contrat est le suivant :
La classe Movie (l'implmenteur) s'engage implmenter une mthode appele
compare(), avec les paramtres et la valeur renvoye indiqus par l'interface.
La classe Sort (l'utilisateur) s'engage trier une liste d'objets dans l'ordre correct.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-18
Copyright 2008, Oracle. Tous droits rservs.
Classe Movie
Elle implmente l'interface Sortable :
public class Movie extends InventoryItem
implements Sortable {
String title;
public int compare(Object movie2) {
String title1 = this.title;
String title2 = ((Movie)movie2).getTitle();
return(title1.compareTo(title2));
}
}
Classe Movie
La classe Movie implmente l'interface Sortable. Pour appeler la mthode
Sort.sortObjects(), elle doit implmenter l'interface Sortable, et dans ce cas, elle
doit galement implmenter la mthode compare() selon les termes du contrat. La mthode
compare() utilise un objet comme argument et le compare l'objet pour lequel elle a t
appele.
Dans ce cas, la mthode String compareTo() est utilise pour comparer les deux chanes
de titre. Cette mthode renvoie un entier positif, un entier ngatif ou zro, selon l'ordre relatif
des deux objets. Lors de l'implmentation de la mthode compare(), vous pouvez comparer
les deux objets de la faon souhaite, ds lors que vous renvoyez un entier qui indique l'ordre
de tri relatif.
Remarque : Dans l'exemple, movie2 est de type Object et doit donc tre converti en
Movie avant tout appel de getTitle() pour obtenir son titre.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-19
Copyright 2008, Oracle. Tous droits rservs.
Utiliser le tri
Appelez la mthode Sort.sortObjects(Sortable [])
avec un tableau d'objets Movie comme argument :
class myApplication {
Movie[] movielist;
// build the array of Movie
Sort.sortObjects(movielist);
}
Utiliser le tri
Pour utiliser le tri, il suffit d'appeler la mthode Sort.sortObjects(Sortable [])
partir de l'application, en transmettant le tableau des objets que vous souhaitez trier. Chaque
objet que vous souhaitez trier doit implmenter l'interface Sortable et fournir la mthode
compare() requise. Seule la classe qui implmente l'interface Sortable sait exactement
comment ses objets sont tris.
Vous pouvez rendre "triables" d'autres types d'objet de votre application. Par exemple, vous
pouvez faire en sorte que les classes Rental et Member implmentent l'interface
Sortable, et ajouter une mthode compare() chaque classe. Vous pouvez ensuite trier
un tableau d'objets Rental ou Member en appelant la mthode Sort.sortObjects().
La mthode compare() de chaque classe peut tre totalement diffrente ou
fondamentalement identique. La seule exigence est que les mthodes compare() doivent
renvoyer un entier pour indiquer l'ordre de tri relatif des objets.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-20
Copyright 2008, Oracle. Tous droits rservs.
Utiliser instanceof avec des interfaces
Utilisez l'oprateur instanceof pour dterminer si un
objet implmente une interface.
Utilisez la conversion en un type plus spcifique pour
appeler les mthodes dfinies dans l'interface :
public void aMethod(Object obj) {

if (obj instanceof Sortable)


((Sortable)obj).compare(obj2);
}
Utiliser instanceof avec des interfaces
Dans le chapitre sur l'hritage, vous avez appris utiliser l'oprateur instanceof pour
dterminer si le type d'un objet lors de l'excution correspondait un type donn.
Vous pouvez galement utiliser instanceof avec les interfaces, comme indiqu dans la
mthode de la diapositive. La mthode utilise un argument dont le type lors de la compilation
est Object. Lors de l'excution, l'argument peut tre n'importe quel type d'objet hrit de
Object. L'oprateur instanceof teste l'objet afin de dterminer s'il s'agit d'un type
instanceof Sortable. Autrement dit, il vrifie si l'objet prend en charge l'interface
Sortable.
Cela signifie que vous n'avez pas besoin de savoir quel type d'objet vous traitez. Il vous suffit
de savoir si la mthode compare() peut tre appele sur l'objet.
Si l'objet implmente l'interface Sortable, vous convertissez la rfrence objet en
Sortable pour que le compilateur vous permette d'appeler la mthode compare().
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-21
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
dfinir des classes abstraites
dfinir des mthodes abstraites
dfinir des interfaces
identifier les similitudes et les diffrences entre une classe
abstraite et une interface
implmenter des interfaces
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-22
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 13 : Structurer le code
l'aide de classes abstraites et d'interfaces
Dans cet exercice, vous allez :
crer une interface et une classe abstraite
implmenter l'interface java.lang.Comparable
pour trier des objets
tester les classes abstraites et les classes d'interface
Prsentation de l'exercice 13
L'objectif de cet exercice est d'apprendre crer et utiliser une classe abstraite, ainsi qu'
crer et utiliser une interface.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les13, chargez
l'application OrderEntryApplicationLes13, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours ce stade, dveloppez
OrderEntryApplicationLes13 OrderEntryProjectLes13 -
Application Sources oe dans Application Navigator, puis cliquez deux fois sur
l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres jusqu'
prsent dans le cours.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Gnrer et dtecter les exceptions
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
expliquer les concepts de base relatifs au traitement des
exceptions
crire du code permettant de dtecter et de traiter les
exceptions
crire du code permettant de gnrer des exceptions
crer vos propres exceptions
Objectifs du chapitre
De nombreuses mthodes Java de la bibliothque de classes du kit JDK (Java Development
Kit) gnrent une exception lorsqu'elles rencontrent un problme grave qu'elles ne savent pas
comment grer. Ce chapitre explique le fonctionnement des exceptions en langage Java et la
manire de les traiter dans vos applications.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-3
Copyright 2008, Oracle. Tous droits rservs.
Qu'est-ce qu'une exception ?
Une exception est un vnement inattendu.
Qu'est-ce qu'une exception ?
Une exception est un vnement qui se produit lors de l'excution d'un programme et qui
interrompt le flux normal des instructions. Par exemple, une tentative d'accs un lment
situ hors des limites d'un tableau, une tentative de division par zro, ou encore une tentative
d'accs une URL avec un protocole invalide, reprsentent autant d'exceptions.
Qu'est-ce qu'une erreur ?
En Java, une erreur est une condition anormale qui ne permet pas de rcupration. Par
exemple, elle peut tre due une erreur interne dans la JVM (Java Virtual Machine) ou un
manque de mmoire.
Quelle est la diffrence ?
Le code peut traiter une exception et poursuivre son excution. En revanche, si une erreur se
produit, le programme doit s'arrter.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-4
Copyright 2008, Oracle. Tous droits rservs.
Traitement des exceptions par Java
1. Une mthode gnre une exception.
2. Un gestionnaire dtecte l'exception.
Oui
Non
Gestionnaire
pour cette
exception ?
Objet Exception
Traitement des exceptions par Java
Lorsqu'une exception se produit dans une mthode Java, cette dernire cre un objet
Exception et le transfre au systme d'excution. Ce processus est appel gnration d'une
exception. L'objet Exception contient des informations sur l'exception, notamment son
type et l'tat du programme dans lequel l'erreur s'est produite.
Le systme d'excution parcourt toutes les mthodes successives de la pile d'appels afin d'en
trouver une susceptible de traiter ce type d'exception. Dans la terminologie Java, cette
mthode est appele dtection de l'exception.
Si le systme d'excution ne trouve pas de gestionnaire d'exceptions appropri, l'ensemble du
programme s'arrte.
Les diapositives suivantes prsentent quelques-uns des avantages du traitement des exceptions
par le langage Java, par rapport la gestion traditionnelle des erreurs dans d'autres langages. O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-5
Copyright 2008, Oracle. Tous droits rservs.
Avantages des exceptions Java :
Sparation du code de gestion des erreurs
En programmation traditionnelle, la gestion des erreurs
rend souvent le code plus difficile lire.
Le langage Java spare la gestion des erreurs inattendues
des fonctions principales du programme.
Le code qui en rsulte est plus facile lire et donc moins
sujet aux bugs.
Avantage 1 : Code de gestion des erreurs spar du reste du code
En programmation traditionnelle, la gestion des erreurs rend souvent le code plus difficile
lire.
Par exemple, le pseudo-code d'une fonction qui lit la premire ligne d'un fichier peut tre le
suivant :
readFirstLine {
open the file; // the open could fail
read the first line; // the read could fail
close the file; // the close could fail
}
Dans cette fonction, le mode traditionnel de recherche des erreurs potentielles consiste tester
chaque erreur possible et dfinir un code d'erreur. Le tableau de la page suivante compare la
mthode traditionnelle au traitement des exceptions par Java. Les trois instructions d'origine
sont indiques en gras.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-6
Avantage 1 : Code de gestion des erreurs spar du reste du code (suite)
Java spare la gestion des erreurs inattendues des autres fonctions du programme, ce qui rend le code
plus facile lire (et donc moins sujet aux bugs).
Gestion traditionnelle des erreurs Traitement Java des exceptions
readFirstLine {
int errcode = 0;
open the file;
if (openError) {
errcode = OPEN_ERR;
}
else {
read the first line;
if (readError) {
errcode = READ_ERR;
}
close the file;
if (closeError) {
errcode = errcode
and CLOSE_ERR;
}
}
return errcode;
}

readFirstLine {
try {
open the file;
read the first line;
close the file;
}
catch (openError) {
handle error;
}
catch (readError) {
handle error;
}
catch (closeError) {
handle error;
}
}


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-7
Copyright 2008, Oracle. Tous droits rservs.
Avantages des exceptions Java :
Remonter les erreurs dans la pile d'appels
method4
method3
method2
method1
//gre l'erreur
Code
d'erreur
Code
d'erreur
Code
d'erreur
method4
method3
method2
method1
//traite l'exception
Exception
ex
Chaque mthode vrifie la
prsence d'erreurs et renvoie
un code d'erreur sa
mthode appelante.
method4 gnre une
exception ; finalement,
method1 la dtecte.
Gestion traditionnelle
des erreurs
Exceptions Java
Avantage 2 : Remonter les erreurs dans la pile d'appels
Une exception Java est envoye immdiatement au gestionnaire d'exceptions appropri. Il
n'est pas ncessaire d'inclure d'instructions if chaque niveau pour remonter l'erreur dans la
pile d'appels. Par exemple, une suite de mthodes imbriques peut grer les erreurs de la
faon suivante :
method1 traite toutes les erreurs
method1 appelle method2
method2 appelle method3
method3 appelle method4
Le tableau ci-dessous dcrit la procdure de gestion traditionnelle des erreurs et le traitement
des exceptions Java lorsqu'une erreur se produit dans method4. La gestion des exceptions
ncessite moins d'tapes.
Gestion traditionnelle des erreurs Traitement Java des exceptions
1. method4 renvoie un code d'erreur
method3.
2. method3 recherche les erreurs et transmet le
code d'erreur method2.
3. method2 recherche les erreurs et transmet le
code d'erreur method1.
4. method1 traite l'erreur.
1. method4 gnre une exception qui est
propage vers method3.
2. method3 reoit un retour de method4,
qu'elle propage vers method2.
3. method2 reoit un retour de method3,
qu'elle propage vers method1.
4. method1 dtecte et traite l'exception.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-8
Copyright 2008, Oracle. Tous droits rservs.
method3
Avantages des exceptions Java : Les exceptions
ne peuvent pas tre ignores
Si method3 ignore
l'erreur, celle-ci ne sera
jamais traite.
method4
method2
method1
//gre l'erreur
Code
d'erreur
L'exception doit tre
dtecte et traite
quelque part.
Gestion traditionnelle
des erreurs
Exceptions Java
method4
method3
method2
method1
//traite l'exception
Exception
ex
Avantage 3 : Les exceptions ne peuvent pas tre ignores
Ds lors qu'une mthode a gnr une exception, celle-ci ne peut pas tre ignore. Elle doit
tre dtecte et traite quelque part. Dans l'exemple de la diapositive ci-dessus, le
programmeur qui crit les mthodes method3, method2 ou method1 peut choisir
d'ignorer le code d'erreur renvoy par method4, auquel cas le code d'erreur est perdu.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-9
Copyright 2008, Oracle. Tous droits rservs.
Exceptions contrles, exceptions non
contrles et erreurs
Toutes les erreurs et exceptions tendent la classe
Throwable.
Throwable
Error Exception
Erreurs non
rcuprables
Exceptions
contrles
Exceptions non contrles
(d'excution)
RuntimeException
Classes d'erreurs et d'exceptions standard
En Java, toutes les erreurs et exceptions standard tendent la classe Throwable.
Erreurs
Les erreurs sont des extensions de la classe Error. Si une erreur est gnre, elle indique en
gnral un problme qui sera fatal pour le programme. Le manque de mmoire, l'impossibilit
de charger une classe, les dbordements de pile et les dfaillances de disque sont des
exemples de ce type d'erreur. Ne dtectez pas les erreurs dans votre code Java.
Exceptions non contrles
Les exceptions non contrles (ou d'excution) sont des extensions de la classe
RuntimeException. Toutes les exceptions d'excution standard (telles que la division par
zro ou la tentative d'accder un tableau au-del du dernier lment) sont des extensions de
RuntimeException. Vous pouvez dcider du traitement rserv aux exceptions
d'excution : vous pouvez les dtecter et les traiter, ou bien les ignorer. Si une exception
d'excution se produit et que votre code ne peut pas la traiter, la JVM arrte le programme et
affiche le nom de l'exception ainsi qu'une trace de pile.
ArithmeticException, IndexOutOfBoundsException,
NullPointerException et IllegalArgumentException sont des exemples
d'exceptions d'excution courantes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-10
Classes d'erreurs et d'exceptions standard (suite)
Exceptions contrles
Les exceptions contrles sont des extensions de la classe Exception. Elles doivent tre dtectes
et traites quelque part dans l'application. Cette rgle est impose par le compilateur. Les exceptions
que vous crez doivent tendre la classe Exception. ClassNotFoundException et
IOException sont des exemples d'exceptions contrles courantes.
Remarque : Les exceptions d'excution ne doivent pas ncessairement tre dtectes, mais elles ne
peuvent pas tre ignores. Si elles ne sont pas dtectes, le programme s'arrte et affiche une erreur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-11
Copyright 2008, Oracle. Tous droits rservs.
Traiter les exceptions
Trois possibilits :
Dtecter l'exception et la traiter
Laisser l'exception se transmettre la mthode appelante
Dtecter l'exception et gnrer une autre exception
Traiter les exceptions
Lorsque vous appelez une mthode susceptible de gnrer une exception contrle, trois
options s'offrent vous :
Dtecter l'exception et la traiter.
Laisser l'exception se transmettre votre mthode. Elle devra alors tre traite par un
autre gestionnaire.
Dtecter l'exception et gnrer une autre exception. La nouvelle exception devra tre
traite ailleurs, par un autre gestionnaire.
Exceptions d'excution
Votre code ne doit pas ncessairement traiter les exceptions d'excution. Celles-ci sont gres
par la JVM. La JVM traite les exceptions d'excution en arrtant le programme. Si vous
souhaitez viter cette interruption, vous devez traiter l'exception.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-12
Copyright 2008, Oracle. Tous droits rservs.
Dtecter et traiter les exceptions
Incluez l'appel de la
mthode dans un bloc
try.
Traitez chaque
exception dans un bloc
catch.
Effectuez l'ventuel
traitement final dans un
bloc finally.
try {
// call the method
}
catch (exception1) {
// handle exception1
}
catch (exception2) {
// handle exception2
}
finally {
// any final processing
}
Dtecter et traiter les exceptions
Si un bloc de code appelle une ou plusieurs mthodes susceptibles de gnrer des exceptions,
incluez le code dans un bloc try, immdiatement suivi d'un ou plusieurs blocs catch.
Chaque bloc catch traite une exception particulire.
Vous pouvez ajouter un bloc finally aprs tous les blocs catch. Un bloc finally
s'excute en fonction de ce qui se passe avant lui.
Comment savoir si une mthode Java donne gnre une exception ?
Toutes les classes Java standard sont dtailles dans la documentation JDK. A chaque
mthode est associe la liste des exceptions qui peuvent tre gnres. Chaque fois que vous
appelez une mthode Java, vous devez savoir quelles exceptions peuvent en dcouler. Par
exemple, voici des dclarations issues de la documentation du kit JDK pour
java.io.FileInputStream :
public FileInputStream(String name)
throws FileNotFoundException
public int read() throws IOException
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-13
Dtecter et traiter les exceptions (suite)
Rgles gnrales pour les structures try-catch-finally
Un bloc try doit comporter au moins un bloc catch ou un bloc finally.
Un bloc catch est ncessaire pour les exceptions contrles, sauf si elles sont propages.
Un bloc try peut comporter plusieurs blocs catch.
Le bloc finally s'excute toujours, que des exceptions se produisent ou non.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-14
Copyright 2008, Oracle. Tous droits rservs.
Dtecter une exception unique
int qty;
String s = getQtyFromForm();
try {
// Might throw NumberFormatException
qty = Integer.parseInt(s);
}
catch ( NumberFormatException e ) {
// Handle the exception
}
// If no exceptions are thrown, we end up here
Dtecter une exception unique
L'exemple de la diapositive ci-dessus utilise Integer.parseInt() pour traiter la valeur
saisie par un utilisateur final dans un panneau. La mthode parseInt() gnre une
exception NumberFormatException si la chane n'est pas une valeur entire. Le bloc
catch peut traiter cette exception en invitant l'utilisateur saisir une autre valeur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-15
Copyright 2008, Oracle. Tous droits rservs.
Dtecter plusieurs exceptions
try {
// Might throw MalformedURLException
URL u = new URL(str);
// Might throw IOException
URLConnection c = u.openConnection();
}
catch (MalformedURLException e) {
System.err.println("Could not open URL: " + e);
}
catch (IOException e) {
System.err.println("Could not connect: " + e);
}
Dtecter plusieurs exceptions
L'exemple prsent dans la diapositive ci-dessus construit une URL, puis s'y connecte. Il
utilise deux blocs catch, car deux exceptions peuvent se produire. Si une exception se
produit dans le bloc try, la JVM vrifie successivement chaque gestionnaire catch jusqu'
ce qu'elle trouve celui qui traite ce type d'exception. La suite du bloc try n'est pas excute.
Une instruction catch dtecte l'exception indique, ainsi que ses ventuelles sous-classes.
Par exemple, la documentation javadoc montre que MalformedURLException tend
IOException. Vous pouvez donc remplacer les deux blocs catch par un seul :
catch (IOException e) {
System.err.println("Operation failed: " + e);
}
Vous utilisez un seul bloc catch si vous souhaitez que votre code se comporte de la mme
faon pour chaque exception.
Ordre des instructions catch
Notez que le compilateur signale une erreur si vous prcisez d'abord un gestionnaire catch
pour une superclasse, suivi d'un gestionnaire catch pour une sous-classe. Cela est d au fait
que le gestionnaire catch de la superclasse masque celui de la sous-classe, lequel ne voit
donc jamais aucune exception. Par exemple, le fait d'intervertir les deux blocs catch dans
l'exemple de la diapositive ci-dessus provoquerait une erreur de compilation.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-16
Copyright 2008, Oracle. Tous droits rservs.
Nettoyer l'aide d'un bloc finally
FileInputStream f = null;
try {
f = new FileInputStream(filePath);
while (f.read() != -1)
charcount++;
}
catch(IOException e) {
System.out.println("Error accessing file " + e);
}
finally {
// This block is always executed
f.close();
}
Nettoyer l'aide d'un bloc finally
Le code prsent dans la diapositive ci-dessus ouvre un fichier et compte ses caractres. Le
fichier est ensuite ferm, mme si l'opration de lecture provoque une exception. Le bloc
finally est utile lorsque vous souhaitez librer les ressources du systme, telles que les
fichiers ouverts.
Il est excut quelle que soit la faon de quitter le bloc try :
Fin normale, jusqu' l'accolade fermante
Fin due une instruction return ou break
Fin due la gnration d'une exception
Remarque : La mthode f.close() peut gnrer une exception IOException et doit
donc tre incluse dans son propre bloc trycatch l'intrieur du bloc finally.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-17
Copyright 2008, Oracle. Tous droits rservs.
Exercice dirig : Dtecter et traiter les exceptions
void makeConnection(String url) {
try {
URL u = new URL(url);
}
catch (MalformedURLException e) {
System.out.println("Invalid URL: " + url);
return;
}
finally {
System.out.println("Finally block");
}
System.out.println("Exiting makeConnection");
}
Exercice dirig : Dtecter et traiter les exceptions
Examinez le code de la diapositive ci-dessus et expliquez ce qu'il fait. Notez que l'argument
url est une chane, telle que http://www.oracle.com.
1. Quelle sera la sortie standard si le constructeur URL s'excute sans gnrer d'exception ?
2. Quelle sera la sortie standard si le constructeur URL gnre une exception
MalformedURLException ?
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-18
Copyright 2008, Oracle. Tous droits rservs.
Exercice dirig : Dtecter et traiter les exceptions
void myMethod () {
try {
getSomething();
} catch (IndexOutOfBoundsException e1) {
System.out.println("Caught IOBException ");
} catch (Exception e2) {
System.out.println("Caught Exception ");
} finally {
System.out.println("No more exceptions ");
}
System.out.println("Goodbye");
}
Exercice dirig : Dtecter et traiter les exceptions (suite)
3. Quelle sera la sortie standard si la mthode getSomething() gnre une exception
IllegalArgumentException ?
4. L'inversion de l'ordre des deux blocs catch changerait-elle quelque chose ?
C'est--dire :

try
catch (Exception e) {}
catch (IndexOutOfBoundsException e) {}

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-19
Copyright 2008, Oracle. Tous droits rservs.
Laisser une exception se transmettre la
mthode appelante
Utilisez throws dans la dclaration de la mthode.
L'exception se propage la mthode appelante.
public int myMethod() throws exception1 {
// code that might throw exception1
}
public URL changeURL(URL oldURL)
throws MalformedURLException {
return new URL("http://www.oracle.com");
}
Laisser une exception se transmettre la mthode appelante
Si vous ne pouvez pas traiter une exception localement de faon satisfaisante, ou si vous
choisissez de ne pas le faire, l'exception peut tre renvoye au code qui a appel la mthode.
Dans l'exemple de la diapositive ci-dessus, le constructeur de l'URL peut gnrer une
exception MalformedURLException, mais la mthode ne dtecte pas cette exception
localement. En revanche, l'exception est transmise automatiquement la mthode qui a
appel changeURL().
Si vous souhaitez qu'une exception se propage la mthode appelante, vous devez la dclarer
dans la dclaration de la mthode :
public URL changeURL(URL oldURL) throws MalformedURLException
{

}
La mthode qui appelle changeURL() peut dtecter MalformedURLException ou
permettre la transmission de l'exception. Si la mthode appelante permet la transmission de
l'exception, elle doit galement contenir throws MalformedURLException dans sa
dclaration.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-20
Copyright 2008, Oracle. Tous droits rservs.
Gnrer des exceptions
Gnrez des exceptions l'aide du mot-cl throw.
Utilisez throws dans la dclaration de la mthode.
public String getValue(int index) throws
IndexOutOfBoundsException {
if (index < 0 || index >= values.length) {
throw new IndexOutOfBoundsException();
}

}
throw new Exception1();
Gnrer des exceptions
Vous pouvez gnrer des exceptions dans votre code afin de signaler une situation anormale.
Vous pouvez utiliser les exceptions systme standard, mais vous pouvez galement crer vos
propres exceptions.
Dans ce cas, rappelez-vous que vous allez en ralit crer un objet et le transmettre une
mthode de niveau suprieur. Par consquent, vous devez crer cet objet exception l'aide de
l'oprateur new, comme illustr dans la diapositive ci-dessus.
Une mthode peut gnrer plusieurs exceptions, auquel cas les noms d'exception sont spars
par des virgules.
Il existe quatre types d'exception :
System
Application
Run-time
Custom
L'exception java.lang.IndexOutOfBoundsException est de type Run-time.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-21
Copyright 2008, Oracle. Tous droits rservs.
Crer des exceptions
Etendez la classe Exception :
public class UserFileException extends Exception {
public UserFileException (String message) {
super(message);
}
}
Crer des exceptions
Vous pouvez crer vos propres exceptions en tendant la classe Exception. Vous ne devez
pas tendre la classe RuntimeException, car celle-ci est destine aux exceptions
communes dont le contrle n'est pas ncessaire.
L'exemple de la diapositive ci-dessus cre une exception appele UserFileException
avec un seul constructeur, qui appelle le constructeur de la superclasse.
Vous pouvez crer plusieurs exceptions pour diffrents scnarios dans votre code. Par
exemple, si votre code accde diffrents fichiers, vous pouvez gnrer une exception
diffrente pour chaque fichier. Cette approche est utile pour plusieurs raisons :
Vous pouvez traiter chaque exception diffremment.
Si vos gestionnaires d'exceptions affichent l'exception, vous ou vos utilisateurs disposez
de plus d'informations sur l'endroit o l'exception s'est produite.
Vous pouvez personnaliser votre exception. Par exemple, vous pouvez ajouter un
constructeur UserFileException qui dfinit un attribut pour le numro de ligne du
fichier et une mthode qui affiche le numro de la ligne.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-22
Copyright 2008, Oracle. Tous droits rservs.
Dtecter une exception et gnrer
une autre exception
catch (exception1 e) {
throw new exception2();
}
void readUserFile() throws UserFileException {
try {
// code to open and read userfile
}
catch(IOException e) {
throw new UserFileException(e.toString());
}
}
Dtecter une exception et gnrer une autre exception
L'exemple de la diapositive ci-dessus dtecte une exception IOException et la traite en
gnrant l'exception UserFileException. Vous pouvez procder ainsi si vous souhaitez
que cette mthode gnre une exception diffrente des autres mthodes. La mthode utilise le
mot-cl throws dans sa dclaration afin d'indiquer qu'elle gnre une exception
UserFileException.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-23
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
utiliser les exceptions Java pour implmenter une
gestion robuste des erreurs
traiter les exceptions l'aide des blocs try, catch et
finally
utiliser le mot-cl throw pour gnrer une exception
utiliser une mthode pour dclarer une exception dans
sa signature afin de la transmettre la pile d'appels
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-24
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 14 :
Gnrer et dtecter les exceptions
Dans cet exercice, vous allez :
crer une exception personnalise
modifier les mthodes de recherche de DataMan afin
de gnrer des exceptions
traiter les exceptions lors de l'appel des mthodes de
recherche de DataMan
tester les modifications apportes au code
Prsentation de l'exercice 14 : Gnrer et dtecter les exceptions
Dans cet exercice, vous allez apprendre crer vos propres classes d'exception, gnrer un
objet exception l'aide de votre propre classe et traiter les exceptions.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les14, chargez
l'application OrderEntryApplicationLes14, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours jusqu' cet exercice,
chargez l'application OrderEntryApplicationLes14. Dans la fentre Application
Navigator, dveloppez OrderEntryApplicationLes14
OrderEntryProjectLes14 - Application Sources oe, puis cliquez deux
fois sur l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres
jusqu' prsent dans le cours.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Utiliser JDBC pour accder la base de donnes
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
dcrire la faon dont le code Java se connecte la base
de donnes
dcrire la faon dont les fonctionnalits de base de
donnes Java sont prises en charge par la base Oracle
charger un pilote JDBC et l'enregistrer
vous connecter une base de donnes Oracle
excuter une instruction SELECT simple
mettre des types de base de donnes Oracle simples en
correspondance avec des types Java
utiliser une connexion appartenant un pool
Objectifs du chapitre
Si votre entreprise utilise une base Oracle pour stocker ses donnes, votre application Java
doit tre capable de communiquer avec cette base. Ce chapitre vous apprend utiliser JDBC
(Java Database Connectivity) pour interroger une base de donnes partir d'une classe Java.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-3
Copyright 2008, Oracle. Tous droits rservs.
Java, Java EE et Oracle 11g
Base de
donnes
Oracle
Serveur
Web Client
Serveur
d'applications
Prsentation
Logique
mtier
Donnes
Oracle Application Server 11g
Environnement
certifi Java EE
JDBC
Java, Java EE et Oracle 11g
Oracle offre une plate-forme complte et intgre, appele Oracle 11g, qui prend en charge
l'ensemble des exigences des applications Java ct serveur. Elle est constitue des
composants suivants :
Oracle Database 11g
Outre ses fonctions de gestion de base de donnes, la base Oracle (actuellement Oracle
Database 11g) prend en charge des structures fondes sur Java, notamment des composants
Java et des procdures Java stockes. Ces structures Java sont excutes dans la base de
donnes par la JVM intgre, appele Oracle Java Virtual Machine (Oracle JVM).
Oracle Application Server 11g
Oracle Application Server 11g gre et excute toute la logique applicative, y compris les
composants Enterprise JavaBean, l'aide d'EJE (Enterprise Java Engine), sa propre JVM
intgre.
Utiliser Java EE avec Oracle 11g
Java EE est une technologie standard qui fournit un ensemble d'API et une infrastructure
d'excution pour l'hbergement et la gestion des applications. Elle dfinit des rles et des
interfaces pour les applications, ainsi que les services d'excution sur lesquels les applications
peuvent tre dployes. Les dveloppeurs d'applications peuvent donc se concentrer sur la
logique applicative et les services associs, tout en exploitant les services d'excution pour
tous les services lis l'infrastructure.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-4
Copyright 2008, Oracle. Tous droits rservs.
Application client
ou applet client
Se connecter une base de donnes avec Java
Les applications client, les pages JSP et les servlets utilisent JDBC.
JDBC Base de
donnes
relationnelle
Se connecter une base de donnes avec Java
Pour pouvoir interroger une base de donnes Oracle, une application Java doit disposer d'un
moyen de se connecter celle-ci. JDBC (Java Database Connectivity) est une API
(Application Programming Interface) standard utilise pour connecter une application Java
des bases de donnes relationnelles. Le protocole rseau dpend du pilote JDBC utilis. Par
exemple, le pilote OCI (Oracle Call Interface) utilise Oracle Net, tandis que le pilote thin
utilise TCP/IP.
Excuter des instructions SQL partir d'une application ct serveur
Les procdures Java figurant dans la base de donnes utilisent JDBC pour excuter leurs
interrogations SQL. Il s'agit notamment des procdures Java stockes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-5
Copyright 2008, Oracle. Tous droits rservs.
JDBC est une API standard qui permet de se connecter
des bases de donnes relationnelles partir de Java.
L'API JDBC inclut le package d'API standard dans
java.sql.
L'API JDBC 2.0 inclut le package d'API facultatif dans
javax.sql.
L'API JDBC 3.0 inclut le package d'API standard et le
package d'API facultatif.
Vous devez indiquer l'archive du pilote JDBC Oracle dans
CLASSPATH.
La bibliothque de classes JDBC fait partie de Java SE
(Java Platform - Standard Edition).
JDBC (Java Database Connectivity)
JDBC (Java Database Connectivity)
Le package java.sql contient un ensemble d'interfaces qui dfinissent l'API JDBC. Ce
package fait partie de J2SE (Java 2 - Standard Edition). Les fournisseurs de bases de donnes
implmentent ces interfaces de diffrentes manires, mais l'API JDBC proprement dite est
standard.
JDBC permet d'crire du code pour effectuer les oprations suivantes :
Connexion un ou plusieurs serveurs de donnes
Excution d'instructions SQL
Obtention d'un ensemble de rsultats dans lequel vous pouvez naviguer
Obtention de mtadonnes partir du serveur de donnes
Chaque fournisseur de bases de donnes propose un ou plusieurs pilotes JDBC. Le pilote
JDBC implmente les interfaces du package java.sql, fournissant ainsi le code permettant
la connexion une base de donnes spcifique et son interrogation.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-6
Copyright 2008, Oracle. Tous droits rservs.
// Packages standard
import java.sql.*;
import java.math.*; // optional
// Extension Oracle des packages JDBC
import oracle.jdbc.*;
import oracle.sql.*;
Prparer l'environnement
Importez les packages JDBC.
Incluez les classes de pilote JDBC dans la configuration
de CLASSPATH.
Conditions pralables l'utilisation d'Oracle JDBC
Votre classe Java doit importer java.sql.* pour pouvoir utiliser les classes JDBC. Vous
devez en outre inclure dans la configuration de CLASSPATH les classes de pilote JDBC du
fournisseur de la base de donnes.
Dans JDeveloper, vous ajoutez la bibliothque Oracle JDBC votre projet pour inclure dans
votre variable CLASSPATH les fichiers .jar ncessaires.
Utilisez la bote de dialogue Project Properties pour ajouter la bibliothque.
Pilote JDBC OCI
Si vous installez le pilote JDBC OCI, vous devez galement affecter la valeur suivante la
variable d'environnement dfinissant le chemin des bibliothques : [Oracle Home]/lib.
Remarque concernant l'extension Oracle des packages JDBC : Les extensions standard
sont dsormais appeles packages facultatifs. Un package facultatif est un groupe de packages
fourni en un ou plusieurs fichiers JAR qui implmente une API tendant la plate-forme Java.
L'implmentation d'un package facultatif peut se composer de code crit dans le langage de
programmation Java et, mais plus rarement, de code natif spcifique la plate-forme. Dans ce
cas, le package facultatif contient du code propre l'implmentation Oracle de JDBC.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-7
Copyright 2008, Oracle. Tous droits rservs.
Procdure d'utilisation de JDBC pour excuter
des instructions SQL
1. Enregistrer le pilote JDBC
4. Excuter l'instruction SQL
4b. Traiter l'instruction
LMD ou LDD
6. Nettoyer
5. Traiter les rsultats
de l'interrogation
3. Crer un objet Statement
2. Obtenir un objet Connection
4a. Coder l'instruction
d'interrogation
Procdure d'utilisation de JDBC pour excuter des instructions SQL
La procdure est la suivante :
1. Chargez et enregistrez le pilote. (Utilisez pour cela la classe
java.sql.DriverManager.)
2. Obtenez un objet Connection. (Utilisez pour cela la mthode getConnection() de la
classe java.sql.DriverManager.)
3. Crez un objet Statement. (Utilisez l'objet Connection.)
4. Excutez une interrogation, une instruction LMD ou LDD. (Utilisez l'objet
Statement.)
5. Si vous obtenez un objet ResultSet lors de l'excution d'une interrogation, procdez
une itration sur ResultSet pour traiter les donnes de chaque ligne satisfaisant
l'interrogation.
6. Fermez les objets ResultSet, Statement et Connection lorsque l'opration est
termine.
Traiter les exceptions
Lorsque vous utilisez JDBC, toutes les mthodes qui accdent la base de donnes gnrent
l'exception SQLException en cas de problme. Pour traiter ce type d'erreur, vous devez
placer le code dans un bloc try-catch.
SQLException comporte un certain nombre de mthodes que vous pouvez appeler pour
obtenir des informations sur l'exception, notamment :
getMessage() renvoie une chane qui dcrit l'erreur.
getErrorCode() extrait le code d'exception propre au fournisseur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-8
Copyright 2008, Oracle. Tous droits rservs.
Etape 1 : Enregistrer le pilote
Enregistrer le pilote dans le code :
DriverManager.registerDriver(new
oracle.jdbc.OracleDriver());
Class.forName ("oracle.jdbc.OracleDriver");
Enregistrer le pilote lors du lancement de la classe :
java
-Djdbc.drivers=oracle.jdbc.OracleDriver
<ClassName>;
Etape 1 : Enregistrer le pilote
Les pilotes JDBC doivent s'enregistrer eux-mmes l'aide du gestionnaire de pilotes. Pour
cela, deux choix s'offrent vous :
Utiliser la mthode registerDriver() de la classe DriverManager
Utiliser la mthode forName() de la classe java.lang.Class afin de charger les
pilotes JDBC directement, de la faon suivante :
try {
Class.forName("oracle.jdbc.OracleDriver");
}
catch (ClassNotFoundException e) {}
L'utilisation de la mthode Class.forName() appelle l'initialiseur statique de la classe du
pilote. Cette dernire ne doit pas ncessairement tre prsente lors de la compilation.
Cependant, cette mthode n'est valide que pour les JVM compatibles avec le kit JDK.
Vous pouvez enregistrer le pilote lors de l'excution. Dans ce cas, les instructions
d'enregistrement ventuellement prsentes dans la classe Java sont ignores.
Exemple d'utilisation de l'option Djdbc dans la ligne de commande :
C:>java Djdbc.drivers=oracle.jdbc.OracleDriver MyClass
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-9
Copyright 2008, Oracle. Tous droits rservs.
Grce au package oracle.jdbc.driver, Oracle fournit
diffrents pilotes pour tablir une connexion la base de
donnes.
Appels JDBC
Commandes
de base de
donnes
Base de
donnes
Se connecter la base de donnes
Pilote Oracle
Client lger
Bas sur OCI
Bas sur serveur

A propos des pilotes JDBC
Un pilote JDBC implmente les interfaces du package java.sql, fournissant ainsi le code
permettant la connexion une base de donnes spcifique et l'interrogation de celle-ci. Le
pilote JDBC peut galement fournir les extensions propres au fournisseur. Les pilotes Oracle
fournissent des extensions permettant la prise en charge des types de donnes Oracle
spciaux.
Oracle fournit trois pilotes :
Pilote pour les clients lgers
Pilote bas sur OCI
Pilote bas sur serveur
Le pilote Oracle JDBC rside dans le fichier classes12.jar pour JDBC 2.0 (et les
versions ultrieures). Ce fichier d'archive contient les classes permettant la prise en charge des
pilotes JDBC thin et OCI.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-10
Copyright 2008, Oracle. Tous droits rservs.
Client
Pilotes Oracle JDBC : Pilote pour les clients lgers
Il est crit intgralement en langage Java.
Il doit tre utilis par des applets.
Serveur
Oracle
Applet
JDBC
Pilote thin
Pilote pour les clients lgers
Ce pilote peut se connecter une base Oracle 11g, mais galement une base Oracle8i ou
Oracle9i. Afin de garantir une portabilit maximale, vous devez utiliser ce pilote si vous
dveloppez une application client pouvant se connecter diffrentes versions d'une base de
donnes Oracle.
Pour communiquer avec la base, le pilote pour les clients lgers utilise une version allge
d'Oracle*Net via TCP/IP, laquelle peut tre tlcharge sur le client lors de l'excution.
Le pilote Oracle JDBC thin est un pilote 100 % Java, de type IV. Il est destin aux applets
Oracle JDBC, mais peut galement tre utilis pour les applications. Etant donn qu'il est crit
intgralement en langage Java, ce pilote est indpendant de la plate-forme. Il ne ncessite
aucun logiciel Oracle supplmentaire ct client. Le pilote thin communique avec le serveur
via le protocole TTC (Two-Task Common), dvelopp par Oracle pour accder au systme de
gestion de base de donnes relationnelle (SGBDR) Oracle.
Le pilote JDBC thin permet une connexion directe la base de donnes, via une
implmentation de TCP/IP qui mule Oracle Net et TTC (le protocole filaire utilis par OCI)
sur les sockets Java. Ces deux protocoles sont des versions allges de leur homologue sur le
serveur. Le protocole Oracle Net s'excute uniquement sur TCP/IP.
Remarque : Lorsque le pilote JDBC thin est utilis avec une applet, le navigateur client doit
tre en mesure de prendre en charge les sockets Java.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-11
Copyright 2008, Oracle. Tous droits rservs.
Application
JDBC
Pilote OCI
Pilotes Oracle JDBC : Pilote de client OCI
Il est crit en langage C et Java.
Il doit tre install sur le client.
Client Serveur
Oracle
ocixxx.dll
Pilote de client OCI
Pilote JDBC OCI
C'est un pilote de type II destin une utilisation avec les applications Java
client-serveur.
Il ncessite une installation client Oracle. Il est donc propre la plate-forme Oracle et ne
convient pas aux applets.
Il fournit une fonctionnalit de concentration des connexions OCI qui peut faire partie du
client JDBC ou d'une procdure JDBC stocke.
Il prend en charge Oracle7, Oracle8/8i, Oracle9i, Oracle 10g et Oracle 11g avec le niveau
de compatibilit le plus lev. Il prend galement en charge tous les adaptateurs Oracle
Net installs, notamment IPC, les canaux nomms (named pipes), TCP/IP et IPX/SPX.
Il est crit dans une combinaison des langages Java et C, il convertit les appels JDBC en
appels OCI (Oracle Call Interface) en utilisant des mthodes natives pour appeler les
points d'entre C. Ces appels sont envoys via Oracle Net au serveur de bases de donnes
Oracle. Le pilote JDBC OCI communique avec le serveur l'aide du protocole TTC
dvelopp par Oracle.
Il utilise les bibliothques OCI, les points d'entre C, Oracle Net, les bibliothques CORE
et les autres fichiers ncessaires sur l'ordinateur client sur lequel il est install.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-12
Copyright 2008, Oracle. Tous droits rservs.
Choisir le pilote appropri
Applet
Application client
EJB, servlet
sur le niveau intermdiaire (middle-tier)
Procdure stocke
OCI Thin
Pilote
Thin
Ct serveur
OCI
Thin
Type de programme
Choisir le pilote appropri
Tenez compte des lments suivants lorsque vous choisissez le pilote JDBC utiliser pour
votre application ou applet :
Si vous crivez une applet, vous devez utiliser le pilote JDBC thin. Les classes de pilote
JDBC bases sur OCI ne fonctionnent pas dans un navigateur Web, car elles appellent
des mthodes natives (en langage C).
Si vous souhaitez une portabilit et des performances maximales sur la plate-forme
Oracle 10g (et les versions antrieures), utilisez le pilote JDBC thin. Vous pouvez vous
connecter un serveur Oracle partir d'une application ou d'une applet via le pilote
JDBC thin.
Si vous crivez une application client pour un environnement client Oracle et que vous
avez besoin de performances maximales, choisissez le pilote JDBC OCI.
Si les performances sont essentielles pour votre application, que vous souhaitez une
volutivit maximale du serveur Oracle ou que vous avez besoin des fonctionnalits de
disponibilit amliores telles que la gestion transparente des incidents (TAF), ou des
fonctionnalits de proxy amliores telles que l'authentification via le niveau
intermdiaire (middle-tier), optez pour le pilote JDBC OCI.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-13
Copyright 2008, Oracle. Tous droits rservs.
Etape 2 : Obtenir une connexion de base de donnes
Dans JDBC 1.0, utilisez la classe DriverManager,
qui fournit des mthodes getConnection()
surcharges.
Toutes les mthodes de connexion ncessitent une
URL JDBC pour indiquer les dtails de connexion.
Exemple :
Les fournisseurs peuvent proposer plusieurs types de
pilote JDBC.
Connection conn =
DriverManager.getConnection(
"jdbc:oracle:thin:@myhost:1521:ORCL",
"scott","tiger");
Obtenir une connexion de base de donnes
Utilisez la classe DriverManager pour crer une connexion en appelant la mthode
getConnection().
La mthode getConnection() est surcharge, comme le montre l'exemple ci-dessous :
getConnection(String url)
getConnection(String url, Properties props), o les proprits
doivent inclure au moins une valeur pour les lments suivants : user et password
getConnection(String url, String user, String password)
Dans chaque cas, vous devez indiquer une chane de type URL (qui identifie le pilote JDBC
enregistr utiliser) ainsi que la chane de connexion la base de donnes et le mot de passe,
si ncessaire.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-14
Copyright 2008, Oracle. Tous droits rservs.
URL JDBC
JDBC utilise une chane de type URL qui identifie :
le pilote JDBC utiliser pour la connexion
les dtails de connexion la base de donnes,
qui dpendent du pilote utilis
Exemple utilisant le pilote Oracle JDBC thin :
jdbc:oracle:thin:@myhost:1521:ORCL
jdbc:<subprotocol>:<subname>
jdbc:oracle:<driver>:@<database>
Protocole
Identification de
la base de donnes
URL JDBC
JDBC utilise une URL pour identifier la connexion de base de donnes. Une URL JDBC se
prsente diffremment d'une URL HTTP ou FTP. Cependant, comme n'importe quelle URL,
il s'agit d'un pointeur vers une ressource particulire (une base de donnes dans le cas
prsent). La structure d'une URL JDBC est flexible, ce qui permet au crateur du pilote
d'indiquer ce qu'il faut inclure dans l'URL. L'utilisateur final doit connatre la structure
employe par le fournisseur.
La diapositive ci-dessus prsente la syntaxe gnrale d'une URL JDBC, ainsi que la syntaxe
utilise par Oracle pour la connexion avec un pilote Oracle. La syntaxe gnrale d'une URL
JDBC est la suivante :
jdbc:<subprotocol>:<subname>
jdbc est le protocole. Toutes les URL commencent par le protocole.
<subprotocol> est le nom d'un pilote ou d'un mcanisme de connexion la base de
donnes. Les dveloppeurs de pilotes enregistrent leurs sous-protocoles avec JavaSoft
afin de s'assurer que personne d'autre n'utilise le mme nom de sous-protocole. Pour tous
les pilotes Oracle JDBC, le sous-protocole est oracle.
<subname> identifie la base de donnes. La structure et le contenu de cette chane sont
dtermins par le dveloppeur du pilote. Dans le cas de pilotes Oracle JDBC, cette chane
est <driver>:@<database>, o :
- <driver> est le pilote
- <database> indique les informations de connexion la base de donnes
Les diapositives qui suivent dcrivent la syntaxe d'une URL Oracle JDBC pour les diffrents
pilotes JDBC, pour le code des applications Java ct client.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-15
Copyright 2008, Oracle. Tous droits rservs.
URL JDBC avec pilotes Oracle
Pilote Oracle JDBC Thin
Pilote Oracle JDBC OCI
Syntaxe : jdbc:oracle:thin:@<host>:<port>:<SID>
Exemple : "jdbc:oracle:thin:@eduhost:1521:orcl"
Syntaxe : jdbc:oracle:oci:@<tnsname entry>
Exemple : "jdbc:oracle:oci:@orcl"
URL JDBC avec pilotes Oracle
La structure de base de l'URL JDBC permettant la connexion une base de donnes avec l'un
des pilotes Oracle JDBC est jdbc:<subprotocol>:<driver>:<database>.
Pilote Oracle JDBC Thin
<driver> est thin.
<database> est une chane au format <host>:<port>:<sid>. Autrement dit, il s'agit
du nom d'hte, du port TCP/IP et du SID Oracle de la base de donnes laquelle vous
souhaitez vous connecter.
Exemple : jdbc:oracle:thin:@eduhost:1521:ORCL
Pilote Oracle JDBC OCI
<driver> a la valeur oci, oci8 ou oci7, selon le pilote OCI que vous utilisez.
<database> est une entre TNSNAMES du fichier tnsnames.ora.
Exemple : jdbc:oracle:oci:@eduhost
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-16
Copyright 2008, Oracle. Tous droits rservs.
Etape 3 : Crer une instruction
Les objets Statement JDBC sont crs partir de l'instance
Connection.
Utilisez la mthode createStatement(), qui fournit
un contexte pour l'excution d'une instruction SQL.
Exemple :
Connection conn =
DriverManager.getConnection(
"jdbc:oracle:thin:@myhost:1521:ORCL",
"scott","tiger");
Statement stmt = conn.createStatement();
Crer une instruction
La mthode execute() est utile pour l'excution dynamique d'une chane SQL inconnue.
JDBC fournit deux autres objets Statement :
PreparedStatement, pour les instructions SQL prcompiles.
CallableStatement, pour les instructions qui excutent des procdures stockes.
Objets et interfaces
java.sql.Statement est une interface et non une classe. Lorsque vous dclarez un objet
Statement et l'initialisez l'aide de la mthode createStatement(), vous crez
l'implmentation de l'interface Statement fournie par le pilote Oracle que vous utilisez.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-17
Copyright 2008, Oracle. Tous droits rservs.
Utiliser l'interface Statement
L'interface Statement fournit trois mthodes pour
l'excution d'instructions SQL :
executeQuery(String sql) pour les instructions
SELECT
Renvoie un objet ResultSet pour le traitement des
lignes
executeUpdate(String sql) pour les instructions
LMD ou LDD
Renvoie une valeur int
execute(String) pour n'importe quelle instruction
SQL
Renvoie une valeur boolean
Utiliser l'interface Statement
Utilisez la mthode executeQuery(String sql) pour les instructions SELECT.
Elle renvoie un objet ResultSet pour le traitement des lignes.
Utilisez la mthode executeUpdate(String sql) pour les instructions LMD ou LDD.
Elle renvoie une valeur int indiquant le nombre de lignes affectes par l'instruction
LMD ou la valeur 0 dans le cas d'instructions LDD.
Utilisez la mthode execute(String) pour n'importe quelle instruction SQL.
Elle renvoie la valeur boolenne true si l'instruction renvoie un objet ResultSet
(comme une interrogation). Dans le cas contraire, la valeur false est renvoye.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-18
Copyright 2008, Oracle. Tous droits rservs.
Etape 4a : Coder l'instruction d'interrogation
Indiquez une chane d'interrogation SQL, sans point-virgule,
comme argument de la mthode executeQuery().
Renvoie un objet ResultSet :
Statement stmt = null;
ResultSet rset = null;
stmt = conn.createStatement();
rset = stmt.executeQuery
("SELECT ename FROM emp");
Excuter une interrogation
Pour interroger la base de donnes, utilisez la mthode executeQuery() de votre objet
Statement. Cette mthode accepte une instruction SQL en entre et renvoie un objet JDBC
ResultSet.
L'instruction suit la syntaxe SQL standard.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-19
Copyright 2008, Oracle. Tous droits rservs.
Objet ResultSet
Le pilote JDBC renvoie les rsultats d'une interrogation
dans un objet ResultSet.
L'objet ResultSet :
gre un curseur pointant vers la ligne de donnes en cours
fournit des mthodes permettant d'extraire les valeurs des
colonnes
Objet ResultSet
Un objet ResultSet est une table de donnes reprsentant un ensemble de rsultats, gnr
via l'excution d'une instruction qui interroge la base.
Il gre un curseur pointant vers la ligne de donnes en cours. Le curseur est initialement
positionn avant la premire ligne.
Un objet ResultSet par dfaut ne peut pas tre mis jour et son curseur se dplace
uniquement vers l'avant. Il n'est donc possible de procder qu'une seule fois une itration sur
cet objet, et uniquement de la premire ligne jusqu' la dernire ligne.
L'API JDBC 2.0 permet dsormais de gnrer des objets ResultSet qui peuvent tre mis
jour et dans lesquels il est possible de naviguer.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-20
Copyright 2008, Oracle. Tous droits rservs.
Etape 4b : Excuter des instructions LMD
1. Crez un objet Statement vide.
2. Utilisez executeUpdate pour excuter l'instruction.
Exemple :
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(SQLDMLstatement);
Statement stmt = conn.createStatement();
int rowcount = stmt.executeUpdate
("DELETE FROM order_items
WHERE order_id = 2354");
Excuter des instructions LMD
La diapositive ci-dessus prsente la syntaxe des mthodes qui excutent une mise jour de la
base de donnes l'aide d'une instruction LMD. Tandis que executeQuery renvoie un
objet ResultSet contenant les rsultats de l'interrogation envoye au SGBD,
executeUpdate renvoie une valeur de type int indiquant le nombre de lignes qui ont t
mises jour dans une table.
Lorsque la mthode executeUpdate est utilise pour excuter une instruction LDD, par
exemple pour la cration d'une table, elle renvoie la valeur 0.
Lorsque la valeur renvoye par executeUpdate est 0, cela peut signifier soit que
l'instruction excute tait une instruction de mise jour n'ayant affect aucune ligne, soit que
l'instruction excute tait une instruction LDD.
Exemple : A l'aide de la mthode executeUpdate(), la table PICTURES est alimente
avec la valeur region_id de la table regions :
System.out.println("Table Insert");
stmt.executeUpdate ("INSERT INTO pictures (id)
SELECT region_id FROM regions");
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-21
Copyright 2008, Oracle. Tous droits rservs.
1. Crez un objet Statement vide.
2. Utilisez executeUpdate pour excuter l'instruction.
Exemple :
Statement stmt = conn.createStatement();
int rowcount = stmt.executeUpdate
("CREATE TABLE temp (col1 NUMBER(5,2),
col2 VARCHAR2(30)");
Etape 4b : Excuter des instructions LDD
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(SQLDDLstatement);
Excuter des instructions LDD
La diapositive ci-dessus prsente la syntaxe des mthodes qui excutent une instruction LDD.
executeUpdate() renvoie une valeur int contenant 0 pour une instruction sans valeur
renvoye, par exemple une instruction SQL LDD.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-22
Copyright 2008, Oracle. Tous droits rservs.
Etape 5 : Traiter les rsultats de l'interrogation
La mthode executeQuery() renvoie un ensemble de rsultats.
Utilisez la mthode next() en boucle pour itrer sur
les lignes.
Utilisez les mthodes getXXX() pour obtenir les valeurs
des colonnes par nom de colonne ou par position de colonne
dans l'interrogation.
stmt = conn.createStatement();
rset = stmt.executeQuery(
"SELECT ename FROM emp");
while (rset.next()) {
System.out.println
(rset.getString("ename"));
}
Traiter les rsultats de l'interrogation : Mthodes getXXX()
La classe ResultSet comporte plusieurs mthodes qui extraient les valeurs des colonnes
pour la ligne en cours. Chacune de ces mthodes getXXX() tente de convertir la valeur de la
colonne dans le type Java indiqu et renvoie une valeur Java approprie. Par exemple,
getInt() obtient la valeur de la colonne sous forme d'entier, getString() obtient la
valeur de la colonne sous forme de chane et getDate() renvoie la valeur de la colonne
sous forme de date.
La mthode next() renvoie true si une ligne a t trouve. Sinon, elle renvoie
false. Utilisez cette mthode pour dterminer si une ligne existe et pour parcourir les
lignes suivantes.
De nombreuses mthodes getXXX() permettent d'obtenir les valeurs des colonnes, XXX
tant un type de donnes Java. Par exemple, getString(pos) renvoie la colonne la
position pos en tant que type String, getInt(pos) renvoie la colonne la position
pos en tant que type int, et ainsi de suite.
Il existe un problme potentiel concernant les valeurs NULL dans la base de donnes
lorsque des mthodes getXXX (par exemple getInt) sont utilises. En effet, les
primitives Java ne prennent pas en charge les valeurs NULL. Vous avez gnralement
intrt utiliser java.sql.ResultSet.wasNull() pour dterminer si la valeur de
base de donnes est NULL

La mthode getXXX(x) est surcharge. x peut tre une valeur int (position dans
l'instruction Select) ou une valeur String (nom de colonne ou expression renvoye).
S'il s'agit d'une valeur String, la casse n'a pas d'importance.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-23
Copyright 2008, Oracle. Tous droits rservs.
ResultSet rset = stmt.executeQuery
("SELECT empno, hiredate, job
FROM emp");
while (rset.next()){
int id = rset.getInt(1);
Date hiredate = rset.getDate(2);
String job = rset.getString(3);
Mettre en correspondance des types de la base
de donnes avec des types Java
ResultSet met en correspondance les types de donnes
de la base avec les types Java :
empno
hiredate
job
NUMBER
DATE
VARCHAR2
getInt()
getDate()
getString()
Nom de la colonne Type Mthode
Mettre en correspondance des types de la base de donnes avec des types Java
Dans de nombreux cas, vous pouvez obtenir toutes les colonnes de l'ensemble de rsultats
l'aide des mthodes getObject() ou getString() de ResultSet. Pour des questions
de performances, ou parce que vous souhaitez effectuer des calculs complexes, il est parfois
important que le type des donnes corresponde exactement celui de la colonne de base de
donnes.
La section JDBC du tutoriel Java contient une matrice qui met en correspondance les
mthodes ResultSet.getXXX avec les types SQL ANSI. Pour chaque type SQL, la
matrice indique :
les mthodes getXXX qui peuvent tre utilises pour extraire le type SQL,
la mthode recommande.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-24
Mettre en correspondance les types de donnes de la base avec les types Java (suite)
Tableau des types SQL ANSI et des types Java
Le tableau suivant rpertorie les types SQL ANSI, le type de donnes Java correspondant, ainsi que
le nom de la mthode appeler dans ResultSet pour obtenir ce type de valeur de colonne :
Tableau des types SQL Oracle
Type SQL ANSI Type Java Mthode de ResultSet
CHAR, VARCHAR java.lang.String getString()
LONGVARCHAR java.io.InputStream getAsciiStream()
NUMERIC, DECIMAL java.math.BigDecimal getBigDecimal()
BIT boolean getBoolean()
TINYINT byte getByte()
SMALLINT short getShort()
INTEGER int getInt()
BIGINT long getLong()
REAL float getFloat()
DOUBLE, FLOAT double getDouble()
BINARY, VARBINARY byte[] getBytes()
LONGBINARY java.io.InputStream getBinaryStream()
DATE java.sql.Date getDate()
TIME java.sql.Time getTime()
TIMESTAMP java.sql.Timestamp getTimestamp()
Type SQL ORACLE Type Oracle Extension du type
NUMBER Oracle.Types.NUMBER oracle.sql.NUMBER
CHAR Oracle.Types.CHAR oracle.sql.CHAR
RAW Oracle.Types.RAW oracle.sql.RAW
DATE Oracle.Types.DATE oracle.sql.DATE
ROWID Oracle.Types.ROWID oracle.sql.ROWID
BLOB Oracle.Types.BLOB oracle.sql.BLOB
CLOB Oracle.Types.CLOB oracle.sql.CLOB
BFILE sans objet oracle.sql.BFILE
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-25
Copyright 2008, Oracle. Tous droits rservs.
Etape 6 : Nettoyer les ressources
Fermez explicitement les objets Connection, Statement et
ResultSet pour librer les ressources dont vous n'avez plus
besoin.
Appelez leurs mthodes close() respectives :
Connection conn = ...;
Statement stmt = ...;
ResultSet rset = stmt.executeQuery(
"SELECT ename FROM emp");
...
// clean up
rset.close();
stmt.close();
conn.close();
...
Fermer les objets ResultSet, Statement et Connection
Vous devez fermer explicitement tous les objets ResultSet et Statement une fois que
vous avez termin de les utiliser. Les mthodes close() nettoient la mmoire et librent les
curseurs de base de donnes. Si vous ne fermez pas explicitement les objets ResultSet et
Statement, d'importantes pertes de ressources mmoire peuvent se produire et la base de
donnes peut manquer de curseurs. Vous devez alors fermer la connexion.
Le pilote ct serveur s'excute dans une session par dfaut. Vous tes dj connect et vous
ne pouvez pas fermer la connexion par dfaut tablie par le pilote. L'appel de la mthode
close() sur la connexion n'a aucun effet.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-26
Copyright 2008, Oracle. Tous droits rservs.
Exemple d'interrogation de base
import java.sql.*;
import oracle.jdbc.driver.OracleDriver;
class TestJdbc {
public static void main (String args [ ]) throws
SQLException {
DriverManager.registerDriver (new
oracle.jdbc.OracleDriver());
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@myHost:1521:ORCL","scott",
"tiger");
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery
("SELECT ename FROM emp");
while (rset.next())
System.out.println (rset.getString ("ename"));
rset.close();
stmt.close();
conn.close();
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-27
Copyright 2008, Oracle. Tous droits rservs.
1. Crez un objet Statement vide.
2. Utilisez execute pour excuter l'instruction.
3. Traitez l'instruction en consquence.
boolean isQuery = stmt.execute(SQLstatement);
if (isQuery) { // was a query - process results
ResultSet r = stmt.getResultSet(); ...
}
else { // was an update or DDL - process result
int count = stmt.getUpdateCount(); ...
}
Grer une instruction SQL inconnue
Statement stmt = conn.createStatement();
Grer une instruction SQL inconnue
Une application ne peut pas savoir si une instruction donne renverra un ensemble de rsultats
tant que cette instruction n'a pas t excute. En outre, certaines procdures stockes peuvent
renvoyer des ensembles de rsultats et des nombres de mises jour diffrents.
JDBC fournit un mcanisme permettant une application d'excuter une instruction, puis de
traiter une voire plusieurs collections de rsultats et de nombres de mises jour. Ce
mcanisme est bas sur l'utilisation d'une mthode execute() gnrale, puis sur des appels
de trois autres mthodes : getResultSet, getUpdateCount et getMoreResults.
Ces mthodes permettent une application d'explorer un par un les rsultats de l'instruction,
puis de dterminer si un rsultat donn est un ensemble de rsultats ou un nombre de mises
jour.
execute() renvoie true si le rsultat de l'instruction est un ensemble de rsultats, false
si le rsultat de l'instruction est un nombre de mises jour. Vous pouvez alors appeler
getResultSet() ou getUpdateCount() sur l'instruction.
L'exemple qui suit utilise execute() pour excuter de manire dynamique une instruction
inconnue :
public void executeStmt (String statement) throws SQLException {
Statement stmt = conn.createStatement(); // Excuter l'instruction
boolean isQuery = stmt.execute(statement);
if (isQuery ) { <statement est une interrogation ; traiter les rsultats>
... }
else { <statement est une mise jour ou une instruction LDD>
int updateCount = stmt.getUpdateCount(); // Traiter les rsultats
... }
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-28
Copyright 2008, Oracle. Tous droits rservs.
Les instructions SQL peuvent gnrer une exception
java.sql.SQLException.
Utilisez les mthodes Java standard de gestion des
erreurs.
Traiter les exceptions
try {
rset = stmt.executeQuery("SELECT empno,
ename FROM emp");
}
catch (java.sql.SQLException e)
{ ... /* handle SQL errors */ }
...
finally { // clean up
try { if (rset != null) rset.close(); }
catch (Exception e)
{ ... /* handle closing errors */ }
...
Traiter les exceptions
Vous pouvez utiliser la structure de bloc try-catch-finally pour fermer les ressources.
Exemple de code
Connection conn = null; Statement stmt = null;
ResultSet rset = null; // initialize
stmt = conn.createStatement();
try {
rset = stmt.executeQuery("SELECT empno, ename FROM emp");
}
catch (java.sql.SQLException e)
{ ... /* handle errors */ }
...
// Clean up resources
finally {
try { if (rset != null) rset.close(); } catch (Exception e)
{}
try { if (stmt != null) stmt.close(); } catch (Exception e)
{}
try { if (conn != null) conn.close(); } catch (Exception e)
{}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-29
Copyright 2008, Oracle. Tous droits rservs.
Transactions avec JDBC
Par dfaut, les connexions sont tablies en mode
autocommit.
Utilisez conn.setAutoCommit(false) pour dsactiver
le mode autocommit.
Pour contrler les transactions lorsque le mode
autocommit est dsactiv, utilisez :
conn.commit() pour valider une transaction
conn.rollback() pour annuler une transaction
La fermeture d'une connexion valide la transaction, mme
si l'option autocommit est dsactive.
Transactions avec JDBC
Une fois que vous avez effectu une opration UPDATE ou INSERT dans un ensemble de
rsultats, vous propagez les modifications dans la base de donnes via une opration distincte,
que vous pouvez ignorer si vous souhaitez annuler les modifications.
Avec JDBC, les transactions de base de donnes sont gres par l'objet Connection.
Lorsqu'un objet Connection est cr, il fonctionne en mode autocommit, ce qui signifie
que chaque instruction est valide aprs son excution.
Vous pouvez changer le mode autocommit de la connexion tout moment en appelant
setAutoCommit(). Voici une description complte du mode autocommit :
Si une connexion est en mode autocommit, toutes ses instructions SQL sont excutes et
valides en tant que transactions individuelles.
Si une instruction renvoie un ensemble de rsultats, l'instruction se termine lorsque la
dernire ligne de l'ensemble de rsultats a t extraite ou lorsque l'ensemble de rsultats a
t ferm.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-30
Transactions avec JDBC (suite)
Si le mode autocommit a t dsactiv, ses instructions SQL sont regroupes en transactions,
lesquelles doivent tre termines via l'appel de commit() ou rollback(). La mthode
commit() rend permanentes toutes les modifications effectues depuis la validation (commit)
ou l'annulation (rollback) prcdente et libre les ventuels verrous de base de donnes dtenus
par la connexion.
La mthode rollback() supprime toutes les modifications effectues depuis la validation ou
l'annulation prcdente et libre les ventuels verrous de base de donnes. Les mthodes
commit() et rollback() ne doivent tre appeles que lorsque le mode autocommit est
dsactiv.
Remarque : Le pilote ct serveur ne prend pas en charge le mode autocommit. Vous devez
contrler les transactions de manire explicite.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-31
Copyright 2008, Oracle. Tous droits rservs.
Objet PreparedStatement
L'objet PreparedStatement empche la ranalyse
des instructions SQL.
Utilisez cet objet pour les instructions que vous
souhaitez excuter plusieurs fois.
L'objet PreparedStatement peut contenir des
variables que vous fournissez chaque fois que vous
excutez l'instruction.
Objet PreparedStatement
PreparedStatement est hrit de Statement. La diffrence est que l'objet
PreparedStatement contient des instructions SQL prcompiles.
Si vous excutez plusieurs fois un objet Statement, son instruction SQL est compile
chaque fois. PreparedStatement est plus efficace, car son instruction SQL est compile
une seule fois, lorsque vous prparez initialement l'objet. Ensuite, l'instruction SQL n'a pas
besoin d'tre recompile chaque fois que vous l'excutez dans PreparedStatement.
Par consquent, si vous devez excuter plusieurs fois la mme instruction SQL dans une
application, il est plus efficace d'utiliser PreparedStatement que Statement.
Paramtres de PreparedStatement
PreparedStatement ne doit pas ncessairement excuter exactement la mme
interrogation chaque fois. Vous pouvez indiquer des paramtres dans la chane SQL de
l'objet et indiquer les valeurs de ces paramtres lors de l'excution de l'instruction.
La diapositive qui suit explique comment fournir les paramtres et excuter un objet
PreparedStatement.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-32
Copyright 2008, Oracle. Tous droits rservs.
PreparedStatement pstmt =
conn.prepareStatement
("UPDATE emp SET ename = ? WHERE empno = ?");
PreparedStatement pstmt =
conn.prepareStatement
("SELECT ename FROM emp WHERE empno = ?");
Crer un objet PreparedStatement
1. Enregistrez le pilote et crez la connexion de base de
donnes.
2. Crez l'objet PreparedStatement, en identifiant les
variables avec un point d'interrogation (?).
Crer un objet PreparedStatement
Pour crire les modifications dans la base de donnes, par exemple pour les oprations
INSERT ou UPDATE, vous crez gnralement un objet PreparedStatement. Vous
pouvez utiliser cet objet pour excuter une instruction avec divers jeux de paramtres d'entre.
La mthode prepareStatement() de votre objet JDBC Connection vous permet de
dfinir une instruction qui accepte des paramtres de type variable attache (bind variable) et
renvoie un objet JDBC PreparedStatement avec la dfinition de l'instruction.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-33
Copyright 2008, Oracle. Tous droits rservs.
1. Indiquez les valeurs des variables.
2. Excutez l'instruction.
pstmt.setXXX(index, value);
pstmt.executeQuery();
pstmt.executeUpdate();
int empNo = 3521;
PreparedStatement pstmt =
conn.prepareStatement("UPDATE emp
SET ename = ? WHERE empno = ? ");
pstmt.setString(1, "DURAND");
pstmt.setInt(2, empNo);
pstmt.executeUpdate();
Excuter un objet PreparedStatement
Dfinir des valeurs pour les variables attaches (bind variables)
Utilisez les mthodes PreparedStatement.setXXX() pour fournir les valeurs des
variables indiques dans un objet PreparedStatement. Il existe une mthode
setXXX() pour chaque type Java : setString(), setInt(), etc.
Vous devez utiliser la mthode setXXX() compatible avec le type SQL de la variable. Dans
l'exemple de la diapositive ci-dessus, la premire variable met jour une colonne VARCHAR,
de sorte que vous devez utiliser setString() pour fournir la valeur de la variable. Vous
pouvez utiliser setObject() avec n'importe quel type de variable.
Chaque variable comporte un index. L'index de la premire variable de l'objet
PreparedStatement est 1, l'index de la deuxime variable est 2, etc. S'il n'y a qu'une
seule variable, son index est 1. L'index d'une variable est transmis la mthode setXXX().
Fermer un objet PreparedStatement
L'objet PreparedStatement n'est pas mis en mmoire cache. Si vous le fermez, vous
devez recommencer.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-34
Copyright 2008, Oracle. Tous droits rservs.
Objet DataSource
Caractristiques d'un objet DataSource :
C'est la reprsentation d'une source de donnes
(systme de stockage de donnes physique) dans le
langage de programmation Java.
Il peut rsider sur un serveur distant ou un ordinateur
de bureau local.
Il est en quelque sorte la fabrique des connexions la
source de donnes concrte reprsente par une de
ses instances.
Il peut ventuellement tre li des entits JNDI
(Java Naming and Directory), ce qui permet d'accder
aux bases de donnes via des noms logiques pour
plus de commodit et de portabilit.
Objet DataSource
Les objets Java DataSource reprsentent des systmes de stockage de donnes physiques
tels que des bases de donnes relationnelles. C'est au travers d'objets
javax.sql.DataSource qu'une application peut extraire les connexions sous-jacentes
aux bases de donnes reprsentes par l'objet DataSource.
L'interface DataSource fournit une alternative la classe DriverManager pour tablir
une connexion avec une source de donnes. (Un exemple d'utilisation de la classe
DriverManager vous a t fourni dans la section "Etape 2" de ce chapitre.) Le mcanisme
DataSource est dsormais privilgi par rapport la fonctionnalit DriverManager car
il offre davantage de souplesse et une approche plus normalise. Vous pouvez utiliser les deux
approches dans la mme application, mais il est recommand d'adopter progressivement
l'interface DataSource. Sun Microsystems va probablement finir par abandonner
DriverManager, ainsi que les classes et fonctionnalits associes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-35
Copyright 2008, Oracle. Tous droits rservs.
Avantages des objets DataSource
L'utilisation d'un objet DataSource pour tablir une
connexion la base de donnes prsente plusieurs
avantages :
Il n'est pas ncessaire pour les applications de coder
en dur une classe de pilote.
Il est possible de modifier les proprits d'une source
de donnes sans toucher au code de l'application.
La concentration des connexions et les transactions
distribues sont disponibles via un objet DataSource
implment pour fonctionner avec l'infrastructure du
niveau intermdiaire (middle-tier).
Avantages des objets DataSource
L'utilisation de DriverManager pour la connexion une source de donnes rduit la
portabilit, puisque l'application doit identifier une classe de pilote JDBC spcifique et l'URL
associe (voir plus haut dans ce chapitre). Le nom de classe et l'URL du pilote sont propres
un fournisseur, une implmentation de pilote et une source de donnes JDBC. Par consquent,
si un dtail relatif la source de donnes ou au pilote change, il convient de modifier le code
de l'application en consquence. Si vous avez besoin d'applications portables d'une source de
donnes une autre, l'interface DataSource offre des avantages intressants. Un objet
DataSource fonctionne avec un service de noms JNDI (Java Naming and Directory
Interface). Il est cr, dploy et gr en dehors des applications qui l'utilisent. Le fait d'tre
enregistr dans un service de noms JNDI octroie l'objet DataSource deux avantages
importants par rapport DriverManager. D'une part, le programmeur n'a pas coder en
dur les informations relatives au pilote (comme c'est le cas avec DriverManager). Il peut
choisir un nom logique pour la source de donnes et l'enregistrer dans un service de noms
JNDI. L'application utilise ce nom logique et le service de noms JNDI fournit l'objet
DataSource correspondant. L'objet DataSource peut ensuite tre utilis pour crer une
connexion la source de donnes qu'il reprsente.
D'autre part, la fonctionnalit DataSource permet aux dveloppeurs d'implmenter une
classe DataSource afin de tirer parti de fonctionnalits telles que la concentration des
connexions et les transactions distribues. La concentration des connexions permet
d'amliorer considrablement les performances du code en rutilisant les connexions
existantes au lieu de crer une connexion pour rpondre chaque demande. Les transactions
distribues permettent de prendre en charge les nombreuses oprations de base de donnes des
grandes entreprises.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-36
Copyright 2008, Oracle. Tous droits rservs.
Utiliser un objet OracleDataSource pour la
connexion une base de donnes
Trois tapes sont ncessaires pour utiliser un objet
OracleDataSource :
1. Crer un objet OracleDataSource de la classe
oracle.jdbc.pool.OracleDataSource
2. Dfinir les attributs de l'objet OracleDataSource
l'aide des mthodes set dfinies dans la classe
3. Etablir la connexion la base de donnes via l'objet
OracleDataSource l'aide de la mthode
getConnection()
Utiliser un objet OracleDataSource pour la connexion une base de donnes
Les fournisseurs de pilotes proposent des implmentations de DataSource. Un objet
DataSource reprsente une source de donnes physique particulire, et chaque connexion
cet objet cre une connexion la source en question. Oracle fournit une implmentation
OracleDataSource.
Procdure de connexion une base de donnes l'aide d'un objet
OracleDataSource :
1. Crez un objet de la classe oracle.jdbc.pool.OracleDataSource :
OracleDataSource myDataSource = new OracleDataSource();
2. Avant d'utiliser l'objet OracleDataSource, vous devez prciser les dtails de la
connexion en dfinissant un certain nombre d'attributs l'aide des diffrentes mthodes
set de la classe. Ces dtails comprennent notamment le nom de la base de donnes et le
pilote JDBC utiliser. La classe oracle.jdbc.pool.OracleDataSource
implmente l'interface javax.sql.DataSource qui dfinit un ensemble d'attributs.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-37
Utiliser un objet OracleDataSource pour la connexion une base de donnes (suite)
myDataSource.setServerName("localhost");
myDataSource.setDatabaseName("ORCL");
myDataSource.setDriverType("thin");
myDataSource.setNetworkProtocol("tcp");
myDataSource.setPortNumber(1521);
myDataSource.setUser("scott");
myDataSource.setPassword("tiger");
Les lignes suivantes illustrent l'utilisation de quelques mthodes get permettant de lire les attributs
dfinis prcdemment :
String serverName = myDataSource.getServerName();
String databaseName = myDataSource.getDatabaseName();
String driverType = myDataSource.getDriverType();
3. La troisime tape consiste tablir la connexion la base de donnes l'aide de l'objet
OracleDataSource. Pour cela, vous appelez la mthode getConnection() :
Connection myConnection = myDataSource.getConnection();
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-38
Copyright 2008, Oracle. Tous droits rservs.
Optimisation des accs la base de donnes via
la concentration des connexions
Utilisez la concentration des connexions pour limiter
les cots lis la cration et la fermeture de
sessions.
Utilisez la dclaration explicite de la source de
donnes pour la rfrence physique la base.
Utilisez la mthode getConnection() pour obtenir
une instance de connexion logique.
Optimisation des accs la base de donnes via la concentration des
connexions
Un pool de connexions est un cache de connexions de base de donnes. Il est gr en
mmoire, ce qui permet la rutilisation des connexions. Cette technique est importante pour
amliorer les performances, en particulier lorsque l'API JDBC est utilise dans un
environnement de niveau intermdiaire (middle-tier).
La concentration des connexions n'affecte pas le code de l'application. Cette dernire accde
simplement une source de donnes JDBC et l'utilise de manire standard. La source de
donnes implmente la concentration des connexions de manire transparente pour
l'application, via les fonctions PooledConnection et ConnectionPoolDataSource
offertes par le pilote JDBC 2.0.
javax.sql.ConnectionPoolDataSource est une implmentation de
DataSource qui fournit des fonctionnalits de concentration des connexions. Elle
utilise une classe qui implmente l'interface ConnectionPoolDataSource.
ConnectionPoolDataSource est une fabrique d'objets PooledConnection.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-39
Optimisation des accs la base de donnes via la concentration des connexions
(suite)
javax.sql.PooledConnection : Les objets regroups dans un pool par une classe
DataSource assortie de fonctionnalits de concentration des connexions implmentent
l'interface PooledConnection. Lorsque l'application demande une connexion l'objet
DataSource, celui-ci repre un objet PooledConnection disponible ou (si le pool est
vide) obtient un nouvel objet de son interface ConnectionPoolDataSource. La classe
PooledConnection fournit une mthode getConnection() qui renvoie un objet
Connection. L'objet DataSource appelle cette mthode et renvoie l'objet Connection
l'application. Cet objet Connection se comporte comme une connexion normale, cette
diffrence prs : lorsque l'application appelle la mthode close(), il informe la classe
PooledConnection laquelle il appartient qu'il n'est plus utilis (au lieu de fermer la
connexion la base de donnes). La classe PooledConnection transmet l'information la
classe DataSource qui renvoie l'objet PooledConnection dans le pool.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-40
Copyright 2008, Oracle. Tous droits rservs.
Base de
donnes
Commandes
de base de
donnes
Source de donnes
ConnectionPoolDataSource
Servlet Java
Code serveur du niveau
intermdiaire
Niveau intermdiaire
Concentration des connexions
Pilote JDBC
Concentration des connexions
Si vous utilisez la concentration des connexions, vous devez faire appel un objet
DataSource (plutt qu' la classe DriverManager) pour obtenir une connexion. Cet
objet est implment et dploy de faon crer des connexions regroupes dans un pool.
Remarque : La concentration des connexions est prise en charge par les pilotes JDBC thin et
OCI des versions JDK 1.1 et JDK 1.2. Elle n'est pas prise en charge pour le pilote serveur, car
ce dernier ne peut comporter qu'une seule connexion, qui est tablie avec la session connecte
dans laquelle il s'excute.
Exemple simple d'utilisation d'une connexion appartenant un pool
import java.sql.*;
import javax.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.*;
class PooledConnection1
{
public static void main (String args [])
throws SQLException {
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-41
Concentration des connexions (suite)
Exemple simple d'utilisation d'une connexion appartenant un pool (suite)
// Create an OracleConnectionPoolDataSource instance
OracleConnectionPoolDataSource ocpds =
new
OracleConnectionPoolDataSource();
String url = "jdbc:oracle:thin:@myhost";
try {
String url1 = System.getProperty("JDBC_URL");
if (url1 != null)
url = url1;
} catch (Exception e) {
// If there is any security exception,
// ignore it and use the default
}
// Set connection parameters
ocpds.setURL(url);
ocpds.setUser("scott");
ocpds.setPassword("tiger");
// Create a pooled connection
PooledConnection pc = ocpds.getPooledConnection();
// Get a logical connection
Connection conn = pc.getConnection();
// Create a Statement
Statement stmt = conn.createStatement ();
// Select the ENAME column from the EMP table
ResultSet rset = stmt.executeQuery ("select ENAME from
EMP");
// Iterate through the result set and print the employee names
while (rset.next())
System.out.println (rset.getString (1));
// Close the ResultSet
rset.close();
rset = null;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-42
Concentration des connexions (suite)
Exemple simple d'utilisation d'une connexion appartenant un pool (suite)
// Close the Statement and logical connection
stmt.close();
stmt = null;
conn.close();
conn = null;
// Get another logical connection using the same pooled
connection
conn = pc.getConnection();
// Create another statement and run another query against the
database

// Close the ResultSet


// Close the Statement and logical connection
// Finally close the pooled connection
pc.close();
pc = null;
}
}
Remarque : Une instance issue d'un pool de connexions est gnralement cense produire une srie
d'instances de connexion au cours de son existence, mais une seule de ces instances peut tre ouverte
la fois. Chaque appel de la mthode getConnection() d'une instance de connexion membre
d'un pool renvoie une nouvelle instance de connexion et ferme toute instance pralablement renvoye
par le mme pool. Vous devez toutefois fermer explicitement toute instance de connexion
prexistante avant d'en ouvrir une nouvelle. Lorsque vous appelez la mthode close() d'une
instance de connexion appartenant un pool, vous fermez la connexion physique la base de
donnes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-43
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
charger un pilote JDBC et l'enregistrer
utiliser le pilote pour tablir la connexion une base
de donnes Oracle
excuter une instruction SELECT simple
traiter les rsultats de l'interrogation en effectuant une
itration sur les lignes d'un ensemble de rsultats
crer et utiliser un objet PreparedStatement
utiliser un objet OracleDataSource pour la
connexion une base de donnes
utiliser une connexion appartenant un pool
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-44
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 15 :
Utiliser JDBC pour accder la base de donnes
Dans cet exercice, vous allez :
configurer l'environnement Java pour JDBC
ajouter des composants JDBC afin d'interroger la base
de donnes
Prsentation de l'exercice 15 : Utiliser JDBC pour accder la base de donnes
L'objectif de cet exercice est d'utiliser l'application du cours pour interagir avec la base de
donnes Oracle. Au cours de cet exercice, vous allez tablir une connexion avec la base de
donnes, crer des instructions d'interrogation afin d'y accder et extraire des informations
que vous intgrerez dans l'application.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les15, chargez
l'application OrderEntryApplicationLes15, puis continuez.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Conception d'interface graphique : Utiliser
Swing pour planifier la prsentation d'une
application
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
expliquer AWT (Abstract Windowing Toolkit), Swing et JFC
(Java Foundation Classes)
dcrire la hirarchie de conteneurs d'interface graphique
Swing
dcrire l'utilisation des gestionnaires de prsentation
utiliser des conteneurs d'interface graphique pour regrouper
des composants au sein d'une application
intgrer des composants d'interface graphique dans des
conteneurs d'interface graphique
utiliser la prsentation la carte Swing
Objectifs
Ce chapitre explique comment ajouter vos applications Java des fonctionnalits d'interface
graphique et d'interactivit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-3
Copyright 2008, Oracle. Tous droits rservs.
Classes AWT, Swing et JFC
AWT, ou Abstract Windowing Toolkit (java.awt)
Bibliothque d'interface graphique
Prdcesseur des composants Swing et fondement de
Swing et JFC
Swing (javax.swing)
Bibliothque d'interface graphique plus puissante
Bas sur la hirarchie des classes AWT
JFC (Java Foundation Classes)
Ensemble d'API comprenant : AWT, Swing, l'API
d'accessibilit et la prsentation la carte
API Java 2D, prise en charge du glisser-dplacer
(depuis JDK 1.2)
Classes AWT, Swing et JFC
AWT (Abstract Windowing Toolkit) (java.awt)
AWT constituait le jeu initial de composants graphiques de Java, destin au dveloppement
d'applications avec interface graphique. Il a servi de base l'laboration de Swing et des
autres composants JFC (Java Foundation Classes). AWT n'tait pas conu pour le
dveloppement d'interfaces graphiques puissantes et offrait un jeu de composants restreint.
Les classes AWT se trouvent dans le package java.awt et dans ses sous-packages.
Swing (javax.swing)
Swing offre des composants lgers bass sur la bibliothque AWT. Conu pour des interfaces
graphiques puissantes, il fournit beaucoup d'autres composants qui sont plus efficaces que
leurs quivalents AWT. Les composants Swing sont conformes au modle de gestion des
vnements AWT introduit dans le kit JDK 1.1. Les classes Swing se trouvent dans le
package javax.swing et dans ses sous-packages.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-4
Classes AWT, Swing et JFC (suite)
JFC (Java Foundation Classes)
JFC est un jeu de classes et d'API dont la premire version a t publie avec JDK 1.1. La
version de JFC incluse dans le kit JDK 1.2 contient les lments suivants :
Les composants AWT et Swing.
L'API d'accessibilit pour les personnes handicapes.
La prsentation la carte, qui permet d'adapter la prsentation d'une interface graphique
celle du systme d'exploitation.
L'API Java 2D pour les graphiques et images deux dimensions.
La prise en charge du glisser-dplacer.
Swing tant le composant principal de JFC, les termes Swing et JFC sont souvent utiliss
indiffremment. Oracle JDeveloper (11g) prend en charge le kit JDK 1.5 et, par consquent,
toutes les fonctionnalits de Swing.
Remarque : Vous pouvez crer des applications client Java bases sur des composants Swing
standard dans votre application. Dans Jdeveloper, l'application client Java est appele application
Client. Lorsqu'un panneau Client est dploy sur un ordinateur client, les utilisateurs peuvent
l'employer pour afficher et manipuler les donnes du panneau. Ce cours ne traite pas de Java
Client. Il explique simplement comment dvelopper des applications Java l'aide de JDeveloper.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-5
Copyright 2008, Oracle. Tous droits rservs.
JButton JSlider JTree
JRadioButton JTextField JCheckBox
Fonctionnalits de Swing
Swing est un jeu de composants graphiques qui existent
depuis le kit JDK 1.1 et font partie du kit JDK standard
depuis la version 1.2.
Composants lgers, compars AWT
API de prsentation la carte
Beaucoup plus de composants que AWT
Fonctionnalits de Swing
Les composants Swing font tous partie du package javax.swing apparu dans le kit
JDK 1.2. Swing a transform les solutions Java de dveloppement d'interfaces graphiques en
fournissant des composants lgers pouvant s'adapter la prsentation du systme
d'exploitation sur lequel l'application s'excute. S'agissant de l'interaction avec l'utilisateur,
Swing offre beaucoup plus de types de composant d'interface graphique que AWT.
Composants lgers et composants lourds
Les composants Swing sont considrs comme lgers, ce qui signifie qu'ils sont affichs
(gnrs graphiquement) dans leur fentre conteneur. Autrement dit, ils sont crs au sein de
l'environnement Java. La fentre conteneur est gnralement une fentre native (du systme
d'exploitation). En revanche, les composants AWT sont lourds, ce qui signifie que chacun
s'affiche dans sa propre fentre native. Les composants Swing sont donc plus petits et plus
efficaces que leurs quivalents AWT.
Prsentation la carte
Les dveloppeurs peuvent utiliser la fonctionnalit de prsentation la carte de Swing pour
dfinir la prsentation des applications dveloppes avec des composants Swing. Par dfaut,
la prsentation utilise est celle de Java (appele prsentation Metal). L'API de prsentation
la carte vous permet de dvelopper une application qui utilise la prsentation native de la
plate-forme sur laquelle elle s'excute, quelle qu'elle soit, ou de dvelopper votre propre
prsentation.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-6
Copyright 2008, Oracle. Tous droits rservs.
Composants lgers et composants lourds
Composants lgers
Aucune dpendance par
rapport au code natif
homologue
Possibilit d'utiliser des
arrire-plans transparents
La plupart des composants
Swing sont lgers
Ils ne s'affichent pas
ncessairement sous forme
rectangulaire
Affichage dans un conteneur
lourd requis
Composants lourds
Forte dpendance par
rapport au code natif
homologue
Chaque composant
s'affiche dans sa propre
fentre opaque
Les anciens composants
AWT taient pour la plupart
lourds
Certains composants
Swing de premier niveau
sont inclus (JFrame,
JApplet, JDialog)
Composants lgers et composants lourds
Les composants lourds ont t dvelopps dans les versions antrieures du kit AWT. Chaque
composant lourd est troitement associ un composant homologue natif dans
l'environnement client. Lors de l'affichage, chaque composant lourd cre sa propre fentre
native opaque. Tous les conteneurs de premier niveau sont lourds et offrent un contexte pour
les conteneurs et composants lgers.
Les composants lgers doivent au final tre affichs dans des conteneurs lourds de premier
niveau, tels que JFrame, JApplet ou JDialog. Cependant, les composants lgers sont
visuellement plus souples, car ils peuvent tre transparents et apparatre sous une forme non
rectangulaire. Ces fonctionnalits permettent une adaptation facile des composants lgers
une prsentation diffrente. Les composants lgers ne possdent pas d'homologue natif, tant
donn qu'ils sont affichs directement par le code Java. Il en rsulte que les composants lgers
sont plus portables.
Remarque : En rgle gnrale, il vaut mieux viter de mlanger les composants lgers et
lourds de bas niveau, tels que les boutons, les champs de texte, etc. Autrement dit, vitez
d'utiliser des composants AWT et Swing dans le mme conteneur graphique ou dans la mme
application.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-7
Copyright 2008, Oracle. Tous droits rservs.
Planifier la prsentation de l'interface graphique
La cration d'une application avec interface graphique implique
une certaine planification, a fortiori lors de la cration
d'applications Swing. La planification ncessite la
comprhension des concepts suivants et de leurs relations :
La hirarchie de conteneurs d'interface graphique
(un composant racine constitu de conteneurs et de
composants imbriqus)
Les niveaux et types de conteneur (tels que les conteneurs
de premier niveau et intermdiaires)
Les gestionnaires de prsentation ainsi que les types
correspondants (utiliss par chaque conteneur)
Les composants pouvant tre ajouts aux conteneurs
Planifier la prsentation de l'interface graphique
Avant de crer une application d'interface graphique Java, qu'elle soit autonome ou (telle une
applet) intgre dans un navigateur, il convient d'acqurir quelques notions de base :
La hirarchie de conteneurs d'interface graphique Java, qui fournit une couche de
conteneurs imbriqus dans d'autres conteneurs et des composants imbriqus dans les
conteneurs.
Les types de conteneur Java et leurs relations dans la hirarchie de conteneurs.
Le concept de gestionnaire de prsentation et les types correspondants.
Les composants pouvant tre ajouts aux conteneurs.
La plupart des applications graphiques comportent une zone d'affichage principale
(gnralement une fentre principale ou la zone d'affichage de l'applet dans un navigateur
Web). En langage Java, la fentre principale ou la zone d'affichage d'une applet est appele
conteneur de premier niveau. Un conteneur de premier niveau est considr comme la racine
de la hirarchie de conteneurs de cette fentre ou de cette zone.
Remarque : Une application peut tre constitue de nombreuses fentres de premier niveau.
Une fentre principale peut tre divise en rgions ou sections (reprsentes par des
conteneurs intermdiaires), puis en composants qui contiennent les donnes utilisateur ou qui
permettent l'utilisateur de saisir des donnes. Ces composants sont positionns dans les
conteneurs de premier niveau ou dans les conteneurs intermdiaires. Les conteneurs
intermdiaires et de premier niveau forment ensemble une hirarchie de conteneurs.
Chaque conteneur utilise un gestionnaire de prsentation pour contrler la taille et la
disposition des composants dans le conteneur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-8
Copyright 2008, Oracle. Tous droits rservs.
La hirarchie de conteneurs Swing
Conteneurs de premier niveau
Cadre
Bote de dialogue
Applet
Conteneurs intermdiaires
Panneau
Volet de dfilement
Composants atomiques
Libell
Elment de type texte
Bouton
Panneau
Composants atomiques
Cadre
La hirarchie de conteneurs Swing
La diapositive ci-dessus rpertorie les trois niveaux de conteneurs des composants Swing
couramment utiliss dans les applications : conteneurs de premier niveau, conteneurs
intermdiaires et composants atomiques.
Les conteneurs de premier niveau, par exemple une fentre d'application principale,
fournissent un emplacement permettant l'affichage des autres composants Swing. Ils ne
peuvent pas tre placs dans un autre conteneur de premier niveau et ils contiennent
gnralement un conteneur intermdiaire appel volet de contenu. Les conteneurs de premier
niveau couramment utiliss sont JFrame, JDialog et JApplet.
Les conteneurs intermdiaires simplifient la faon d'organiser les lments graphiques dans
un conteneur de premier niveau et peuvent contenir d'autres composants intermdiaires ainsi
que des composants atomiques de bas niveau. Par exemple, un panneau (parfois appel volet)
peut tre imbriqu dans un autre panneau. Les conteneurs intermdiaires les plus courants
sont JPanel, JScrollPane, JSplitPane et JToolBar.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-9
La hirarchie de conteneurs Swing (suite)
Les composants atomiques sont des entits autosuffisantes (ou widgets) utilises pour prsenter
des informations l'utilisateur ou pour permettre ce dernier de saisir des donnes. Parmi les
composants atomiques les plus courants, citons JButton, JLabel et JTextField (illustrs
dans la diapositive prcdente). Il existe de nombreux composants atomiques pour le texte, les
listes modifiables, les cases cocher, les tableaux et les listes, pour n'en citer que quelques-uns.
Remarque : La diapositive illustre la hirarchie de conteneurs dtaille ci-dessous :
Cadre (frame) (conteneur de premier niveau contenant un )
Panneau (conteneur intermdiaire, qui contient )
Libell
Champ de texte
Bouton
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-10
Copyright 2008, Oracle. Tous droits rservs.
Conteneurs de premier niveau
Swing fournit JFrame, JDialog et JApplet dont les
proprits sont modifiables, notamment :
les volets de contenu pour les conteneurs intermdiaires
ou les composants, l'aide des mthodes
getContentPane() ou setContentPane()
les bordures, l'aide d'une mthode setBorder()
les titres, l'aide d'une mthode setTitle()
les dcorations de fentre, telles que des boutons de
fermeture et de rduction (applets exclues)
AWT fournit Frame, Dialog et Applet
Ceux-ci ne fournissent pas de proprits telles que le
volet de contenu ou les bordures.
Conteneurs de premier niveau
Chaque application Swing comporte au moins un conteneur ou cadre de premier niveau. Le
conteneur de premier niveau peut tre une instance de JFrame, JDialog ou JApplet. Il
est facile de personnaliser le volet de contenu de premier niveau afin d'ajouter une bordure ou
de dfinir le gestionnaire de prsentation. Cependant, l'utilisation des mthodes du volet de
contenu de premier niveau est dlicate. Les mthodes des conteneurs de premier niveau
renvoient un objet Container et non un objet JComponent. Cela signifie que vous devez
transtyper la valeur renvoye par les mthodes afin de pouvoir les utiliser.
Il existe un moyen plus simple d'obtenir les mmes rsultats. Il consiste crer votre propre
volet de contenu, gnralement l'aide d'un objet JPanel. Vous appelez ensuite la mthode
JFrame setContentPane() afin de dfinir le volet de contenu de premier niveau en tant
que JPanel personnalis. Vous disposez alors d'un contrle intgral sur le volet de contenu,
sans les restrictions du conteneur racine ou de premier niveau.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-11
Conteneurs de premier niveau (suite)
L'exemple suivant cre un conteneur de premier niveau l'aide d'un objet JFrame, ainsi qu'un
conteneur intermdiaire en tant que JPanel. Une fois le panneau personnalis via le
changement du gestionnaire de prsentation et l'application d'une bordure, le volet de contenu du
conteneur de premier niveau est modifi afin d'utiliser ce panneau, via l'appel de la mthode
setContentPane() :
JFrame topLevelContainer = new JFrame();
JPanel myContentPane = new JPanel();
myContentPane.setLayout(new BorderLayout());
myContentPane.setBorder(new
LineBorder(Color.lightGray,0));
topLevelContainer.setContentPane(myContentPane); // or
topLevelContainer.getContentPane().add(myContentPane);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-12
Copyright 2008, Oracle. Tous droits rservs.
Conteneurs intermdiaires
Ils sont conus pour contenir des composants (ou des
conteneurs). Ils peuvent tre imbriqus dans d'autres
conteneurs.
Types de conteneur intermdiaire utiliss :
Panneaux, pour le regroupement de conteneurs ou de
composants
Volets de dfilement, pour ajouter des barres de dfilement
autour des composants taille variable, tels que les listes et
les zones de texte
Volets diviss, pour afficher deux composants dans une zone
fixe, ajustable par l'utilisateur
Volets onglets, pour contenir plusieurs composants et n'en
afficher qu'un seul la fois, en fonction de la slection de
l'utilisateur
Barres d'outils, pour le regroupement de composants tels
que des boutons
Cadres internes, pour les fentres imbriques
Conteneurs intermdiaires
Le niveau suivant des conteneurs Swing est uniquement destin contenir d'autres
composants. Ces conteneurs peuvent recevoir n'importe quel autre composant Swing, y
compris d'autres conteneurs. L'imbrication de conteneurs intermdiaires dans d'autres
conteneurs vous permet de contrler la prsentation de votre application. Cette technique est
dcrite plus loin dans ce chapitre.
Les conteneurs intermdiaires sont les suivants :
Panneaux : Il s'agit des conteneurs intermdiaires les plus frquemment utiliss. Ils sont
implments par l'intermdiaire de la classe JPanel. Ils sont gnralement utiliss pour
regrouper des composants en vue d'une prsentation logique pour l'utilisateur. Un
conteneur JPanel peut utiliser n'importe quel gestionnaire de prsentation (par dfaut,
il utilise FlowLayout) et vous pouvez lui affecter n'importe quelle bordure.
Volets de dfilement : Ils fournissent des barres de dfilement autour de composants de
grande taille ou dont la taille est susceptible d'voluer. Ils sont implments par
l'intermdiaire de JScrollPane.
Volets diviss : Ce type de conteneur permet de prsenter deux composants dans un
espace fixe, en laissant l'utilisateur ajuster l'espace ddi chaque lment. Les volets
diviss sont implments par l'intermdiaire de JSplitPane.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-13
Conteneurs intermdiaires (suite)
Volets onglets : Ce type de conteneur possde plusieurs composants, mais il permet
l'utilisateur de n'en voir qu'un seul la fois. L'utilisateur peut basculer entre les composants
en cliquant sur les onglets. Les onglets sont implments par l'intermdiaire de
JTabbedPane.
Barres d'outils : Les instances de JToolBar admettent plusieurs composants et peuvent
tre repositionnes par l'utilisateur.
Cadres internes : Les conteneurs de premier niveau peuvent prendre en charge des fentres
ou cadres internes, implments par l'intermdiaire de JInternalFrame, dont
l'utilisation est optimale avec un conteneur JDesktopPane.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-14
Copyright 2008, Oracle. Tous droits rservs.
Composants atomiques
Boutons
Cases cocher
Listes modifiables
Zones de texte
Listes
Libells
Composants atomiques
Les composants atomiques ont pour seule vocation l'affichage ou l'acquisition d'informations.
Ils ne servent pas de conteneur pour d'autres composants. Les composants atomiques hritent
de JComponent et prennent donc en charge les fonctions standard des composants, telles
que les bordures et les info-bulles.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-15
Copyright 2008, Oracle. Tous droits rservs.
Prsentation des gestionnaires de prsentation
Border Grid
Flow GridBag
Prsentation des gestionnaires de prsentation
Les gestionnaires de prsentation permettent de contrler le positionnement des composants
dans un conteneur lors de l'excution. Chaque conteneur possde un gestionnaire de
prsentation par dfaut. Celui-ci contrle la prsentation et la position des composants dans le
conteneur. Cependant, chaque composant peut fournir des conseils (Hints) son sujet afin
d'assister le gestionnaire de prsentation, par exemple en ce qui concerne sa taille et sa
position prfres.
Java offre de nombreux gestionnaires de prsentation, dont les suivants qui sont couramment
utiliss :
java.awt.BorderLayout, qui est le gestionnaire par dfaut des conteneurs
JFrame, organise le conteneur en cinq zones appeles nord, sud, est, ouest et centre.
java.awt.FlowLayout, qui est le conteneur par dfaut de JPanel, organise les
lments de gauche droite, puis de haut en bas. Les lignes peuvent tre centres (par
dfaut), justifies droite ou justifies gauche.
java.awt.GridLayout positionne les lments dans les lignes et les colonnes d'une
grille, dans des cellules de mme taille.
java.awt.GridBagLayout place les lments dans les lignes et les colonnes d'une
grille, dans des cellules de tailles diffrentes. Ce gestionnaire offre le niveau de souplesse
et de complexit le plus lev. Il permet de positionner des composants sur plusieurs
lignes et colonnes.
javax.swing.BoxLayout organise les lments dans une pile horizontale ou
verticale.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-16
Prsentation des gestionnaires de prsentation (suite)
Vous pouvez affecter la valeur null la proprit layout d'un conteneur pour forcer celui-ci
n'utiliser aucun gestionnaire de prsentation avec les rgles dcrites. Dans ce cas, le composant
d'interface graphique est contrl par positionnement absolu, c'est--dire avec une position et une
taille en pixels spcifiques. Le positionnement absolu est insensible aux changements de forme
du conteneur de premier niveau lors de l'excution. Cependant, il peut tre utile (lors de la
conception) de permettre un contrle prcis du positionnement et de la taille de chaque
composant.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-17
Copyright 2008, Oracle. Tous droits rservs.
Gestionnaire Border
Il comporte cinq zones : nord, sud, est, ouest et centre.
La zone centrale s'tend afin de remplir l'espace disponible.
Un seul composant s'affiche dans chaque zone.
Chaque zone peut contenir des panneaux intermdiaires.
Gestionnaire Border
Le gestionnaire Border offre cinq zones pour les composants : nord, sud, est, ouest et centre.
Si l'utilisateur agrandit la fentre, la zone centrale s'tend afin d'utiliser tout l'espace possible.
Les autres zones ne s'tendent que dans les proportions ncessaires pour remplir l'espace
disponible. Par exemple, si l'utilisateur largit le cadre, le centre s'tend horizontalement, mais
pas les zones est et ouest. En revanche, la zone sud s'tend afin de remplir la nouvelle fentre.
Chaque zone affiche un seul composant. Pour contourner cette restriction et faire de Border
un gestionnaire de prsentation utile, ajoutez des conteneurs dans les zones, plutt que des
composants atomiques. La plupart des panneaux recourant au gestionnaire Border n'utilisent
qu'une ou deux des zones, telles que le centre et le sud. Le sud peut tre utilis pour une barre
d'outils ou de navigation, tandis que le centre peut contenir un panneau regroupant tous les
composants de donnes. Cette technique est utile pour crer un cadre redimensionnable.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-18
Copyright 2008, Oracle. Tous droits rservs.
Gestionnaire GridBag
Il est bas sur une grille.
Il permet aux composants de s'tendre sur plusieurs lignes
et colonnes.
Il permet l'utilisation de lignes et de colonnes de diffrentes
tailles.
Il utilise la taille prfre des composants pour contrler
la taille des cellules.
Gestionnaire GridBag
Le gestionnaire GridBag est le plus souple et le plus complexe des gestionnaires de
prsentation. Sa souplesse est lie au fait que les composants peuvent s'tendre sur plusieurs
lignes et colonnes. En outre, les composants peuvent fournir des conseils ou suggestions quant
leurs prfrences d'affichage. Par exemple, un composant peut indiquer l'espace qui doit
automatiquement tre dfini autour de lui, la fois l'intrieur et l'extrieur de la cellule du
composant. Vous pouvez galement prciser des tailles minimale, maximale et prfre pour
chaque composant.
Les composants peuvent s'tendre sur plusieurs cellules dans les deux directions (ligne et
colonne). La taille des lignes et des colonnes est dtermine par celle des composants qui
occupent la ligne et la colonne.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-19
Copyright 2008, Oracle. Tous droits rservs.
Contraintes du gestionnaire GridBag
Position de
la cellule
Etendue de
la cellule
Expansion
Rgles de
remplissage
Ancrage
Espace autour
d'un composant
Bordures externes
Contraintes du gestionnaire GridBag
Chaque composant d'un conteneur GridBagLayout possde des proprits que vous
pouvez dfinir pour contrler sa prsentation. Pour modifier les contraintes, slectionnez le
composant et cliquez sur les contraintes dans la fentre du gestionnaire de proprits. Vous
pouvez galement cliquer avec le bouton droit de la souris sur le composant et slectionner
des contraintes dans le menu contextuel.
Contraintes de prsentation
Position de la cellule : Les proprits X et Y indiquent la position de la cellule pour
l'angle suprieur gauche du composant. Les valeurs sont des entiers qui reprsentent le
numro de la cellule dans une ligne et une colonne.
Etendue de la cellule : Ces proprits dterminent le nombre de colonnes (Width) et de
lignes (Height) occupes par le composant.
Bordures externes : Ces valeurs prcisent la quantit d'espace entre le composant et la
bordure de sa zone d'affichage. Vous pouvez prciser des valeurs pour la bordure du haut,
du bas, de gauche et de droite.
Espace autour d'un composant : Ces valeurs indiquent la quantit d'espace autour d'un
composant dans une cellule. La largeur du composant est calcule comme tant la largeur
minimale plus la valeur de la proprit Width. La hauteur est calcule comme tant la
hauteur minimale plus la valeur de la proprit Height.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-20
Contraintes du gestionnaire GridBag (suite)
Expansion : Indique la rpartition de l'espace supplmentaire, verticalement (X) et
horizontalement (Y). La plage de valeurs est comprise entre 0 et 1. L'expansion dtermine la
proportion d'espace supplmentaire alloue chaque composant.
Rgles de remplissage : Ces valeurs prcisent l'attitude adopter lorsque la zone
d'affichage est plus grande que le composant.
Ancrage : Cette proprit permet de dfinir o le composant doit tre ancr s'il est plus petit
que la zone d'affichage.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-21
Copyright 2008, Oracle. Tous droits rservs.
Utiliser les gestionnaires de prsentation
Les gestionnaires de prsentation sont conus pour grer
simultanment plusieurs composants.
L'utilisation d'un gestionnaire de prsentation avec des
conteneurs ncessite les tapes suivantes :
La cration d'un conteneur et d'un objet gestionnaire de
prsentation
La dfinition de la proprit layout du conteneur
L'ajout d'lments (composants ou autres conteneurs) dans
les rgions dfinies par le gestionnaire de prsentation
Les diffrents gestionnaires de prsentation ncessitent
des arguments distincts pour contrler le positionnement
des composants.
Utiliser les gestionnaires de prsentation
Les gestionnaires de prsentation sont conus pour grer plusieurs composants
simultanment. La diapositive ci-dessus prsente la procdure suivre pour utiliser un
gestionnaire de prsentation. Les exemples de la diapositive prsentent la cration d'un cadre
l'aide de la classe javax.swing.Jframe, laquelle est applique un gestionnaire
java.awt.BorderLayout.
Vous commencez par crer l'objet gestionnaire de prsentation, puis vous appelez la mthode
setLayout() des cadres et vous commencez ajouter des composants ou d'autres
conteneurs dans les rgions fournies par le gestionnaire de prsentation.
Crer un conteneur et un gestionnaire
JFrame myFrame = new JFrame();
BorderLayout layoutMgr = new BorderLayout();
Dfinir les proprits
myFrame.setLayout(layoutMgr);
Ajouter les lments
myFrame.add(new JButton(), BorderLayout.NORTH);
myFrame.add(new JTextField(), BorderLayout.SOUTH);
myFrame.add(new JPanel(), BorderLayout.CENTER);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-22
Utiliser les gestionnaires de prsentation (suite)
Ajouter des composants des conteneurs
Lorsque vous ajoutez un composant un conteneur, vous devez toujours considrer le
gestionnaire de prsentation utilis par ce dernier. Chaque type de gestionnaire peut ncessiter
des arguments diffrents pour contrler le positionnement et/ou la taille du composant ajout.
Par exemple, lors de l'ajout d'un composant un conteneur utilisant le gestionnaire
BorderLayout, vous devez indiquer la zone dans laquelle vous souhaitez placer le composant
(nord, sud, etc.). FlowLayout ne ncessite pas de paramtre de positionnement et ajoute
simplement les composants dans l'ordre dans lequel ils sont ajouts au conteneur.
Pour la majeure partie du code Swing, vous devez importer des classes partir des packages
suivants : javax.swing, java.awt et java.awt.event.
Remarque : Si vous utilisez un outil IDE tel que JDeveloper, vous pouvez affecter la proprit
layout d'un conteneur la valeur null afin d'imposer un positionnement absolu. Cela s'avre
trs pratique lorsque vous concevez un prototype d'interface graphique. Par la suite, vous pouvez
convertir la proprit layout en classe de gestionnaire de prsentation Java adapte
l'application.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-23
Copyright 2008, Oracle. Tous droits rservs.
Associer des gestionnaires de prsentation
VerticalFlow
Grid
GridBag
null
Border
Associer des gestionnaires de prsentation
Les diffrents gestionnaires de prsentation ont tous une utilisation qui leur est propre. Etant
donn que vous pouvez placer plusieurs panneaux dans un cadre o chacun peut possder son
propre gestionnaire de prsentation, vous pouvez contrler prcisment la prsentation finale.
L'imbrication des panneaux et des gestionnaires de prsentation est une pratique courante.
Dans l'exemple de la diapositive ci-dessus, vous utilisez les gestionnaires de prsentation
Border, null, VerticalFlow, GridBag et Grid.
Le cadre de premier niveau utilise Border, ce qui vous permet de prciser quels panneaux
imbriqus occupent les zones nord, sud, est et ouest. Le panneau suprieur utilise null, ce qui
vous permet de placer les composants l o vous souhaitez qu'ils s'affichent.
Le panneau RentalID utilise VerticalFlow, ce qui permet d'empiler les lments
verticalement. Vous utilisez GridBag dans le panneau Rental (est) afin de pouvoir aligner des
composants de diffrentes tailles. Enfin, vous utilisez Grid dans le panneau du bas, qui ne
contient qu'un seul composant.
En combinant des gestionnaires de prsentation, vous pouvez contrler trs prcisment la
prsentation de votre application. Vous pouvez crer un panneau redimensionnable sans
perdre sa prsentation gnrale.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-24
Copyright 2008, Oracle. Tous droits rservs.
Classes de cadres Java
Un cadre Java est quivalent une fentre d'application.
Utilisez le conteneur JFrame pour une fentre principale :
Il offre des proprits pour les icnes, le titre, ainsi que les
boutons de rduction, d'agrandissement et de fermeture de
la fentre.
Il utilise BorderLayout par dfaut.
Il offre un volet de contenu par dfaut qui occupe la rgion
centrale de la prsentation.
Vous pouvez dfinir la taille de la fentre l'aide de la
mthode setSize(), puis la rendre visible l'aide de la
mthode setVisible().
Utilisez le conteneur JDialog pour une fentre modale :
Vous devez faire disparatre une fentre modale pour que
l'application qui l'appelle puisse tre active.
Classes de cadres Java
Les cadres Java sont analogues aux fentres d'applications de premier niveau. Ces fentres
contiennent toutes les fonctionnalits fournies par le systme d'exploitation pour les grer, par
exemple une barre contenant le titre, une icne et les boutons de rduction, d'agrandissement
et de fermeture. Ces fentres peuvent galement tre redimensionnes, sauf si vous dsactivez
cette fonction par programmation.
Lorsque vous crez un objet Java JFrame, vous obtenez automatiquement un volet de
contenu qui fournit le conteneur pour les objets ou composants de la fentre. Comme indiqu
dans une diapositive antrieure, vous remplacez gnralement le volet de contenu par un
composant intermdiaire tel que JPanel, afin de simplifier la gestion du contenu graphique
du conteneur.
Le conteneur JFrame utilise le gestionnaire BorderLayout par dfaut, dans lequel le
volet de contenu par dfaut se trouve dans la rgion centrale. Le cadre peut tre modifi afin
de comporter un menu et/ou une barre d'outils, couramment placs dans la rgion nord, ainsi
qu'une barre d'tat gnralement place au sud.
Les classes JDialog ne sont pas systmatiquement modales, mais elles le sont
gnralement. Il est plus courant de crer les botes de dialogue l'aide des mthodes de la
classe JOptionPane, telles que showMessageDialog(). A dfaut, vous pouvez
utiliser la classe JDialog pour crer des botes de dialogue personnalises.
Remarque : La page suivante contient un exemple d'application utilisant un cadre simple,
avec un volet de contenu par dfaut, mais sans conteneurs ni composants intermdiaires.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-25
Classes de cadres Java (suite)
Crer une application avec cadre simple
L'exemple ci-aprs montre comment crer une application avec interface graphique Java l'aide de la
classe JFrame. Le code illustre les points prsents par la diapositive prcdente.
import java.awt.Color;
import javax.swing.JFrame;
public class MyFrame extends JFrame
{
public MyFrame()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setBackground(Color.blue);
setTitle("Default Frame Title");
setLocation(50, 50);
setSize(600, 400);
}
public static void main(String[] args)
{
JFrame f = new MyFrame();
f.setResizable(true);
f.setVisible(true);
}
}
Remarque :
Par dfaut, l'opration JFrame sur un vnement de fermeture consiste masquer la fentre.
L'appel de la mthode setDefaultCloseOperation(EXIT_ON_CLOSE) modifie
l'opration par dfaut excute par la JVM lors de la fermeture de la fentre. La constante
EXIT_ON_CLOSE est dfinie dans javax.swing.WindowConstants, une interface
implmente par JFrame.
La mthode getContentPane() est utilise pour accder au conteneur par dfaut du cadre
et pour remplacer la couleur de l'arrire-plan par le bleu.
La mthode setLocation() dtermine les coordonnes x et y (en pixels) du coin suprieur
gauche de la fentre par rapport l'angle suprieur gauche de l'cran.
La mthode setSize() dfinit la largeur et la hauteur de la fentre (en pixels).
Les mthodes setLocation() et setSize() peuvent tre excutes en une seule tape,
via l'appel de la mthode setBounds(x, y, width, height).
L'exemple montre comment dfinir les proprits du cadre dans le constructeur ou l'aide d'une
rfrence au cadre (comme indiqu dans la mthode main()).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-26
Copyright 2008, Oracle. Tous droits rservs.
Conteneurs JPanel
JPanel est un conteneur usage gnral.
Il peut utiliser n'importe quel
gestionnaire de prsentation
(il utilise Flowlayout par dfaut).
Il peut utiliser n'importe quelle
bordure.
Vous pouvez ajouter des composants
ou d'autres panneaux/conteneurs
l'aide de la mthode add().
JPanel myPanel = new JPanel(new BorderLayout());
JTextArea jTextArea1 = new JTextArea();
myPanel.setBorder(BorderFactory.createRaisedBevelBorder());
myPanel.add(jTextArea1, BorderLayout.SOUTH);
Conteneurs JPanel
JPanel est un conteneur usage gnral conu pour contenir d'autres composants. Vous
pouvez utiliser les conteneurs JPanel pour regrouper les composants dans une zone d'une
application. Vous pouvez ajouter une bordure au panneau afin de sparer graphiquement les
composants des autres composants de l'application.
Dfinir le gestionnaire de prsentation
Le gestionnaire de prsentation par dfaut de JPanel est FlowLayout, lequel permet de
placer tous les composants du conteneur sur une ligne. Vous pouvez faire en sorte que le
panneau utilise un autre gestionnaire de prsentation en appelant la mthode setLayout()
ou en dsignant le gestionnaire de prsentation lors de la cration du panneau. Exemples :
JPanel myPanel = new JPanel();
myPanel.setLayout(new BorderLayout());
ou
JPanel myPanel = new JPanel(new BorderLayout());
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-27
Conteneurs JPanel (suite)
Ajouter des composants
Pour ajouter des composants au panneau, utilisez la mthode add(). Les arguments fournis la
mthode add() dpendent du gestionnaire de prsentation utilis par le panneau. Par exemple,
FlowLayout, GridLayout et GridBagLayout acceptent gnralement un seul argument.
Si le gestionnaire de prsentation est BorderLayout, des arguments supplmentaires
permettent de prciser la position des composants contenus.
Exemples :
myPanel.add(button); // if FlowLayout
myPanel.add(button, BorderLayout.NORTH); // if BorderLayout
myFrame.getContentPane().add(myPanel); // add to a frame
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-28
Copyright 2008, Oracle. Tous droits rservs.
Cadres internes
Un cadre interne est l'quivalent d'une fentre de document
contenue dans une fentre d'application pour les applications
MDI (Multiple-Document Interface).
Utilisez JInternalFrame pour une fentre interne :
De la mme faon que JFrame, un conteneur
JInternalFrame peut inclure des conteneurs
intermdiaires et des composants, et utiliser un gestionnaire
de prsentation.
Par dfaut, un conteneur JInternalFrame ne peut pas tre
ferm, ni rduit en icne, ni agrandi, et il n'est pas visible.
Utilisez un conteneur JDesktopPane comme volet de
contenu dans lequel les cadres internes sont ajouts.
Le conteneur JDesktopPane :
contrle la taille et le positionnement des cadres internes
utilise un gestionnaire de prsentation null par dfaut
Cadres internes
L'API Swing fournit galement un cadre interne, implment par l'intermdiaire de la classe
JInternalFrame. Le cadre interne cre une fentre dans une autre fentre, afin de vous
permettre de crer une application conforme au modle MDI (Multiple Document Interface)
de la plate-forme Windows.
Lors de l'utilisation d'un cadre interne, la classe JDesktopPane est fournie en tant que
conteneur pour grer la taille et le positionnement des cadres internes dans la fentre
englobante. Vous crez donc gnralement un objet JDesktopPane pour remplacer le volet
de contenu par dfaut des cadres existants. Les cadres internes sont ensuite ajouts au volet du
bureau.
Tout comme le conteneur JFrame, le conteneur JInternalFrame comporte une barre de
titre avec un titre, des icnes et des boutons d'agrandissement, de rduction et de fermeture
(lesquels sont dsactivs par dfaut). Les cadres internes peuvent tre dplacs les uns sur les
autres. Ils fournissent des mthodes permettant de dterminer s'ils sont au premier plan,
slectionns, etc. Exemples :
setResizable(boolean), setIconifiable(boolean)
setMaximizable(boolean), setVisible(boolean)
toFront(), toBack()
Le volet du bureau fournit des mthodes permettant d'obtenir un tableau des objets cadre
interne qui ont t ajouts son conteneur, par exemple :
getAllFrames() renvoie un tableau d'objets JInternalFrame.
getSelectedFrame() renvoie l'objet JInternalFrame actuellement slectionn.
Remarque : La plupart des mthodes getXXX() comportent une mthode setXXX()
correspondante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-29
Copyright 2008, Oracle. Tous droits rservs.
Ajouter des composants avec Oracle JDeveloper
1. Crer un objet JFrame
2. Slectionner un
gestionnaire de
prsentation
3. Ajouter des composants
partir de la palette de
composants
4. Optimiser les proprits
des composants
Ajouter des composants avec Oracle JDeveloper
L'ajout de composants une application est un processus trs simple avec Oracle JDeveloper.
Vous commencez par crer un cadre vide, puis vous y ajoutez les composants souhaits. Il
peut s'agir de conteneurs Swing ou de composants atomiques Swing tels que des champs de
texte, des boutons et des cases cocher. Aprs avoir ajout les composants, vous pouvez les
optimiser l'aide du gestionnaire de proprits ou en ajoutant/modifiant le code dans l'diteur
de code.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-30
Copyright 2008, Oracle. Tous droits rservs.
Crer un cadre
Cadre
Crer un cadre
Pour crer un nouveau conteneur JFrame, slectionnez File > New dans le menu
JDeveloper. Dveloppez Client Tier, puis slectionnez le noeud SWING/AWT. Recherchez
l'lment Frame dans la liste Items. Dans la bote de dialogue Create Frame, remplacez le
nom de la classe et le titre du cadre par des noms vocateurs. Slectionnez
javax.swing.JFrame comme classe de base. Vous disposez d'options permettant de
crer une barre de menus, une barre d'tat, une barre d'outils et une zone d'information (About
Box). Tous ces attributs sont facultatifs.
Vous pouvez indiquer la superclasse prfre du nouveau cadre. JDeveloper gnre une classe
avec les instructions d'import et le code ncessaires pour crer un cadre exploitable. Vous
pouvez prsent utiliser l'diteur d'interface graphique de JDeveloper pour crer visuellement
la structure de l'interface graphique.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-31
Copyright 2008, Oracle. Tous droits rservs.
Ajouter des composants
Utilisez la palette de composants pour
ajouter des lments Swing au cadre.
Ajouter des composants
Le conteneur JFrame cr par l'assistant Frame Builder Wizard comprend le cadre et un
conteneur intermdiaire JPanel. L'assistant ne dfinit pas le gestionnaire de prsentation du
conteneur JPanel gnr. Il utilise le gestionnaire par dfaut correspondant au type de
conteneur (FlowLayout).
Etant donn qu'il s'agit d'un gestionnaire de prsentation par dfaut, JDeveloper ne permet pas
d'en modifier les proprits. Il est prfrable de changer de gestionnaire, ce qui vous permet
de manipuler les proprits de prsentation.
Aprs avoir dfini le gestionnaire de prsentation, vous pouvez ajouter des composants en les
slectionnant dans la page Swing de la palette de composants et en les faisant glisser vers le
conteneur JPanel dans la fentre Design. Vous pouvez galement cliquer sur le composant
dans la palette de composants, puis cliquer sur JPanel dans le volet de structure. Si vous optez
pour la seconde solution, JDeveloper utilise des tailles par dfaut pour les composants. Dans
un cas comme dans l'autre, le gestionnaire de prsentation affecte la position finale du
composant.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-32
Ajouter des composants (suite)
Pour appeler l'diteur d'interface graphique, slectionnez une classe dans le navigateur, cliquez
avec le bouton droit de la souris et slectionnez UI Editor.
En gnral, ajoutez les composants la fentre de structure plutt que directement au panneau.
Cette approche est prfrable, car elle permet d'viter d'ajouter accidentellement un composant
au mauvais panneau. Par exemple, l'ajout de composants un conteneur JTabbedPane dans
un panneau peut tre effectu plus facilement l'aide du volet de structure.
Lors de l'ajout graphique d'un composant un cadre/panneau avec JDeveloper, du code est
gnr pour :
dclarer et instancier l'objet composant slectionn,
dfinir les proprits minimales de l'tat par dfaut,
ajouter le composant au conteneur choisi.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-33
Copyright 2008, Oracle. Tous droits rservs.
Prsentation la carte
Les applications Swing prennent en charge des prsentations
diffrentes afin de s'adapter l'environnement graphique du
systme d'exploitation. Caractristiques de la prsentation :
Elle est propre l'application.
Elle peut tre initialise au dmarrage de l'application.
Elle peut changer de faon dynamique.
Elle affecte les composants Swing lgers.
Elle prend en charge les plates-formes Windows,
Macintosh, Java (Metal) et Motif.
Elle utilise la classe javax.swing.UIManager.
Elle fournit la mthode setLookAndFeel(), qui accepte
une chane pour le nom de la classe de prsentation.
Prsentation la carte
Java fournit dans le package javax.swing.plaf et ses sous-packages un jeu de classes
qui permettent d'afficher les composants en fonction de la plate-forme. La prsentation Java
par dfaut est connue sous son nom de code "Metal", qui est le nom du projet affect une
quipe de Sun Microsystems, Inc. et dont l'objectif tait de crer une prsentation unique pour
Swing 1.0 (JFC 1.1).
Dfinir la prsentation de l'interface graphique
Utilisez la classe javax.swing.UIManager pour initialiser (ou modifier
dynamiquement) la prsentation de votre application. Par exemple, dans la mthode main()
de l'application utilisant un cadre, vous pouvez ajouter le code suivant :
try { UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) { }
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-34
Dfinir la prsentation de l'interface graphique (suite)
La valeur renvoye par getSystemLookAndFeelClassName() est une chane
reprsentant un nom de classe entirement qualifi, qui implmente la prsentation de la
plate-forme actuelle. La chane reprsentant le nom de la classe est fournie en tant que paramtre
de la mthode UIManager.setLookAndFeel(). Voici quelques valeurs possibles pour les
noms de classe de diffrentes plates-formes :
javax.swing.plaf.metal.MetalLookAndFeel
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel
Remarque : Si vous souhaitez modifier la prsentation de manire dynamique, vous pouvez
appeler la mthode SwingUtilities.updateComponentTreeUI(getContent
Pane()).
Cette mthode propage la nouvelle prsentation aux composants existants.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-35
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
planifier la prsentation d'une interface graphique base sur
Swing
ajouter des composants d'interface graphique l'aide de
JDeveloper
grer la prsentation d'une application Swing
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 16-36
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 16 : Utiliser Swing pour
planifier la prsentation d'une application
Dans cet exercice, vous allez :
crer une classe base sur JFrame pour la fentre
principale de l'application OrderEntry
ajouter un menu et une barre d'tat par dfaut
ajouter un conteneur JDesktopPane et le dfinir comme
volet de contenu
crer une classe base sur JInternalFrame afin de grer
la cration d'une commande et la saisie des donnes
crer la structure hirarchique de conteneurs pour les
composants du cadre de saisie des commandes
ajouter certains composants ce cadre
dfinir les gestionnaires de prsentation de chaque
conteneur
Prsentation de l'exercice 16 : Utiliser Swing pour planifier la prsentation d'une
application
Dans cet exercice, vous allez utiliser JDeveloper pour crer le cadre principal d'une
application en tant que fentre MDI, ainsi que les cadres internes qui seront contenus dans la
fentre principale. L'utilisation de ces cadres vous permettra d'explorer les classes Swing ainsi
que les moyens de crer des applications d'interface graphique.
Remarque : Pour cet exercice, vous utilisez l'application
OrderEntryApplicationLes16.
Afficher le modle : Pour afficher le modle de l'application du cours ce stade, dveloppez
OrderEntryApplicationLes16 OrderEntryProjectLes16 -
Application Sources oe dans la fentre Application Navigator, puis cliquez deux
fois sur l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres
jusqu' prsent dans le cours.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Ajouter des composants d'interface graphique
et la gestion des vnements
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
ajouter des composants Swing une application
consulter et modifier le contenu des composants
fournir des gestionnaires d'vnements pour les types
d'vnement les plus courants
crer une barre de menus
Objectifs
Ce chapitre aussi traite de l'interface utilisateur de vos applications Java. Il explique comment
utiliser les composants Java Swing standard, ainsi que les contrles plus sophistiqus fournis
par JDeveloper. Il montre galement comment ajouter des mthodes grant les vnements
tels que les clics sur les boutons et les modifications de texte.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-3
Copyright 2008, Oracle. Tous droits rservs.
Composants Swing
Composants de type texte
JTextField
JPasswordField
JTextArea
JEditorPane
JTextPane
Composants graphiques
JTree
JTable
JToggleButton
Composants Swing
Composants de type texte
Les composants Swing de type texte affichent du texte et permettent (ventuellement)
l'utilisateur de le modifier. Il existe cinq composants de type texte qui prennent en charge
diffrents niveaux de complexit et diffrentes exigences.
JtextField permet d'afficher et d'diter une seule ligne de texte la fois.
JPasswordField est une sous-classe de JTextField (elle fonctionne de la mme
faon que JTextField, ceci prs que le texte saisi ne s'affiche pas).
JTextArea permet d'afficher et de modifier plusieurs lignes de texte (ce composant
permet l'utilisateur de saisir du texte d'une longueur quelconque et de l'afficher avec
n'importe quelle police).
JEditorPane permet l'utilisation de styles de texte plus sophistiqus comprenant
diffrentes polices et des images (JEditorPane peut lire et crire du texte simple, du
code HTML et du texte RTF).
JTextPane autorise les composants imbriqus en plus des possibilits de
JEditorPane.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-4
Composants Swing (suite)
Composants graphiques
JTree affiche un ensemble de donnes hirarchiques dans une arborescence.
JTable affiche des donnes dans un tableau bidimensionnel.
JToggleButton est un bouton bascule, semblable JCheckBox. Lorsque
l'utilisateur clique dessus (ce qui lui affecte la valeur true), il conserve cette valeur true
jusqu' ce que la valeur false lui soit affecte par programmation.
Barre d'outils des conteneurs Swing
La barre d'outils des conteneurs Swing comporte des composants destins contenir d'autres
composants.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-5
Copyright 2008, Oracle. Tous droits rservs.
Composants Swing dans JDeveloper
Utilisez la palette de composants Swing pour ajouter des lments.
Composants Swing dans JDeveloper
La fentre principale comprend la palette de composants (Component Palette) qui contient
tous les composants graphiques et non graphiques disponibles. La page Swing de la palette
contient les composants Swing. En voici un bref rsum :
JButton : Bouton de commande.
JCheckBox : Case cocher pouvant tre slectionne ou dslectionne.
JComboBox : Combinaison champ de texte/liste droulante.
JEditorPane : Zone de texte avec style qui peut afficher du texte dans diffrents
formats, dont RTF et HTML.
JLabel : Courte chane de texte ou image qui ne peut pas tre slectionne.
JList : Liste d'lments parmi lesquels l'utilisateur peut effectuer une slection.
JPasswordField : Champ de texte qui affiche un caractre tel qu'un astrisque (*) au
lieu d'afficher le texte saisi par l'utilisateur.
JProgressBar : Zone graphique qui affiche le pourcentage d'accomplissement d'une
opration.
JRadioButton : Elment d'un groupe de boutons d'option.
JScrollBar : Barre de dfilement horizontale ou verticale.
JSeparator : Composant reprsent par une ligne droite.
JSlider : Composant qui permet l'utilisateur de slectionner une valeur en dplaant
un curseur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-6
Composants Swing dans JDeveloper (suite)
JTextArea : Champ de texte plusieurs lignes.
JTextField : Champ de texte une seule ligne.
JTextPane : Zone de texte avec style qui permet de dfinir des formats de texte
personnaliss.
JTree : Contrle qui affiche un ensemble de donnes hirarchiques dans une arborescence.
JTable : Composant qui affiche des donnes dans un tableau bidimensionnel.
JToggleButton : Bouton bascule, semblable au composant JCheckBox. Lorsque
l'utilisateur clique dessus (ce qui lui affecte la valeur true), il conserve cette valeur true
jusqu' ce que la valeur false lui soit affecte par programmation.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-7
Copyright 2008, Oracle. Tous droits rservs.
Navigateur
d'applications
Appeler l'diteur d'interface graphique
Cliquez avec le bouton droit de la souris et slectionnez Open dans
le menu contextuel.
Editeur
d'interface
graphique
Menu contextuel
Appeler l'diteur d'interface graphique
Vous pouvez cliquer avec le bouton droit de la souris sur une classe dans le navigateur
d'applications, puis slectionner Open pour afficher cette classe. La classe s'affiche dans
l'diteur de code. En bas du volet se trouvent trois onglets : Source, Design et History. Cliquez
sur l'onglet Design pour afficher la classe dans l'diteur d'interface graphique.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-8
Copyright 2008, Oracle. Tous droits rservs.
1. Ouvrez la palette de
composants et slectionnez
la catgorie Swing.
2. Faites glisser le composant
vers le panneau. La classe est
mise jour automatiquement.
Ajouter un composant un panneau
Ajouter un composant un panneau
Vous pouvez ajouter des composants la fentre de structure au lieu de les ajouter
directement au panneau. Cette approche permet d'viter d'ajouter de faon accidentelle un
composant au mauvais panneau, en particulier lorsque les rgions du panneau ne sont pas
visibles dans l'diteur d'interface graphique. Prenez soin de positionner le composant dans son
conteneur, dans la fentre de structure. Par exemple, il est facile d'ajouter des composants un
conteneur JTabbedPane dans un panneau l'aide de la fentre de structure.
Modifications apportes au code source par JDeveloper lors de l'ajout de composants
Si vous examinez le code source avant et aprs l'ajout d'un composant, vous remarquez que
JDeveloper apporte les modifications suivantes la classe :
Ajout d'une instruction d'import pour la classe du composant (si elle n'existe pas encore).
Cration d'une variable d'instance en utilisant le nom de la classe du composant comme
type, ainsi qu'un nom de variable d'instance par dfaut ( l'aide de l'accs de niveau
package/par dfaut).
Ajout de lignes la mthode jbInit() afin de dfinir les proprits par dfaut du
composant, telles que la valeur initiale du texte d'un composant JTextField. En outre,
une ligne de code est gnre pour ajouter le composant son conteneur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-9
Copyright 2008, Oracle. Tous droits rservs.
Modifiez les valeurs des proprits
dans le gestionnaire de proprits.
Modifier les proprits d'un composant
Modifier les proprits d'un composant
Slectionnez un composant Swing. Dans le menu de JDeveloper, slectionnez View >
Property Inspector pour afficher les proprits du composant.
Les modifications apportes aux proprits d'un composant dans le gestionnaire de proprits
entranent la modification automatique du code source.
Remarque : Lorsque vous modifiez un champ de texte qui ncessite la saisie d'une valeur,
appuyez sur la touche Entre pour accepter la modification.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-10
Copyright 2008, Oracle. Tous droits rservs.
Code gnr par JDeveloper
Exemple : Ajout d'un composant JButton un JFrame
import javax.swing.JButton;
public class JFrame1 extends JFrame {
private JButton jButton1 = new JButton();
...
public void jbInit() throws Exception {
this.setLayout(null);
jButton1.setText("jButton1");
jButton1.setBounds(new Rectangle(25, 140,
73, 22));
this.add(jButton1, null);
}
Code gnr par JDeveloper
Aprs chaque modification d'une interface graphique, JDeveloper met jour le code source de
la classe modifie afin d'obtenir la prsentation souhaite. En ralit, seul le code source est
important. L'outil Designer est simplement un moyen pratique de gnrer le code source
requis pour obtenir l'aspect visuel recherch.
Les variables d'instance et leur nom
Chaque fois que vous ajoutez un composant l'interface graphique, JDeveloper ajoute votre
classe une variable d'instance correspondante. Un nom par dfaut est affect la variable
d'instance, en fonction du nom et du numro de la classe, par exemple jButton1 (voir la
diapositive ci-dessus). Pour attribuer la variable un nom plus vocateur, modifiez sa
proprit name dans le gestionnaire de proprits afin de remplacer toutes les occurrences du
nom dans la classe. Si vous modifiez manuellement le nom de la variable dans le code source,
vous devez prendre soin de remplacer toutes les occurrences de la variable dans la classe.
Les lignes de code gnres dans la mthode jbInit() pour initialiser le composant et
l'ajouter son conteneur dpendent du type de gestionnaire de prsentation utilis par le
conteneur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-11
Code gnr par JDeveloper (suite)
Mthodes dfinissant des proprits
JDeveloper appelle une mthode pour dfinir chaque proprit modifie par vos soins dans le
gestionnaire de proprits. Dans l'exemple ci-dessous, le texte du bouton devient Find, avec une
taille de police de 16 points. Les deux mthodes appeles sont setText() et setFont() :
jButton1.setText("Find");
jButton1.setFont(new Font("Dialog", 1, 16));
Objets composants ajouts au conteneur
La mthode jbInit() ajoute chaque objet composant au conteneur. L'emplacement et la taille
sont indiqus comme suit :
jButton1.setBounds(new Rectangle(25, 140, 73, 22));
Les paramtres du constructeur Rectangle sont les suivants :
new Rectangle(X, Y, largeur, hauteur);
o X et Y sont les coordonnes du composant par rapport au coin suprieur gauche de son
conteneur.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-12
Copyright 2008, Oracle. Tous droits rservs.
Crer un menu
Cochez la case Create Menu Bar lors de la cration
de l'application.
Ajoutez JMenuBar partir de la palette de composants.
JDeveloper cre :
un objet JMenuBar comme conteneur graphique des menus
un objet JMenu qui reprsente un menu d'options ajout
la barre de menus
des objets JMenuItem, placs dans un objet JMenu
Chaque objet JMenuItem prend en charge des
vnements, des interfaces et des mthodes de
gestionnaire, de la mme faon que les autres composants
d'interface graphique Swing.
Un objet JMenuBar peut tre ajout n'importe quel
conteneur de premier niveau (cadre, bote de dialogue,
applet, etc.).
Crer un menu manuellement
Pour crer manuellement une barre de menus dote d'un seul menu une seule option :
1. Crez un objet JMenuBar.
2. Crez un objet JMenu.
3. Crez un objet JMenuItem.
4. Ajoutez JMenuItem JMenu.
5. Ajoutez l'objet JMenu l'objet JMenuBar.
Ajouter une barre de menus un conteneur
Associez l'objet JMenuBar un cadre, une bote de dialogue ou une applet en appelant sa
mthode setJMenuBar(). Ecrivez le code de gestion des vnements de l'objet
JMenuItem en enregistrant les processus d'coute (listeners) d'vnement appropris, ou
l'aide des objets Swing Action.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-13
Copyright 2008, Oracle. Tous droits rservs.
Utiliser l'diteur de menu de JDeveloper
Dans le volet de structure de l'diteur de menu de JDeveloper :
1. Dveloppez le noeud Menu.
2. Cliquez sur l'objet barre de menus pour une reprsentation
graphique.
3. Cliquez avec le bouton droit de la souris sur un menu ou
des options de menu pour afficher les options de menu
contextuel.
Cliquez sur
l'objet
menuBar dans
le volet de structure
pour afficher la
barre de menus.
Cliquez avec le
bouton droit
sur une option
de menu pour
afficher le menu
contextuel.
Utiliser l'diteur de menu de JDeveloper
Dans l'diteur d'interface graphique, la barre de menus peut tre modifie par l'ajout, la
suppression et le dplacement de composants.
Pour ajouter un menu ou une option de menu
Vous pouvez cliquer avec le bouton droit de la souris sur une option de menu pour ajouter un
autre menu la barre de menus, comme le montre la diapositive ci-dessus. Vous pouvez alors
utiliser le menu contextuel pour effectuer les oprations suivantes :
Ajouter une autre option de menu.
Ajouter un sparateur.
Ajouter un sous-menu.
Ajouter une case cocher l'option de menu.
Dsactiver l'option de menu.
Pour supprimer des options de menu
Appuyez sur la touche Suppr aprs avoir slectionn un composant de menu.
Pour rorganiser la structure des menus
Dplacez les composants graphiquement.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-14
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 17-1 :
Ajouter des composants d'interface graphique
Dans cet exercice, vous allez :
crer le menu OrderEntryMDIFrame
ajouter des options et un sparateur au menu Order
ajouter des composants OrderEntryFrame afin de
constituer sa structure graphique
Prsentation de l'exercice 17-1 : Ajouter des composants d'interface graphique
Dans cet exercice, vous allez crer le menu et les composants graphiques dont l'utilisateur a
besoin pour grer la saisie d'une commande. L'application comprend un bouton permettant de
rechercher le client affect la commande, ainsi que des boutons permettant d'ajouter des
produits la commande ou d'en supprimer. Vous allez apprendre crer une application
d'interface graphique base sur Swing, en utilisant l'diteur d'interface graphique de
JDeveloper pour construire cette interface. Vous apprendrez galement grer les vnements
des composants Swing ajouts l'application.
Remarque : Chaque fois que vous crez un composant d'interface graphique, JDeveloper le
dclare comme private, mais vous pouvez supprimer ce mot-cl si ncessaire.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les17, chargez
l'application OrderEntryApplicationLes17, puis continuez.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-15
Copyright 2008, Oracle. Tous droits rservs.
Interface graphique de l'application OrderEntry
Interface graphique de l'application OrderEntry
La diapositive ci-dessus contient une capture d'cran illustrant l'aspect final de la fentre
principale de l'application, OrderEntryMDIFrame, ainsi qu'un exemple de cadre
OrderEntryFrame pour une commande cre sous forme de cadre interne.
Utiliser l'application
La fentre OrderEntryMDIFrame fournit le menu principal de l'application, partir
duquel l'utilisateur clique sur Order > New lorsqu'il veut crer une nouvelle commande pour
un client.
La nouvelle commande doit crer le cadre interne OrderEntryFrame, ainsi qu'un nouvel
objet Order (dont l'ID dfinit le champ de texte Order Id du cadre).
Pour entrer les dtails relatifs au client, l'utilisateur fournit une valeur dans le champ
Customer Id, puis il clique sur le bouton Find. L'vnement du bouton Find est valid lorsque
le client quitte l'application ( l'aide de la mthode DataMan.findCustomerById()).
Le cas chant, le client est affect la commande et les dtails relatifs au client s'affichent
dans les champs appropris. Dans le cas contraire, un message d'erreur s'affiche.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-16
Copyright 2008, Oracle. Tous droits rservs.
Le modle Java de gestion des vnements
Fonctionnement :
Un vnement a lieu dans le code source et gnre un objet
vnement.
Un processus d'coute d'vnement entend un vnement
spcifique.
Un gestionnaire d'vnements dtermine l'action effectuer.
Configuration :
1. Crez un objet source pour l'vnement.
2. Crez un objet processus d'coute d'vnement qui
implmente une interface avec des mthodes permettant de
grer l'objet vnement.
3. Ecrivez une mthode spcifique pour grer l'vnement.
4. Enregistrez l'objet processus d'coute auprs de la source
de l'vnement concern.
Le modle Java de gestion des vnements
Le modle Java de gestion des vnements comprend quatre composants :
Source de l'vnement : Objet ou composant ayant gnr l'vnement (par exemple,
l'vnement "clic de souris" peut provenir d'un bouton).
Objet gnr par l'vnement : Objet gnr lorsque l'vnement se produit. (Cet objet
est transmis un processus d'coute d'vnement.)
Processus d'coute d'vnement : Mthode dont le rle est d'couter afin de dtecter un
vnement donn, puis d'excuter un gestionnaire d'vnements lorsque l'vnement se
produit, suite la rception de l'objet gnr par la source de l'vnement.
Gestionnaire d'vnements : Mthode dont le rle est de grer un vnement spcifique
ainsi que l'objet gnr correspondant.
Interfaces impliques dans la gestion des vnements
ActionListener (extension de EventListener) : Interface de processus d'coute
(listener) pour la rception des vnements de type action. Quand un vnement de type
action se produit, la mthode ActionPerformed est appele.
MouseListener (extension de EventListener) : Interface de processus d'coute
pour la rception des vnements "intressants" de la souris (appuyer, relcher, cliquer,
entrer, quitter) sur un composant.
Les diapositives suivantes dtaillent le modle de gestion des vnements.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-17
Copyright 2008, Oracle. Tous droits rservs.
Notions fondamentales relatives au code de
gestion des processus d'coute d'vnement
Crez la source de l'vnement.
Crez le processus d'coute d'vnement qui implmente
l'interface d'vnement requise.
Enregistrez le processus d'coute auprs de la source de
l'vnement.
JButton findBtn = new JButton("Find");
class MyListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// handler logic
}
}
findBtn.addActionListener(new MyListener());
Notions fondamentales relatives au code Java de gestion des processus
d'coute d'vnement
La diapositive ci-dessus prsente les principales tapes de la cration d'un objet source
d'vnement, par exemple JButton. Lorsque le bouton (source de l'vnement) est activ
l'aide de la touche Entre (s'il est mis en vidence) ou l'aide d'un clic de souris, il cre l'objet
gnr par l'vnement, savoir un objet java.awt.eventActionEvent. Si les
processus d'coute sont enregistrs avec un bouton pour couter ActionEvent, leur
mthode de gestion est appele par le mcanisme de dclenchement d'vnement du bouton.
Le deuxime exemple de code de la diapositive illustre la cration de la classe du processus
d'coute d'vnement qui implmente l'interface java.awt.event.ActionListener,
ncessitant l'criture d'une mthode unique avec la signature suivante :
public void actionPerformed(ActionEvent e);
La mthode actionPerformed() reoit une rfrence objet d'vnement cre par la
source de l'vnement (en l'occurrence, un ActionEvent). Le code du gestionnaire peut
ventuellement utiliser l'objet gnr par l'vnement pour obtenir des informations sur la
source de l'vnement ou en provenance de cette source. Le corps de la mthode gre
l'vnement en implmentant le code de gestion de l'vnement. Ce code s'excute sur le
thread de gestion des vnements Java.
Le troisime exemple de code illustre la dernire pice du puzzle, dans laquelle l'objet
processus d'coute est cr dans l'argument de la mthode addActionListener(), ce qui
permet l'enregistrement de cet objet auprs de la source de l'vnement pour grer
ActionEvent (c'est--dire l'vnement gnr par un clic sur le bouton).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-18
Copyright 2008, Oracle. Tous droits rservs.
OK
Source Objet processus d'coute
d'vnement
Mthode du gestionnaire
Processus de gestion des vnements :
Enregistrement
MyListener actionListenerObj = new MyListener();
public void jbInit() {
button1.addActionListener(actionListenerObj);

}
Processus de gestion des vnements : Enregistrement
Enregistrer le processus d'coute
Comme nous l'avons vu, l'tape finale du processus de codage de la gestion des vnements
est l'enregistrement du processus d'coute auprs de la source de l'vnement. Le processus
d'coute d'vnement s'enregistre pour un type d'vnement particulier. Par exemple, "je suis
intress par les clics sur les boutons".
Enregistrer les objets processus d'coute
Un processus d'coute d'vnement ne reoit les vnements d'une source que s'il est
enregistr auprs de cette source en tant que processus d'coute pour un type d'vnement
spcifique. Pour chaque type d'vnement qu'il peut gnrer, un objet source fournit une
mthode qui permet aux objets de s'enregistrer en tant que processus d'coute de l'vnement.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-19
Processus de gestion des vnements : Enregistrement (suite)
Prenons l'exemple d'un bouton. Etant donn qu'un objet Button peut gnrer des
ActionEvent, la classe Button fournit une mthode appele addActionListener().
L'exemple prsent dans la diapositive montre comment appeler cette mthode afin d'enregistrer
l'objet processus d'coute cr dans la diapositive prcdente. Cet objet MyListener est ajout
une liste de processus d'coute qui sont informs lorsqu'un utilisateur clique sur le bouton. Cet
objet processus d'coute contient le code permettant de grer l'vnement.
Remarque : Il existe une mthode, appele removeActionListener(), qui permet de
retirer un processus d'coute de la liste des processus d'coute enregistrs, comme dans l'exemple
suivant :
findBtn.removeActionListener( actionListenerObj);
Le modle de gestion des vnements est appliqu, car les classes suivent les rgles de codage
ci-aprs :
La classe de l'objet gnr par l'vnement est nomme XXXEvent.
Le processus d'coute implmente une interface appele XXXListener.
La source de l'vnement fournit une mthode addXXXListener() qui accepte un
argument objet, lequel implmente l'interface XXXListener approprie.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-20
Copyright 2008, Oracle. Tous droits rservs.
Processus de gestion des vnements :
L'vnement se produit
Inform
public void jbInit() {
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Your code to handle the ActionEvent
}
}); }
OK
Source
Objet processus d'coute
d'vnement
Mthode du gestionnaire
Signaler l'vnement au processus d'coute
Lorsque l'vnement qui intresse le processus d'coute se produit, celui-ci en est inform.
Une source d'vnement avertit un objet processus d'coute d'vnement en appelant une
mthode et en lui transmettant un objet gnr par l'vnement. Les vnements ne sont
envoys qu'aux objets processus d'coute enregistrs. Un objet ne reoit jamais d'vnement
non sollicit. Les vnements non grs sont purement et simplement ignors.
Ecouter un vnement
Lorsqu'un vnement se produit, sa source avertit le processus d'coute d'vnement en
appelant une mthode spcifique. Tous les processus d'coute d'un type d'vnement
particulier doivent fournir la mthode approprie. Par exemple, l'vnement qui se produit
lorsque l'utilisateur clique sur un bouton est ActionEvent. Tous les processus d'coute d'un
ActionEvent doivent fournir une mthode actionPerformed(), car c'est elle que la
source de l'vnement va tenter d'appeler.
Implmenter un processus d'coute d'vnement en tant que classe interne
L'exemple prsent par la diapositive ci-dessus illustre l'implmentation d'un objet processus
d'coute d'vnement et son enregistrement auprs de la source d'vnement en une seule
tape. Pour cela, il suffit d'implmenter l'objet processus d'coute d'vnement en tant que
classe interne anonyme.
Par dfaut, le type spcifique d'adaptateur d'vnement de classe interne que gnre
JDeveloper est appel adaptateur anonyme. L'implmentation de ce type d'adaptateur vite la
cration d'une classe d'adaptateur (nomme) distincte. Le code qui en rsulte est aussi
compact qu'esthtique.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-21
Copyright 2008, Oracle. Tous droits rservs.
Processus de gestion des vnements :
Excuter le gestionnaire d'vnements
Source
OK
Source
Objet processus d'coute
d'vnement
Mthode du gestionnaire :
enregistrer les modifications
et quitter
Excuter le gestionnaire d'vnements
Le processus d'coute d'vnement comprend un gestionnaire d'vnements. Il excute
celui-ci lorsqu'il reoit une notification d'vnement. Par exemple, si le bouton est un bouton
d'enregistrement (Save), le gestionnaire d'vnements enregistre les donnes du panneau.
Comment cela fonctionne-t-il ?
Tous les processus d'coute d'un ActionEvent doivent implmenter l'interface
ActionListener.
Les diffrentes interfaces d'coute dsignent les mthodes implmenter au sein de la classe
de processus d'coute. L'interface ActionListener indique une seule mthode
implmenter :
public interface ActionListener {
public void actionPerformed(ActionEvent e);
}
Notez que les gestionnaires d'vnement ne doivent pas contenir de code relevant de la
logique mtier. Ils servent au contraire appeler la logique mtier d'autres classes
(composants EJB, JavaBean, etc.).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-22
Copyright 2008, Oracle. Tous droits rservs.
interface MouseListener {
// Declares five methods
}
class MouseAdapter implements MouseListener {
// Empty implementations of all five methods
}
public class MyListener extends MouseAdapter {
// Override only the methods you need
}
Utiliser des classes d'adaptateur pour
les processus d'coute
Il s'agit de classes de "convenance" qui implmentent des
interfaces de processus d'coute d'vnement :
Elles fournissent des implmentations de mthode vides.
Elles sont tendues et la mthode souhaite est redfinie.
Classes d'adaptateur
Certaines des interfaces de processus d'coute d'vnement contiennent plusieurs mthodes.
Pour chaque interface, il existe une classe d'adaptateur simple qui fournit un corps vide pour
chaque mthode.
Par exemple, MouseListener contient cinq mthodes. Si vous implmentez directement
MouseListener, vous devez implmenter les cinq mthodes, mme si une seule vous
intresse. Vous pouvez galement tendre la classe MouseAdapter.
Dans ce cas, il est possible de remplacer les mthodes dont vous avez besoin et d'ignorer le
reste.
Il n'existe aucune classe d'adaptateur pour l'interface ActionListener, car celle-ci ne
possde qu'une mthode.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-23
Copyright 2008, Oracle. Tous droits rservs.
Architecture MVC de Swing
Le principe MVC (Model-View-Controller)
Signification des termes :
Le modle (Model) reprsente les donnes ou informations.
La vue (View) constitue une reprsentation graphique des
donnes.
Le contrleur (Controller) gre les vnements qui modifient
la vue ou le modle.
Procdez toujours la mise jour des composants Swing
dans la file d'attente Event Thread, ou utilisez les mthodes
SwingUtilities.
Vue
Vue
modification
modification
Notification
de mise jour
Obtention des donnes
modifies
Evnement
Contrleur
Modle
Importance de l'architecture MVC de Swing
L'architecture MVC (Model-View-Controller) constitue des associations dynamiques entre les
reprsentations de l'objet de donnes, des donnes et des vnements. Elle permet la cration
de plusieurs vues des mmes donnes (modle), les diffrentes vues tant synchronises lors
de la modification des donnes. Cette architecture est la base de la cration de composants
fonds sur les donnes.
La diapositive ci-dessus illustre le fait que, lorsqu'un vnement se produit et entrane la
modification d'un composant graphique, la vue demande au modle les donnes appropries.
Si l'vnement provoque un changement du modle, ce dernier informe la vue qu'un
changement a eu lieu, et celle-ci demande son tour au modle les donnes modifies.
Dans le cadre de Swing, un composant d'interface graphique reprsente une vue. Chaque
composant transmet un objet vnement un objet "processus d'coute" ou un contrleur en
vue de grer l'vnement. En fonction de l'vnement, le contrleur modifie la vue ou le
modle. Si la classe du modle est l'une de celles fournies par l'API Swing et qu'elle est
adapte au composant d'interface graphique associ, les modifications apportes au modle
sont automatiquement visibles sur la vue.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-24
Importance de l'architecture MVC de Swing (suite)
L'utilisation d'un objet JList avec un Vector est possible, mais l'ajout d'lments au Vector
n'entrane pas la mise jour du contenu de l'objet JList, et ce pour deux raisons :
Le Vector ne constitue pas la classe de modle approprie pour un objet JList.
L'objet JList cre un objet ListModel interne partir des lments du vecteur.
Cependant, si vous crez explicitement un objet DefaultListModel et l'associez un objet
JList, les lments ajouts l'objet DefaultListModel sont rpercuts dans l'objet
JList.
Remarque : Le schma de la diapositive prcdente reprsente l'architecture MVC classique.
Les composants Swing utilisent une version modifie de cette architecture afin de prendre en
charge la prsentation la carte.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-25
Importance de l'architecture MVC de Swing (suite)
Composants (vues) Swing et classes de modle
Le tableau ci-dessous indique les interfaces et les composants Swing qui peuvent tre
implments par les classes de modle pour fournir les fonctionnalits MVC. Chaque interface a
t implmente par une classe dans les packages de l'API Swing et la classe d'implmentation
est galement indique.
Par dfaut, les composants Swing crent et stockent de faon implicite les donnes dans un
modle par dfaut rpondant leurs besoins. Vous pouvez utiliser tous les composants pour crer
et utiliser explicitement un modle appropri, gnralement bas sur ceux illustrs dans le
tableau prcdent.
Composants Swing Interface de modle Classe implmentant l'interface
de modle
JTextField, JPasswordField,
JTextArea, JTextPane,
JEditorPane
Document (dans le package
javax.swing.text)
PlainDocument et
DefaultStyledDocument
JButton, JCheckBox,
JCheckBoxMenuItem, JMenu,
JMenuItem, JRadioButton,
JRadioButtonMenuItem,
JToggleButton
ButtonModel DefaultButtonModel
JComboBox ComboBoxModel DefaultComboBoxModel
JProgessBar, JScrollBar,
JSlider
BoundedRangeModel DefaultBoundedRangeModel
JList ListModel, ListSelectionModel DefaultListModel,
DefaultListSelectionModel
JTable TableModel (dans le package
javax.swing.table)
ListSelectionModel
DefaultTableModel,
DefaultListSelectionModel
JTree TreeModel, TreeSelectionModel
(les deux interfaces se trouvent
dans le package
javax.swing.table)
DefaultTreeModel,
DefaultTreeSelectionModel

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-26
Copyright 2008, Oracle. Tous droits rservs.
Mthodes lmentaires des composants
de type texte
Mthodes des lments de type texte (JLabel,
JTextField et JButton) :
void setText(String value)
String getText()
Autres mthodes de JTextArea :
void append(String value)
void insert(String value, int pos)
Les modifications apportes au contenu des composants
sont gnralement effectues dans le thread de gestion
des vnements.
Remarque : Consultez la documentation de l'API Java pour en
savoir plus sur les fonctionnalits de chaque composant.
Obtenir et dfinir les proprits
Des mthodes diffrentes sont utilises pour alimenter les divers composants Swing avec des
valeurs, ainsi que pour extraire les valeurs contenues dans les composants. En gnral, la
plupart des lments de type texte, tels que les libells, les champs de texte et les zones de
texte, comportent une mthode setText(String value) qui affecte au contenu la
valeur de type string indique, ou une mthode String getText() qui renvoie le
contenu en tant qu'objet String.
Remarque : Vous devez utiliser les mthodes setText() et getText() pour
(respectivement) modifier et obtenir le libell d'un objet JButton. N'utilisez pas les
mthodes setLabel() et getLabel(), dsormais obsoltes.
Les objets JTextArea sont des zones de texte plusieurs lignes. Ils permettent donc
d'ajouter du texte au contenu existant, d'insrer du texte une position donne ou de
remplacer du texte. Consultez la documentation de l'API Java pour en savoir plus sur ces
mthodes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-27
Copyright 2008, Oracle. Tous droits rservs.
Mthodes lmentaires des composants JList
Voici un sous-ensemble des mthodes du composant JList :
void setListData(Vector)
Copie un Vector dans un composant ListModel appliqu
avec setModel
void setModel(ListModel)
Dfinit le modle reprsentant les donnes et efface la
slection
Utilise la classe DefaultListModel pour le modle
Object getSelectedValue()
Renvoie l'objet slectionn ou null si rien n'est slectionn
int getSelectedIndex()
Renvoie l'index de l'lment slectionn ou 1 si rien n'est
slectionn
Composants de type liste
JList et JComboBox sont des composants Swing permettant de grer des listes de donnes.
La diapositive ci-dessus dcrit quelques-unes des mthodes fournies par la classe JList.
Vector vector = new Vector();
Jlist list = new JList(vector);
Par exemple, si vous crez un objet JList avec le constructeur qui accepte un vecteur, les
lments du vecteur sont copis dans un objet DefaultListModel cr en interne. Ainsi,
si vous ajoutez des lments au vecteur avec la mthode addElement(), les nouveaux
lments ne sont pas visibles dans la liste JList tant que vous n'avez pas appel la mthode
JList.setListData() en transmettant comme argument l'objet vecteur mis jour. Ce
procd n'est pas efficace, car les lments sont de nouveau copis partir du vecteur et un
nouvel objet DefaultListModel est cr en interne.
Il est prfrable de crer d'abord l'objet DefaultListModel et de l'utiliser comme un
Vector, puis de crer l'objet JList avec le constructeur appropri, par exemple :
DefaultListModel model = new DefaultListModel();
Jlist list = new JList(model);
Vous pouvez galement appeler la mthode setModel(). A mesure que des lments sont
ajouts l'objet DefaultListModel l'aide de la mthode addElement(), ils
apparaissent automatiquement dans l'affichage graphique de l'objet JList.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-28
Copyright 2008, Oracle. Tous droits rservs.
Evnements qu'un
composant peut gnrer
Mthodes du gestionnaire
d'vnements
Quels sont les vnements qu'un composant
peut gnrer ?
Chaque type de composant gnre des vnements diffrents
Pour savoir quels vnements un composant peut gnrer avec JDeveloper, slectionnez ce
composant dans le volet de conception, puis cliquez sur l'onglet Events dans le gestionnaire
de proprits. La liste de tous les vnements que le composant peut gnrer s'affiche.
Pour chaque vnement, le gestionnaire de proprits indique galement si une mthode de
gestionnaire d'vnements a dj t installe. Dans la diapositive ci-dessus, le gestionnaire
de proprits affiche tous les vnements du composant JButton, savoir findButton.
Comme vous n'avez pas encore install de gestionnaire d'vnements, la liste du gestionnaire
de proprits ne comporte aucune mthode de gestionnaire d'vnements.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-29
Copyright 2008, Oracle. Tous droits rservs.
1. Slectionnez l'vnement grer.
2. Cliquez sur la colonne
de droite pour saisir
un nom de mthode.
3. Cliquez deux fois sur la colonne
de droite pour crer la mthode.
Dfinir un gestionnaire d'vnements dans
JDeveloper
Dfinir un gestionnaire d'vnements dans JDeveloper
JDeveloper facilite la dfinition de mthodes de gestionnaire d'vnements dans votre code :
Dans l'diteur d'interface graphique, slectionnez le composant pour lequel vous souhaitez
ajouter un gestionnaire d'vnements.
Dans le gestionnaire de proprits, l'onglet Events affiche la liste de tous les vnements
que le composant peut gnrer. Cliquez sur l'vnement grer.
Lorsque vous cliquez sur la colonne de droite de cet vnement, le gestionnaire de
proprits propose un nom pour la mthode de gestionnaire d'vnements qui va tre
gnre. Dans notre exemple, la mthode de gestionnaire d'vnements s'appelle
findButton_actionPerformed.
Cliquez sur le bouton "" afin d'obtenir une suggestion de nom pour la mthode de
gestionnaire d'vnements dans la bote de dialogue. JDeveloper gnre la mthode de
gestionnaire d'vnements dans votre code.
Notez que lorsque vous cliquez deux fois sur le bouton dans l'diteur d'interface graphique, le
processus d'coute et le gestionnaire d'vnements sont automatiquement crs. Vous pouvez
galement cliquer sur l'onglet Events du gestionnaire de proprits et cliquer deux fois sur le
nom du processus d'coute.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-30
Dfinir un gestionnaire d'vnements dans JDeveloper (suite)
Evnement actionPerformed
De nombreux composants de l'interface graphique possdent un vnement spcial appel
actionPerformed. Pour la plupart des composants, actionPerformed est l'vnement le
plus frquemment utilis. Par exemple, un objet JButton gnre un vnement
actionPerformed lorsque l'utilisateur clique sur le bouton. Un objet JList gnre un
vnement actionPerformed lorsque l'utilisateur clique deux fois sur l'objet. Utilisez
actionPerformed dans la mesure du possible, plutt qu'un vnement du type
mouseClicked.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-31
Copyright 2008, Oracle. Tous droits rservs.
public void jbInit() throws Exception {

findButton.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
findButton_actionPerformed(e);
}
});
void findButton_actionPerformed(ActionEvent e) {
// Your code to handle the ActionEvent
}
Find
Style par dfaut du code de gestion des
vnements gnr par JDeveloper
Que se passe-t-il lorsqu'un vnement est dclench ?
Lorsque l'utilisateur clique sur un bouton, ce dernier examine sa liste d'objets processus
d'coute enregistrs et appelle la mthode actionPerformed() sur chacun de ces
objets. L'un des objets processus d'coute est le nouvel objet ActionListener (sans
nom) cr et enregistr dans la mthode jbInit() de l'applet.
L'implmentation de actionPerformed() par l'objet processus d'coute appelle la
mthode du gestionnaire.
Par dfaut, JDeveloper utilise des classes internes anonymes dans le code de gestion des
vnements qu'il gnre. Vous pouvez cependant le configurer pour qu'il cre une classe de
processus d'coute distincte (appele style d'adaptateur standard).
La procdure permettant de slectionner cette option de style de code est la suivante :
Slectionnez Tools > Preferences.
Slectionnez le noeud Java Visual Editor. Dans le volet Event Settings cliquez sur l'un
des boutons suivants :
- Anonymous Inner Class
- Standard Adapter
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-32
Copyright 2008, Oracle. Tous droits rservs.
public class JFrame1 extends JFrame {

void findButton_actionPerformed(ActionEvent e){


// When the user clicks the button, display
// the list of customers in jTextArea1
String findList = ("Supplies-R-Us " + "\n" +
"Consulting Inc. " + "\n" +
"Just-In-Time Training ");
jTextArea1.setText(findList);
}
}
Complter la mthode de gestionnaire
d'vnements
Complter la mthode de gestionnaire d'vnements
Lorsque vous ajoutez une mthode de gestionnaire d'vnements dans JDeveloper, ce dernier
dfinit un squelette de mthode dans le programme. Il gnre galement le code du processus
d'coute d'vnement et vrifie que la mthode est appele lorsque l'vnement se produit.
Utiliser des mthodes dans les classes Button et Label
Le gestionnaire d'vnements prsent dans la diapositive ci-dessus est appel lorsque
l'utilisateur clique sur findButton. La mthode de gestionnaire d'vnements effectue
alors les oprations suivantes :
Elle construit une chane contenant une liste de clients. Dans une application relle, la
chane serait construite par l'appel d'une mthode qui renvoie une chane. Cette mthode
peut rcuprer les donnes partir d'une base de donnes, d'un fichier ou d'une autre
source.
Elle appelle JTextArea1.setText() afin d'affecter la proprit text de la zone
de texte du panneau la chane reprsentant la liste des clients.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-33
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
ajouter un composant Swing un conteneur graphique
consulter et modifier le contenu des composants
utiliser le modle AWT de gestion des vnements pour :
crer une source d'vnement
crer un processus d'coute d'vnement et le code
du gestionnaire
enregistrer un processus d'coute d'vnement pour grer
l'vnement
crer une barre de menus avec des menus et des options
de menu
grer les vnements
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-34
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 17-2 :
Ajouter le code de gestion des vnements
Cet exercice porte sur l'ajout du code de gestion des
vnements pour :
le menu Order > New
le bouton Find Customer
les boutons Add Product et Remove Product
Prsentation de l'exercice 17-2 : Ajouter le code de gestion des vnements
Dans cet exercice, vous allez crer les dtails de saisie des commandes. Vous allez ajouter le
code de gestion des vnements pour le menu Order > New, le bouton Find Customer et les
boutons Add Product et Remove Product.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les17-2, chargez
l'application OrderEntryApplicationLes17-2, puis continuez.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Dployer des applications Java
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
crer des packages de programmes sous forme de
fichiers .jar
dcrire les avantages lis l'utilisation de Java Web
Start
dployer une application l'aide de Java Web Start
Objectifs
Une fois que vous avez dvelopp votre application Java, vous devez la dployer. Ce chapitre
prsente les options dont vous disposez pour dployer des applications Java.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-3
Copyright 2008, Oracle. Tous droits rservs.
Crer des packages et dployer des projets Java
Java prend en charge un fichier d'archive que vous
pouvez utiliser pour regrouper tous les fichiers d'un
projet dans un fichier compress.
Ce fichier unique peut ensuite tre dploy sur
l'ordinateur d'un utilisateur final en tant qu'application.
Il est galement possible de le tlcharger vers un
navigateur en une seule transaction HTTP.
Crer des packages et dployer des projets Java
Un projet peut comprendre un grand nombre de classes et de fichiers de support tels que des
fichiers d'images et des fichiers audio. Pour que les utilisateurs puissent faire fonctionner vos
programmes, vous devez leur fournir tous ces fichiers. Java vous facilite la tche en prenant
en charge un fichier d'archive qui permet de regrouper tous les fichiers d'un projet dans un
fichier compress.
Grce l'archivage, les applications et applets Java ainsi que leurs composants requis (fichiers
.class, images et sons) se transportent sous la forme d'un fichier unique qui peut tre
dploy sur l'ordinateur d'un utilisateur final en tant qu'application. Vous pouvez galement
tlcharger l'archive vers un navigateur en une seule transaction HTTP au lieu d'ouvrir une
nouvelle connexion pour chaque lment. Cela simplifie considrablement le dploiement des
applications et amliore la vitesse de chargement et de mise en route des applets dans les
pages Web.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-4
Copyright 2008, Oracle. Tous droits rservs.
Dployer un fichier .jar
Vous pouvez transformer une archive simple en fichier
.jar excutable qui peut tre lanc l'aide de la
commande java.
Avant de dployer un fichier .jar excutable, vous
devez crer un profil de dploiement.
Les profils de dploiement sont des jeux de proprits
nomms, stocks parmi les proprits d'une
application ou d'un projet, qui rgissent le dploiement
de cette application ou de ce projet.
Un profil de dploiement dfinit le format et le contenu
du fichier d'archive crer.
Dployer un fichier .jar
Les profils de dploiement sont des proprits de niveau application ou projet qui rgissent le
dploiement d'une application ou d'un projet. Un profil de dploiement indique le nom des
fichiers source, des descripteurs de dploiement et d'autres fichiers auxiliaires inclure dans
le package, le type et le nom du fichier d'archive crer, des dtails relatifs aux dpendances,
des instructions propres la plate-forme et d'autres informations.
JDeveloper fournit un assistant pour vous aider crer un profil de dploiement.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-5
Copyright 2008, Oracle. Tous droits rservs.
Dployer des applications avec JDeveloper
L'assistant JDeveloper Deployment Profile Wizard :
dtecte les dpendances entre classes
cre des fichiers .ear, .war, .jar ou .zip
permet de contrler les autres fichiers ajouts
l'archive dploye
permet d'enregistrer les paramtres du profil de
dploiement dans les fichiers du projet :
afin de simplifier le redploiement lorsque le code
change
qui peuvent tre automatiquement mis jour avec les
nouvelles classes ajoutes au projet
Dployer des applications avec JDeveloper
Oracle JDeveloper offre un assistant de dploiement qui facilite la plupart des tches
fastidieuses associes au dploiement d'une application.
Cet assistant dtecte les classes utilises dans l'application et propose leur inclusion dans le
fichier d'archive qu'il cre. ll permet galement d'indiquer des rgles pour l'inclusion de
fichiers dans l'archive, afin de contrler les types de fichier qui sont automatiquement
slectionns.
L'assistant fournit galement une bote de dialogue permettant d'ajouter manuellement les
fichiers qui n'ont pas t dtects. En effet, il ne peut dtecter que les dpendances entre
classes reconnues au cours de la phase de compilation. Il ne reconnat pas les fichiers de
ressources obligatoires, tels que les fichiers image et son, ou les classes charges
dynamiquement. Ces fichiers ne sont donc proposs par l'assistant que s'ils sont inclus dans le
projet.
Les paramtres que vous choisissez ou que vous dfinissez l'aide de l'assistant de
dploiement sont conservs dans des profils et rendus accessibles ds que vous excutez
l'assistant.
Il est judicieux de recompiler l'ensemble du projet avant de dployer l'application.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-6
Copyright 2008, Oracle. Tous droits rservs.
Crer le profil de dploiement
1. Slectionnez File >
New.
2. Dans la fentre
New Gallery,
slectionnez
General >
Deployment Profiles
dans le volet
Categories et JAR
File dans le volet
Items.
3. Cliquez sur OK.
Crer le profil de dploiement
1. Dans le navigateur d'applications (Application Navigator), slectionnez l'entit
(application ou projet) pour laquelle vous voulez crer un profil de dploiement.
2. Cliquez sur File > New pour ouvrir la fentre New Gallery.
3. Dans l'arborescence Categories, dveloppez General et slectionnez Deployment
Profiles. Dans le volet Items, slectionnez l'option JAR File.
4. Cliquez sur OK.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-7
Copyright 2008, Oracle. Tous droits rservs.
Crer le profil de dploiement
Nommez le profil de dploiement.
Assistant Deployment Profile Wizard : Page Create Deployment Profile JAR File
5. Dans la bote de dialogue Create Deployment Profile, entrez le nom du profil et cliquez
sur OK.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-8
Copyright 2008, Oracle. Tous droits rservs.
Slectionner les fichiers dployer
Slectionnez les types de fichier inclure. Ce processus
est appel configuration.
Slectionner les fichiers dployer
6. Slectionnez les fichiers inclure dans votre profil de dploiement. Cliquez sur OK pour
fermer la bote de dialogue et crer le profil de dploiement.
- Le processus qui consiste assembler un fichier d'archive partir des fichiers qui le
composent est appel configuration. La configuration est indique dans la branche
File Groups des proprits du profil de dploiement. La branche File Groups se
compose d'une liste de groupes de fichiers dont chacun dfinit un certain nombre de
composants. L'archive finale sera la runion de tous ces groupes de fichiers. L'ordre
des groupes de fichiers est utilis pour rsoudre les conflits de noms : si deux
fichiers portent le mme nom, celui qui appartient au groupe de plus haut rang dans
la liste est inclus tandis que l'autre est omis.
- Lorsque vous crez un profil de dploiement, celui-ci comprend un ou plusieurs
groupes de fichiers prdfinis. Vous pouvez ensuite y ajouter, supprimer ou modifier
des groupes de fichiers.
- Les groupes de fichiers sont dfinis par un jeu de contributeurs slectionns par un
jeu de filtres. Les contributeurs sont les fichiers source, les fichiers .jar et les
rpertoires inclure. Les filtres sont des rgles qui sont appliques aux contributeurs
ou aux sous-rpertoires et fichiers de contributeurs afin d'identifier le jeu de fichiers
inclure dans le package.
Les groupes de fichiers sont de trois types :
- Le type Packaging permet de slectionner des contributeurs, des rpertoires de
projet ou autres, des fichiers .jar et des filtres. Souple et transparent, le mcanisme
des groupes de fichiers convient la plupart des projets.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-9
Slectionner les fichiers dployer (suite)
- Le type de groupe de fichiers Dependency Analysis permet de slectionner des
contributeurs constitus de fichiers de projet et de leurs dpendances. L'analyse des
dpendances est le mcanisme de packaging qui tait fourni par JDeveloper avant la
version 9.0.5.1. Par dfaut, les profils crs dans la version 9.0.5.1 ou les versions
ultrieures ne contiennent pas de groupe de fichiers Dependency Analysis.
- Le type de groupe de fichiers Libraries permet de slectionner des contributeurs
constitus de bibliothques de projet. Un groupe de fichiers de ce type est cr pour
les profils de dploiement WAR. Les groupes de fichiers Libraries sont utiles dans
d'autres projets qui ncessitent la cration de nouveaux packages partir de fichiers
.jar existants.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-10
Copyright 2008, Oracle. Tous droits rservs.
Crer le fichier d'archive et le dployer
1. Cliquez avec le bouton droit de la souris sur le nom
du projet.
2. Slectionnez Deploy > [nom du profil] > to JAR file.
Dployer le fichier .jar
1. Cliquez avec le bouton droit de la souris sur le projet dans lequel vous avez cr le profil
de dploiement et slectionnez Deploy > [nom du profil] > to JAR file dans le menu
contextuel.
2. Le fichier d'archive Java est plac dans le rpertoire indiqu dans le champ JAR File de
la page de proprits JAR Options de l'archive.
Editer le fichier du profil
Cliquez deux fois sur le nom du projet pour afficher la bote de dialogue Project Properties.
Slectionnez Deployment dans la liste de gauche. Dans le volet Deployment Profiles,
slectionnez le profil diter et cliquez sur le bouton Edit. Le champ Jar File de la fentre
JAR Options indique l'emplacement du fichier d'archive.
Dployer une application ou un fichier WAR sur WebLogic Server
Si vous devez dployer l'application sur un serveur d'applications tel que WebLogic Server,
vous devez utiliser Oracle Connection Manager pour tablir une connexion avec le serveur.
Le formateur vous fournira les instructions ncessaires pour accomplir cette tche.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-11
Copyright 2008, Oracle. Tous droits rservs.
Crer un fichier .jar excutable
Affectez au champ Main Class le nom de la classe contenant
une mthode main() dans la page JAR Options.
Crer un fichier .jar excutable
Pour transformer votre archive simple en fichier JAR excutable que vous pourrez lancer
l'aide de la commande java :
1. Cliquez avec le bouton droit de la souris sur le nom du projet dans le navigateur
d'applications (Application Navigator) et slectionnez Project Properties.
2. Slectionnez le nom du profil dans la section Deployment de la bote de dialogue Project
Properties et cliquez sur Edit.
3. Cliquez sur JAR Options dans l'arborescence.
4. Cochez la case Include Manifest File. Le manifeste est un fichier spcial qui contient
des informations sur les fichiers inclus dans une archive .jar.
5. Dans le champ Main Class, entrez le nom entirement qualifi, mais sans l'extension
.class, de la classe de l'application contenant la mthode main() que vous appelez lors
de l'utilisation de l'option de ligne de commande java jar. Le seul moyen de crer
un fichier .jar excutable consiste dfinir l'attribut principal Main Class.
6. Cliquez sur OK.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-12
Crer un fichier .jar excutable (suite)
Exemple
Si le fichier d'archive JAR gnr se nomme OrderEntry.jar, excutez la classe
d'application principale de la faon suivante :
java -jar OrderEntry.jar
Si vous n'entrez pas de nom pour l'archive JAR dans le champ Main Class, vous pouvez tout de
mme excuter partir de la ligne de commande n'importe quelle classe du fichier JAR
comprenant une mthode main(), de la faon suivante :
Configurez le CLASSPATH pour qu'il comprenne le fichier JAR nomm
java package.ClassName
Vous pouvez galement utiliser l'option de ligne de commande -classpath de la faon
suivante :
java -classpath {archivefilename}.jar package.ClassName
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-13
Copyright 2008, Oracle. Tous droits rservs.
Java Web Start
Il s'agit d'une technologie de dploiement d'applications
base sur la plate-forme Java 2.
Elle permet le lancement d'applications compltes par
l'intermdiaire de n'importe quel navigateur, sur toute
plate-forme et partir de n'importe quel site Web.
Java Web Start
Java Web Start est une technologie de dploiement d'applications cre par Sun
Microsystems, Inc. qui permet de lancer des applications compltes par l'intermdiaire de
n'importe quel navigateur, sur toute plate-forme et partir de n'importe quel site Web. Une
fois l'application lance, le navigateur peut tre ferm et l'application continue de fonctionner.
Etant donn que les applications Java Web Start ne sont pas lies au navigateur, vous pouvez
conserver vos anciennes applications sans avoir les remplacer par une version base sur une
interface HTML qui s'excute dans un navigateur Web.
JDeveloper prend en charge la cration de la dfinition JNLP (Java Network Launching
Protocol) utilisant le langage XML sur laquelle s'appuie la technologie Java Web Start.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-14
Copyright 2008, Oracle. Tous droits rservs.
Avantages de Web Start
Aussi facile dployer que du code HTML
Permet de lancer les applications via le menu Dmarrer
sur le bureau
Ne ncessite pas que le navigateur soit en cours
d'excution
Permet le fonctionnement hors ligne des applications
Mise jour automatique des applications lors de l'appel
Avantages de Web Start
Fonctionnalits de Java Web Start
Web Start combine la facilit de dploiement du code HTML avec la richesse fonctionnelle
des applications dotes d'une interface graphique. Les applications peuvent tre lances avec
un navigateur, sur n'importe quel type de plate-forme, partir de n'importe quel emplacement
sur un intranet ou sur Internet. Pour le lancement initial, il est ncessaire de tlcharger un
fichier de petite taille contenant l'application. L'accs suivant est plus rapide, car les donnes
sont fournies par le cache local. Le fonctionnement est semblable celui d'un plug-in de
navigateur tel que RealAudio. Le logiciel Java Web Start tant install une fois pour toutes
sur leur ordinateur, les utilisateurs peuvent excuter des applications et des applets en cliquant
simplement sur un lien de page Web. Si l'application n'est pas prsente sur l'ordinateur, Java
Web Start tlcharge tous les fichiers ncessaires partir du serveur Web qui hberge les
bibliothques de l'application. Il place ensuite ces fichiers dans la mmoire cache de
l'ordinateur client, de sorte que l'application peut tre relance tout moment, partir d'une
icne du bureau ou d'un lien du navigateur. L'utilisateur dispose toujours de la version la plus
rcente de l'application, puisque Java Web Start effectue toutes les mises jour ncessaires.
Pour plus d'informations sur Java Web Start, visitez la page Web suivante de Sun
Microsystems : http://java.sun.com/products/javawebstart/
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-15
Copyright 2008, Oracle. Tous droits rservs.
Excuter une application Web Start
1. Demandez l'application.
2. Lancez Web Start sur
l'ordinateur local.
3. Tlchargez
l'application.
4. Lancez l'application
(Draw).
HTTP
HTTP
1 2
3
4
Prsentation de l'architecture Java Web Start
Le logiciel Java Web Start doit tre install sur votre ordinateur pour que vous puissiez lancer
une application.
1. Lorsque vous cliquez sur un lien de tlchargement, ce dernier indique au navigateur
qu'il doit appeler Java Web Start. Un fichier JNLP excute l'application.
2. La technologie Java Web Start interroge le navigateur Web afin de dterminer si toutes
les ressources ncessaires l'application ont dj t charges. Si tel est le cas et que la
version la plus rcente de l'application est prsente, l'application peut tre lance.
3. L'application est lance.
Si l'application n'est pas prsente sur l'ordinateur, Java Web Start tlcharge automatiquement
tous les fichiers ncessaires partir du serveur Web qui hberge les bibliothques de
l'application. Ces fichiers sont ensuite placs dans la mmoire cache de l'ordinateur client, de
sorte que l'application peut tre relance tout moment, partir d'une icne sur le bureau ou
d'un lien dans le navigateur. Vous disposez toujours de la version la plus rcente de
l'application, puisque Java Web Start effectue toutes les mises jour ncessaires.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-16
Copyright 2008, Oracle. Tous droits rservs.
Examiner le fichier JNLP
Le fichier JNLP dfinit :
l'emplacement des ressources de l'application
les informations qui apparaissent lors du chargement
de l'application
les ressources de l'application
Utiliser le fichier JNLP
La technologie Java Web Start permet le dploiement Web via les protocoles Internet
existants. Les applications sont lances lorsqu'un client accde (gnralement en cliquant sur
un lien dans une page HTML) un fichier de lancement spcial prsentant l'extension
.jnlp.
Cette technologie s'appuie sur l'API JNLP (Java Network Launching Protocol), laquelle
fournit des services permettant aux applications d'obtenir des informations qui ne sont
gnralement pas disponibles via l'API de la plate-forme Java SE (Java 2, Standard Edition).
Ces services incluent l'accs au presse-papiers du systme, le contrle de la mise en cache des
ressources, l'import de fichiers partir d'un disque local, etc.
Le protocole JNLP intervient lors du packaging pour le dploiement. Outre un fichier JAR
pour les classes de l'application, il ncessite la cration d'un fichier descripteur indiquant
comment dmarrer l'application.
Il requiert galement que vous indiquiez l'emplacement des ressources de l'application, les
informations afficher dans la fentre qui apparat pendant le chargement de l'application,
ainsi que les ressources de l'application.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-17
Copyright 2008, Oracle. Tous droits rservs.
Dployer une application pour Java Web Start
l'aide de JDeveloper
Etape 1 : Gnrez les profils de dploiement et archivez
l'application.
Etape 2 : Dmarrez le serveur WebLogic.
Etape 3 : Utilisez l'assistant Java Web Start pour crer
un fichier JNLP.
Etape 4 : Archivez et dployez l'application sur le serveur
WebLogic.
Comment dployer une application Web pour Java Web Start
Vous pouvez utiliser le processus trs simple de dploiement Web de JDeveloper pour
configurer le serveur Web avant de tlcharger et d'excuter l'application l'aide de Java Web
Start. Le processus de dploiement est le mme pour le serveur WebLogic Server intgr de
JDeveloper et pour un serveur de production.
Vous devez d'abord crer une archive de dploiement de l'application Java l'aide de
l'assistant de dploiement. Il en rsulte la cration d'un fichier .jar contenant tous les
fichiers de l'application.
Ensuite, vous dmarrez le serveur d'applications utilis pour fournir l'application. Dans
JDeveloper, slectionnez Run > Start Server Instance.
Utilisez ensuite l'assistant de JDeveloper pour crer le fichier JNLP. Il est judicieux de placer
tous les fichiers de dploiement (HTML, JNLP, XML) dans un projet JDeveloper distinct.
Enfin, crez un fichier de dploiement Web contenant les informations propres au
dploiement et le descripteur de dploiement appropri.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-18
Copyright 2008, Oracle. Tous droits rservs.
Etape 1 : Gnrer les profils de dploiement
et l'archive de l'application
Packagez tous les fichiers de l'application Java dans une
archive .jar simple.
Etape 1 : Gnrer les profils de dploiement et l'archive de l'application
Suivez la procdure dcrite prcdemment dans ce chapitre pour crer le profil de
dploiement et le fichier .jar de votre application Java.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-19
Copyright 2008, Oracle. Tous droits rservs.
Etape 2a : Dmarrer le serveur
Slectionnez Run > Start Server Instance pour lancer
WebLogic Server.
Une connexion au serveur est
cre automatiquement dans
la palette de ressources
(Resource Palette).
Etape 2a : Dmarrer le serveur
Oracle JDeveloper (11g) inclut WebLogic Server 10.3. Slectionnez Run > Start Server
Instance pour lancer WebLogic Server. Lorsque le serveur a dmarr, la rfrence de la
connexion correspondante s'affiche dans la palette de ressources (Resource Palette).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-20
Copyright 2008, Oracle. Tous droits rservs.
Etape 2b : Tester la connexion
Pour examiner les dtails de
la connexion et la tester :
Cliquez avec le bouton
droit de la souris sur le
nom de la connexion et
slectionnez Properties.
Vrifiez les proprits
gnres
automatiquement, puis
cliquez sur l'onglet Test.
Cliquez sur le bouton
Test Connection.
Etape 2b : Tester la connexion
En cliquant avec le bouton droit de la souris sur la connexion au serveur d'applications
gnre automatiquement et en slectionnant Properties dans le menu contextuel, vous
accdez la bote de dialogue Edit Application Server qui vous permet la fois d'examiner
les proprits de la connexion et d'effectuer des tests.
La bote de dialogue Edit Application Server comprend quatre onglets. Les trois premiers
permettent d'examiner les proprits gnres automatiquement pour la connexion au serveur.
Pour effectuer un test, cliquez sur l'onglet Test, puis sur le bouton Test Connection. Les
rsultats s'affichent dans la zone Status.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-21
Copyright 2008, Oracle. Tous droits rservs.
Etape 3 : Utiliser l'assistant Java Web Start
pour crer un fichier JNLP
Pour appeler l'assistant
Java Web Start :
Slectionnez
Deployment
Descriptors >
Java Web
Start (JNLP) Files.
Etape 3 : Utiliser l'assistant Java Web Start pour crer un fichier JNLP
Vous pouvez utiliser l'assistant Java Web Start pour crer une dfinition JNLP base sur le
langage XML, que le logiciel Java Web Start utilise pour tlcharger et excuter l'application
sur l'ordinateur client.
Pour appeler l'assistant, slectionnez Deployment Descriptors > Java WebStart (JNLP) Files.
Les pages de l'assistant vous permettent d'indiquer les informations prsenter l'utilisateur
pendant le tlchargement (par exemple, le titre de l'application, le fournisseur et une brve
description).
L'assistant cre le fichier JNLP complet et un fichier HTML facultatif pour le lancement de
l'application Web Start.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-22
Copyright 2008, Oracle. Tous droits rservs.
Etape 4 : Archiver et dployer l'application
sur le serveur WebLogic
Indiquez les proprits des composants Web et
une description du dploiement.
Procdez au dploiement sur la connexion au serveur
cre l'tape 2.
Excutez le fichier HTML gnr.
Etape 4 : Archiver et dployer l'application sur le serveur WebLogic
Crez un fichier .war (Web Application Archive) pour dployer l'application sur le serveur
Web. Ce fichier inclut le contenu du rpertoire public_html situ dans votre dossier
JDeveloper mywork, y compris les fichiers .jar, .html et .jnlp.
Pour dployer le fichier .war :
Cliquez avec le bouton droit de la souris sur le projet contenant les fichiers de
dploiement et slectionnez Deploy > [nom du profil de dploiement .war] > to >
[connexion au serveur] (par exemple, Deploy > webapp1 > to >
IntegratedWLSConnection) dans le menu contextuel.
Excutez le fichier HTML gnr.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 18-23
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
crer un fichier .jar excutable contenant votre
application
dcrire le rle de Java Web Start dans le dploiement
et citer ses avantages
dcrire la faon dont une application Java Web Start
s'excute
utiliser JDeveloper pour dployer une application
l'aide de Java Web Start
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Annexe A :
Exercices
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java A - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 3
Table des matires

Annexe A : Exercices ........................................................................................................................... 1
Exercices - Chapitre 1........................................................................................................................... 4
Exercice 1 : Prsentation des plates-formes Java et Oracle ........................................................... 4
Exercices - Chapitre 1........................................................................................................................... 5
Exercice 2 : Syntaxe Java lmentaire et conventions de codage ................................................. 5
Exercices - Chapitre 2........................................................................................................................... 9
Exercice 3 : Explorer les types de primitive et les oprateurs ....................................................... 9
Exercices - Chapitre 3......................................................................................................................... 11
Exercice 4 : Contrler le flux du programme................................................................................ 11
Exercices - Chapitre 5......................................................................................................................... 17
Exercice 5 : Programmer en Java l'aide d'Oracle JDeveloper 11g ........................................... 17
Exercices - Chapitre 6......................................................................................................................... 21
Exercice 6 : Crer des classes et des objets................................................................................... 21
Exercices - Chapitre 7......................................................................................................................... 24
Exercice 7 : Classes de cycle de vie des objets............................................................................. 24
Exercices - Chapitre 8......................................................................................................................... 28
Exercice 8 : Utiliser des chanes, des classes StringBuffer, des classes wrapper
et des classes de formatage de texte .............................................................................................. 28
Exercices - Chapitre 9......................................................................................................................... 31
Exercice 9 : Utiliser des flux pour les E/S..................................................................................... 31
Exercices - Chapitre 10....................................................................................................................... 36
Exercice 10 : Hritage et polymorphisme ..................................................................................... 36
Exercices - Chapitre 11....................................................................................................................... 42
Exercice 11 : Utiliser les tableaux et les collections..................................................................... 42
Exercices - Chapitre 12....................................................................................................................... 48
Exercice 12 : Utiliser les types gnriques.................................................................................... 48
Exercices - Chapitre 13....................................................................................................................... 49
Exercice 13 : Structurer le code l'aide de classes abstraites et d'interfaces.............................. 49
Exercices - Chapitre 14....................................................................................................................... 56
Exercice 14 : Gnrer et dtecter les exceptions .......................................................................... 56
Exercices - Chapitre 15....................................................................................................................... 59
Exercice 15 : Utiliser JDBC pour accder la base de donnes ................................................. 59
Exercices - Chapitre 16....................................................................................................................... 63
Exercice 16 : Utiliser Swing pour planifier la prsentation de l'application............................... 63
Exercices - Chapitre 17....................................................................................................................... 69
Exercice 17-1 : Ajouter des composants d'interface graphique................................................... 69
Exercice 17-2 : Ajouter le code de gestion des vnements ........................................................ 73
Exercices - Chapitre 18....................................................................................................................... 80
Exercice 18 : Dployer des applications Java............................................................................... 80


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 4
Exercices - Chapitre 1
Exercice 1 : Prsentation des plates-formes Java et Oracle
Il n'y a pas d'exercice associ ce chapitre.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 5
Exercices - Chapitre 2
Exercice 2 : Syntaxe Java lmentaire et conventions de codage
Objectif
L'objectif de cet exercice est de crer du code Java, de l'examiner et de comprendre son
fonctionnement. Vous commencerez par crire et excuter une application Java trs simple. Ce
faisant, vous vous familiariserez avec l'application de saisie de commandes OrderEntry que vous
utiliserez tout au long du cours. Vous utiliserez un modle UML (Unified Modeling Language)
de cette application pour crer des fichiers de classes supplmentaires et vous excuterez des
applications Java simples en corrigeant toutes les erreurs rencontres.
Les exercices de ce chapitre et des deux suivants sont destins vous familiariser avec la syntaxe
et la structure du langage Java. Ils n'ont qu'un but pdagogique. Ils ne prtendent pas prsenter un
ensemble de mthodes de dveloppement recommandes. A partir du chapitre 5, les exercices
remplissent une fonction diffrente. Vous utiliserez alors JDeveloper pour crer une application
l'aide des techniques employes dans un environnement de dveloppement rel. Les exercices
continueront d'illustrer les concepts techniques prsents dans le chapitre, mais ils intgreront
galement des mthodes recommandes pour le dveloppement d'une application Java.
Tches accomplir
Dans cet exercice, vous allez crire et excuter une application Java trs simple. Vous
commencerez ensuite vous familiariser avec l'application de saisie de commandes OrderEntry.
Ecrire et excuter une application Java simple
Remarque : Si vous fermez une fentre DOS ou modifiez l'emplacement des fichiers .class,
vous devez redfinir la variable CLASSPATH.

1. Ouvrez une fentre DOS. Accdez au rpertoire C:\labs\D53983GC11\temp (ou
l'emplacement indiqu par le formateur) et crez un fichier nomm HelloWorld.java
dans le Bloc-notes l'aide des commandes suivantes :
cd \labs\D53983GC11\temp

notepad HelloWorld.java

2. Dans le Bloc-notes, entrez le code suivant, en indiquant votre nom dans le commentaire //
Author. En outre, veillez respecter la casse du texte du code aprs les commentaires
(souvenez-vous que le langage Java fait la distinction entre majuscules et minuscules).
// File: HelloWorld.java
// Author: <Enter Your Name>
public class HelloWorld {
public static void main(String[] args)
{
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 2 : Syntaxe Java lmentaire et conventions de codage
(suite)
Oracle Fusion Middleware 11g : Programmation Java A - 6
System.out.println("Hello World!");
}
}
3. Enregistrez le fichier dans le rpertoire C:\labs\D53983GC11\temp, en cliquant sur
Fichier > Enregistrer. Laissez le Bloc-notes ouvert, au cas o des erreurs de compilation vous
obligeraient corriger le code source.
4. Compilez le fichier HelloWorld.java (les majuscules sont importantes).
a. Dans la fentre DOS, assurez-vous que le rpertoire en cours est
C:\labs\D53983GC11\temp (ou le rpertoire indiqu par votre formateur) et que la
variable systme PATH rfrence JDeveloper\jdk\bin.
b. Vrifiez que le fichier source Java est enregistr sur le disque.
(Indice : Entrez la commande dir Hello*)
c. Compilez le fichier l'aide de la commande javac HelloWorld.java.
d. Attribuez un nom au fichier qui est cr si la compilation du code russit.
(Indice : Entrez la commande dir Hello*)
5. Excutez l'application HelloWorld (les majuscules sont importantes) et examinez les
rsultats.
a. Excutez le fichier l'aide de la commande java HelloWorld.
b. Que s'est-il affich dans la fentre DOS ?
6. Modifiez la variable de session CLASSPATH afin d'utiliser le rpertoire dans lequel le
fichier .class est stock. Dans la fentre DOS, entrez la commande set
CLASSPATH=C:\labs\D53983GC11\temp pour dfinir la variable. La variable est
dfinie pour la dure de la session DOS. Si vous ouvrez une autre fentre DOS, vous devrez
dfinir nouveau la variable CLASSPATH.
7. Excutez nouveau l'application HelloWorld.
a. Utilisez la commande java HelloWorld.
b. Que s'est-il affich dans la fentre DOS ?
8. Fermez le Bloc-notes, mais ne quittez pas la fentre DOS, car vous continuerez d'utiliser cet
environnement dans l'exercice suivant.
Crer des fichiers de classe pour la saisie des commandes (examiner la
classe Customer)
Les exercices de ce cours s'appuient sur l'application de saisie de commandes OrderEntry.
Reportez-vous la fin du chapitre 2 dans le manuel du stagiaire pour consulter le modle UML
des classes de cette application.

Dans cet exercice, vous allez examiner quelques-uns des fichiers de classe utiliss dans
l'application OrderEntry.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 2 : Syntaxe Java lmentaire et conventions de codage
(suite)
Oracle Fusion Middleware 11g : Programmation Java A - 7
1. Copiez le fichier Customer.java du rpertoire c:\labs\D53983GC11 vers votre
rpertoire C:\labs\D53983GC11\OrderEntry\src\oe.
2. Dans la fentre DOS, accdez au rpertoire suivant :
C:\labs\D53983GC11\OrderEntry\src\oe.
3. Utilisez le Bloc-notes pour examiner la classe Customer et rpondez aux questions ci-aprs.
a. Indiquez toutes les variables d'instance de Customer.
b. Combien de mthodes d'instance la classe Customer comporte-t-elle ?
c. Quel est le type renvoy par la mthode qui obtient le nom du client ?
d. Quel est le modificateur d'accs de la classe ?
4. Fermez le fichier. A l'invite DOS, compilez le fichier Customer.java en vous basant sur
la commande suivante :
javac -d C:\labs\D53983GC11\OrderEntry\classes Customer.java
O se trouve le fichier .class compil ?
(Indice : Entrez cd ..\..\classes\oe, puis dir.)
Intgrer Order.java aux fichiers de l'application
Ajoutez le fichier Order.java la structure de l'application, examinez le code et compilez-le.
1. Ouvrez le fichier \labs\D53983GC11\Order.java dans le Bloc-notes et enregistrez-le
dans le rpertoire du code source du package OE
(C:\labs\D53983GC11\OrderEntry\src\oe ou le rpertoire indiqu par votre
formateur). Les attributs sont diffrents de ceux du modle UML. Les informations relatives
aux clients et aux articles seront intgres ultrieurement.
2. Notez que deux attributs supplmentaires (get et set) ont t ajouts :
shipmode (String) est utilis pour calculer les frais d'expdition.
status (String) est utilis pour dterminer la place de la commande dans le
processus de traitement des commandes.
3. Assurez-vous d'tre dans le rpertoire C:\labs\D53983GC11\OrderEntry\src\oe.
Utilisez la commande suivante pour compiler le fichier Order.java, ce qui a pour effet de
placer le fichier .class dans le rpertoire contenant la version compile de la classe
Customer :
javac d C:\labs\D53983GC11\OrderEntry\classes Order.java
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 2 : Syntaxe Java lmentaire et conventions de codage
(suite)
Oracle Fusion Middleware 11g : Programmation Java A - 8
Crer et compiler la classe de l'application avec une mthode main()
1. Crez un fichier nomm OrderEntry.java contenant la mthode main, comme indiqu
ci-aprs. Placez le fichier source dans le mme rpertoire source que les autres
fichiers .java (C:\labs\D53983GC11\OrderEntry\src\oe). Ce fichier est le
squelette utilis pour lancer l'application du cours. Utilisez le code suivant pour crer le
fichier :
package oe;
public class OrderEntry {
public static void main(String[] args)
{
System.out.println("Order Entry Application");
}
}
2. Enregistrez et compilez le fichier OrderEntry.java l'aide de la commande suivante :
javac -d C:\labs\D53983GC11\OrderEntry\classes
OrderEntry.java
3. Excutez l'application OrderEntry.
a. Ouvrez une fentre DOS et utilisez la commande cd pour accder au rpertoire
C:\labs\D53983GC11\OrderEntry\classes.
b. Excutez le fichier l'aide de la commande java oe.OrderEntry.
Remarque : Pour garantir que la version correcte du code s'excute, quel que soit le
rpertoire de travail, placez les informations CLASSPATH dans la commande run
comme indiqu ci-aprs :
java classpath C:\labs\D53983GC11\OrderEntry\classes
oe.OrderEntry


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 9
Exercices - Chapitre 3
Exercice 3 : Explorer les types de primitive et les oprateurs
Objectif
Dans cet exercice, vous allez dclarer et initialiser des variables, puis les utiliser avec des
oprateurs afin de calculer de nouvelles valeurs. Vous allez galement classer les types de
primitive et les utiliser dans le code.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les03 et continuez.
Si vous fermez une fentre DOS ou modifiez l'emplacement des fichiers .class, rappelez-vous
que vous devez redfinir la variable CLASSPATH.
Tches accomplir
Vous allez ajouter du code la mthode main() simple dans la classe OrderEntry cre lors
de l'exercice prcdent. Aprs avoir dclar les variables destines contenir le prix de location
de certains articles et affich le contenu de ces variables, vous leur appliquerez des tests et des
calculs et examinerez les rsultats.
Remarque : Assurez-vous que la variable CLASSPATH pointe vers l'emplacement de vos
fichiers .class (C:\labs\D53983GC11\OrderEntry\classes ou le rpertoire
indiqu par votre formateur).
Modifier la classe OrderEntry et ajouter des calculs
1. Dans la mthode main(), dclarez et initialisez deux variables destines contenir le prix
de location de deux articles. Ces prix sont 2.95 et 3.50. Nommez les articles comme vous le
souhaitez, mais vitez les noms de variable un seul caractre. Utilisez de prfrence des
noms plus longs et vocateurs, tels que item1 et item2. En outre, choisissez
judicieusement le type des variables.
Remarque : Recompilez la classe aprs chaque tape, rsolvez les ventuelles erreurs de
compilation, puis excutez la classe afin d'examiner la sortie.
a. Utilisez quatre instructions diffrentes : deux pour dclarer les variables et deux autres
pour les initialiser, de la manire suivante :
double item1;
double item2;
item1 = 2.95;
item2 = 3.50;
b. Vous pouvez galement combiner la dclaration et l'initialisation des deux variables en
une seule instruction :
float item1 = 2.95, item2 = 3.50;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 3 : Explorer les types de primitive et les oprateurs (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 10
2. Utilisez System.out.println() pour afficher le contenu des variables. Aprs avoir
recompil la classe, excutez-la et examinez ce qui s'affiche. Modifiez ensuite le code pour
afficher des messages plus significatifs.
a. Pour afficher simplement le contenu des variables :
System.out.println(item1);
System.out.println(item2);
b. Pour afficher des informations plus significatives :
Indice : Utilisez l'oprateur +.
System.out.println("Item costs " + item1);
System.out.println("Item costs " + item2);
3. Maintenant que vous connaissez le prix de location des articles, calculez le cot total de la
location. Dclarez et initialisez des variables pour le nombre de jours de location et pour le
suivi des numros de ligne. La variable contenant le nombre de jours pendant lesquels le
client loue les articles prsente une valeur initiale de 2 (deux jours). Affichez le total de
manire claire, par exemple Total cost:6.982125.
a. Crez une variable contenant le cot total de location :
double itemTotal;
b. Dclarez et initialisez des variables pour contenir le nombre de jours de location
(2 initialement) et pour permettre le suivi des numros de ligne :
int line = 1, numOfDays = 2;
c. Calculez le cot de location total :
itemTotal = ((item1 * numOfDays) + (item2 * numOfDays));
System.out.println("Total cost: " + itemTotal);
4. Affichez le total de telle sorte que le client comprenne comment il a t calcul. Pour cela,
indiquez que le total est le prix de location de chaque article multipli par le nombre de jours
de location :
System.out.println(
"Item " + line++ +" is " + item1 + " * " +
numOfDays + " days = " +(item1 * numOfDays));

System.out.println(
"Item " + line++ +" is " + item2 + " * " + numOfDays + "
days = " +(item2 * numOfDays));
5. Compilez et excutez la classe OrderEntry. Assurez-vous que le fichier .class a t
plac dans le rpertoire appropri
(C:\labs\\D53983GC11\OrderEntry\classes\oe).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 11
Exercices - Chapitre 4
Exercice 4 : Contrler le flux du programme
Objectif
L'objectif de cet exercice est d'utiliser les structures de contrle de flux qui fournissent des
mthodes permettant de dterminer le nombre de jours d'un mois et de traiter les annes
bissextiles.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les04 et continuez.
Si vous fermez une fentre DOS ou modifiez l'emplacement des fichiers .class, rappelez-vous
que vous devez redfinir la variable CLASSPATH.
Tches accomplir
Vous devez crer un programme qui calcule la date de retour d'un article lou en fonction de la
date laquelle il a t lou et du nombre total de jours de location. Vous devez dterminer le
nombre de jours du mois et voir s'il s'agit d'une anne bissextile.
Modifier la classe OrderEntry afin de calculer les dates
1. Modifiez le nombre de jours d'un mois. Utilisez une instruction switch pour affecter une
valeur entire le nombre de jours du mois indiqu. Pour le moment, ajoutez tout le code la
mthode main() de l'application OrderEntry.java.
a. Dclarez trois entiers contenant le jour, le mois et l'anne. Initialisez ces variables avec la
date de votre choix.
int day = 25, mth = 5, yr = 2000;
b. Ajoutez une instruction simple qui affiche la date. Choisissez le format que vous prfrez,
par exemple jour/mois/anne ou mois/jour/anne.
System.out.println(day + "/" + mth + "/" + yr);
c. Dclarez une variable contenant le nombre de jours du mois en cours. Ensuite, avec une
instruction switch, dterminez la valeur stocker dans cette variable. Utilisez
daysInMonth comme nom de la variable.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 4 : Contrler le flux du programme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 12
Remarque : La partie la plus difficile de cet exercice consiste se rappeler le nombre de
jours de chaque mois. Les mois de septembre, avril, juin et novembre comptent 30 jours.
Tous les autres mois comptent 31 jours, l'exception du mois de fvrier qui compte 28
jours (ignorez les annes bissextiles pour le moment).
int daysInMonth;
switch (mth) {
case 4:
case 6:
case 9:
case 11: daysInMonth = 30;
break;
case 2: daysInMonth = 28;
break;
default: daysInMonth = 31;
break;
}
d. Ajoutez une instruction simple qui affiche le nombre de jours du mois en cours.
System.out.println(daysInMonth + " days in month");
2. Assurez-vous que votre variable CLASSPATH est dfinie correctement
(C:\labs\D53983GC11\OrderEntry\classes), puis compilez et testez le
programme. Testez diffrentes valeurs pour le mois. Que se passe-t-il si vous choisissez un
mois non valide, par exemple 13 ?
Pour le 27 janvier 2000, la sortie doit ressembler ce qui suit :
27/1/2000
31 days in the month
3. Utilisez une boucle for pour afficher les dates.
a. A l'aide d'une boucle for, tendez le programme afin qu'il affiche toutes les dates
comprises entre la date indique et la fin du mois. Exemple :
Si la variable de jour (day) a la valeur 27, la variable de mois (mth) la valeur 1 (janvier)
et la variable d'anne (yr) la valeur 2000, votre programme doit afficher toutes les dates
du 27 janvier au 31 janvier inclus :
27/1/2000
28/1/2000
29/1/2000
30/1/2000
31/1/2000
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 4 : Contrler le flux du programme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 13
Indice : Vous devez utiliser le rsultat de l'instruction switch de l'tape 1 pour
dterminer le dernier jour du mois.
System.out.println("Printing all days to end of month
using for loop...");
for (int temp1 = day;
temp1 <= daysInMonth;
temp1++) {
System.out.println(temp1 + "/" + mth + "/" + yr);
}
b. Compilez et testez le programme en vous assurant qu'il fonctionne avec diffrentes dates.
c. Modifiez le programme afin qu'il affiche un maximum de 10 dates. Par exemple, si les
variables jour/mois/anne sont 19/1/2000, la sortie doit prsent afficher ce qui suit :
19/1/2000
20/1/2000
21/1/2000
22/1/2000
23/1/2000
24/1/2000
25/1/2000
26/1/2000
27/1/2000
28/1/2000
Assurez-vous que le programme fonctionne pour les dates proches de la fin du mois, par
exemple 30/1/2000. Dans ce cas, seules les dates suivantes doivent s'afficher :
30/1/2000
31/1/2000
Le code utiliser pour obtenir ce rsultat est le suivant :
// Print maximum of 10 dates, using a for loop
System.out.println("Printing maximum of 10 days
using for loop...");
for (int temp3 = day, iter = 0;
temp3 <= daysInMonth && iter < 10;
temp3++, iter++) {
System.out.println(temp3 + "/" + mth + "/" +
yr);
}
d. Compilez le programme et testez-le avec diffrentes dates pour vous assurer qu'il
fonctionne toujours.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 4 : Contrler le flux du programme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 14
4. Dterminez si l'anne indique est une anne bissextile. Utilisez les oprateurs boolens &&
et ||.
a. Ecrivez une instruction de type boolean qui teste la variable yr afin de dterminer s'il
s'agit d'une anne bissextile. Une anne est bissextile si elle est divisible par 4 et non
divisible par 100, ou est divisible par 400.
boolean isLeapYear = (yr % 4 == 0) &&
// year divisible by 4? AND
( (yr % 100 != 0) ||
// year not divisible by 100 OR
(yr % 400 == 0) );
// year divisible by 400
b. Modifiez l'instruction switch de l'tape 1 pour tenir compte des annes bissextiles.
Rappelez-vous que le mois de fvrier compte 29 jours les annes bissextiles, et 28 jours
les autres annes.
switch (mth) {
case 4:
case 6:
case 9:
case 11: daysInMonth = 30;
break;
case 2: daysInMonth = ((isLeapYear) ? 29 : 28);
break;
default: daysInMonth = 31;
break;
}
c. Compilez et testez le programme avec diffrentes dates. Le tableau suivant fournit des
exemples d'annes bissextiles et non bissextiles que vous pouvez utiliser comme donnes
de test :
Annes bissextiles Annes non bissextiles
1996 1997
1984 2001
2000 1900
1964 1967
5. Calculez la date de retour de chaque article lou. La date de retour est la date actuelle +
3 jours. Pour ce test, utilisez diffrentes dates comme date actuelle, et pas simplement la date
du jour.
a. Dclarez trois variables pour la date de retour :
int dueDay, dueMth, dueYr;
b. Ajoutez une variable destine contenir la priode de location de 3 jours :
int rentDays = 3;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 4 : Contrler le flux du programme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 15
c. Ajoutez votre programme le calcul de la date de retour, qui ajoute la priode de location
la date utilise l'tape 1. Affichez de manire claire la date d'origine et la date de
retour. La sortie doit ressembler ceci :
Rental Date: 27/2/2001
Number of rental days: 3
Date Due: 2/3/2001
dueDay = rentDays + day;
System.out.println("Rental Date: " + day + "/"
+ mth + "/" + yr);
System.out.println("Number of rental days: " +
rentDays);
System.out.println("Date Due back: " + dueDay +
"/"+ dueMth + "/" + dueYr);
d. Testez le programme avec diffrentes dates. Par exemple, essayez le 29 fvrier 2001.
e. Quels problmes devez-vous rsoudre ?
f. Modifiez le programme afin de dtecter les dates saisies avec un mois non valide
(c'est--dire non compris entre 1 et 12).
// Determine invalid months
if ((mth > 0 )& (mth <13))
System.out.println (mth + " is a valid month");
else
System.out.println (mth + " is not a valid month");
6. Lorsque vous dveloppez une solution logicielle un problme, vous devez dterminer la
taille et la porte du problme, puis rsoudre tous les problmes concerns. L'un des
problmes rsoudre est le suivant : que faire si la priode de location s'tend au-del du
mois en cours ? Par exemple, si la date de location est le 29 aot et que la location dure trois
jours, la date de retour doit tre le 1er septembre. Or, la solution actuelle donne le 32 aot, ce
qui constitue une erreur vidente. Acme Video ne loue les articles que pour une dure
infrieure ou gale 10 jours.
Pour grer ces problmes, procdez de la manire suivante :
a. Ajoutez le code qui teste si le rsultat du calcul correspond un jour valide.
// is dueDay valid for the current month?
if (dueDay <= daysInMonth)
System.out.println(dueDay + "/" + dueMth + "/" +
dueYr);
b. Si la priode de location empite sur le mois suivant, prenez soin d'incrmenter la variable
de mois.
else {
// set dueDay to a day in the next month
dueDay = (dueDay - daysInMonth);
// increment the month
dueMth = (dueMth + 1);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 4 : Contrler le flux du programme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 16
c. Si la priode de location empite sur l'anne suivante, prenez soin d'incrmenter la
variable d'anne.
// is the new month in a new year
if (dueMth > 12) {
dueMth = 1;
dueYr += 1;
}
d. Testez le programme avec diffrentes dates.
S'il vous reste du temps, effectuez l'exercice suivant :
1. Remplacez la boucle for qui affiche tous les jours jusqu' la fin du mois par une boucle
while.
Pour afficher tous les jours jusqu' la fin du mois l'aide d'une boucle while :

// initialize temp2 to day of the month
int temp2 = day;
System.out.println("Printing all days to end of month using
while loop...");
while (temp2 <= daysInMonth) {
System.out.println(temp2 + "/" + mth + "/" + yr);
temp2++;
}
2. Remplacez la boucle for qui permet d'afficher un maximum de 10 dates par une boucle
while.
Pour afficher dix dates au maximum l'aide d'une boucle while :

System.out.println("Printing maximum of 10 days using while
loop...");
// initialize temp4 to day of the month
int temp4 = day;
int numSoFar = 0;
while (temp4 <= daysInMonth) {
System.out.println(temp4 + "/" + mth + "/" + yr);
temp4++;
if (++numSoFar == 10)
break;
}



O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 17
Exercices - Chapitre 5
Exercice 5 : Programmer en Java l'aide d'Oracle JDeveloper 11g
A partir de cet exercice, vous utiliserez JDeveloper pour crer une application l'aide des
techniques employes dans un environnement de dveloppement rel. Cet exercice est bas sur
les concepts techniques prsents dans le chapitre. Par ailleurs, il intgre des mthodes
recommandes utiliser pour dvelopper une application Java.
Objectif
Dans cet exercice, vous allez explorer l'utilisation de l'environnement IDE d'Oracle JDeveloper
pour crer une application et un projet, afin de pouvoir grer vos fichiers Java plus facilement au
cours du processus de dveloppement. Vous apprendrez crer une ou plusieurs applications et
classes Java l'aide des fonctions de gnration rapide de code.
Vous allez dsormais utiliser JDeveloper pour la plupart des autres exercices (en revenant de
temps en temps la ligne de commande pour certaines tches). A la fin du cours, vous aurez
construit et dploy une application dote d'une interface graphique et aurez approfondi vos
connaissances du langage Java et de JDeveloper.
Dans cet exercice, vous utilisez les fichiers du rpertoire C:\labs\D53983GC11\les05 (ou
d'un autre rpertoire indiqu par votre formateur). Ils sont semblables ceux que vous avez crs
dans les exercices prcdents ( quelques petites diffrences prs).
Tches accomplir
Dans la premire section, vous allez explorer les fonctionnalits de gnration rapide de
code de JDeveloper, en utilisant les chemins JDeveloper par dfaut pour crer une
nouvelle application par dfaut. Vous allez ensuite crer un projet partir de code existant
dans le rpertoire C:\labs\D53983GC11\les05. Vous examinerez galement le
diagramme UML reprsentant toutes les classes cres jusqu' prsent dans le cours.
Dans la section facultative, vous allez excuter et tester l'application l'aide du dbogueur.
Crer une application et un projet
Lancez Oracle JDeveloper 11g partir de l'icne situe sur le bureau ou demandez votre
formateur comment dmarrer JDeveloper. (Dans cet exercice, vous devez utiliser le rpertoire
C:\labs\D53983GC11\les05.)
1. Crez une nouvelle application.
a. Dans le navigateur d'applications (Application Navigator) situ dans la partie gauche de
l'cran, cliquez sur New Application.
b. Dans la bote de dialogue Create Application, entrez le nom de la nouvelle application :
OrderEntryApplication.
c. Dans le champ Directory Name, entrez C:\labs\D53983GC11\les05 (ou le
rpertoire indiqu par votre formateur). Vous pouvez utiliser le bouton Browse pour
localiser le rpertoire.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 5 : Programmer en Java l'aide d'Oracle JDeveloper 11g
(suite)
Oracle Fusion Middleware 11g : Programmation Java A - 18
d. Dans le champ Application Template, vrifiez que la valeur par dfaut Generic
Application est slectionne. Cliquez sur OK pour crer la dfinition de l'application.
e. Cliquez sur Finish. L'tape suivante consiste crer un projet explicitement.
2. Crez un projet dans la nouvelle application et placez-y les fichiers se trouvant dans le
rpertoire C:\labs\D53983GC11\les05\src\oe.
a. Vrifiez que la nouvelle application OrderEntryApplication a t cre et
s'affiche dans le navigateur. Cliquez avec le bouton droit de la souris sur
OrderEntryApplication, puis slectionnez l'option de menu New Project. La
bote de dialogue New Gallery apparat. Slectionnez Project from Existing Source dans
la section Items de la fentre New Gallery et cliquez sur OK pour lancer l'assistant Create
Project from Existing Source.
b. Cliquez sur le bouton Next dans l'cran Welcome. Dans la page Location de l'assistant,
nommez le projet OrderEntryProject et slectionnez le rpertoire
C:\labs\D53983GC11\les05OrderEntryProject (ou le rpertoire que vous
utilisez). Cliquez sur le bouton Next.
c. Dans la page Specify Source de l'assistant, cliquez sur le bouton Add situ ct de Java
Source Paths. Accdez au sous-rpertoire contenant les fichiers source Java ( savoir le
sous-rpertoire src\oe de l'arborescence C:\labs\D53983GC11\les05). Cliquez
sur Select.
d. Dans l'onglet Included, assurez-vous que la case Include Content from Subfolders est
coche. Vrifiez que le rpertoire de sortie est
C:\labs\D53983GC11\les05\classes, puis cliquez sur Add. Choisissez
d'inclure tous les fichiers .java du rpertoire
C:\labs\D53983GC11\les05\src\oe, puis cliquez sur le bouton Finish.
Le nouveau projet s'affiche dans le navigateur. Cliquez deux fois sur son nom pour afficher la
bote de dialogue Project Properties. Dans la page Project Source Paths, indiquez oe dans le
champ Default Package et cliquez sur OK.
e. Remarquez que les noms OrderEntryApplication et OrderEntryProject
sont en italiques dans le navigateur. En effet, vous n'avez pas encore enregistr
l'application. Slectionnez celle-ci et cliquez sur File > Save All.
Les noms s'affichent dsormais en style normal. Dveloppez les noeuds de l'application et
du projet pour examiner leur contenu.
f. Compilez les fichiers du projet. Cliquez avec le bouton droit de la souris sur
OrderEntryProject et slectionnez l'option Rebuild.
Surveillez la progression de la compilation dans la fentre Log.
g. Cliquez nouveau sur le projet avec le bouton droit de la souris et slectionnez Run dans
le menu contextuel. Dans la bote de dialogue Choose Default Run Target, accdez au
package oe et slectionnez OrderEntry.java, puis cliquez sur OK.
Examinez les rsultats de l'application dans la fentre Log.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 5 : Programmer en Java l'aide d'Oracle JDeveloper 11g
(suite)
Oracle Fusion Middleware 11g : Programmation Java A - 19
Examiner un diagramme UML
Affichez le diagramme UML (Unified Modeling Language) reprsentant toutes les classes
cres jusqu' prsent dans le cours.
1. Dans le navigateur d'applications (Application Navigator), cliquez sur Open Application.
2. Parcourez le systme de fichiers jusqu'au rpertoire C:\labs\D53983GC11\les05,
slectionnez OrderEntryWorkspaceLes05.jws et cliquez sur Open. Si un message
vous demande si vous voulez migrer les fichiers de l'application, cliquez sur Yes.
3. Slectionnez le projet OrderEntryProjectLes05 dans le navigateur, puis cliquez sur
File > Open.
4. Dans la bote de dialogue Open, cliquez deux fois sur model, puis sur oe.
5. Slectionnez UML Class Diagram1.java_diagram et cliquez sur Open. Le
diagramme affiche les classes cres jusqu' prsent dans le cours.
Section facultative : Dboguer l'application du cours
Excutez l'application OrderEntryApplication en mode dbogage et examinez le
fonctionnement du dbogueur.
1. Dveloppez les noeuds Application Sources et oe dans le navigateur, puis cliquez deux fois
sur le fichier Order.java pour l'ouvrir dans l'diteur de code.
2. Faites dfiler l'affichage jusqu'aux lignes 67 et 68. Supprimez les marques de commentaires
de System.out.println, puis dfinissez des points d'arrt sur les deux instructions
suivantes :
item1Total = item1.getItemTotal();
System.out.println("Item 2 Total: " + item2Total);
Remarque : Pour dfinir un point d'arrt sur une ligne, cliquez dans la marge de gauche en
regard de celle-ci.
3. Dans le navigateur, slectionnez le fichier OrderEntry.java, cliquez dessus avec le
bouton droit de la souris et slectionnez Debug dans le menu contextuel.
JDeveloper cre un nouvel onglet de dbogage qui s'ouvre dans la partie infrieure droite de
la fentre JDeveloper. L'excution du code s'interrompt au niveau du premier point d'arrt, ce
qui est indiqu par une flche rouge. La flche rouge indique la ligne suivante qui sera
excute lorsque vous reprendrez le dbogage.
La fentre Log/Debug est modifie afin de contenir deux onglets, Log et Breakpoints, dans
lesquels vous pouvez afficher tous les points d'arrt que vous avez dfinis. L'onglet Log doit
afficher les rsultats gnrs par l'application. Redimensionnez les fentres si ncessaire.
4. Slectionnez graphiquement l'onglet Smart Data dans la fentre infrieure droite, appele
fentre Debug.
Remarque : Si la fentre Debug n'est pas visible, affichez-la en cliquant sur View >
Debugger > Smart Data. L'option Smart Data doit tre slectionne. Sinon, l'onglet est
supprim de la fentre Debug.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 5 : Programmer en Java l'aide d'Oracle JDeveloper 11g
(suite)
Oracle Fusion Middleware 11g : Programmation Java A - 20
5. Localisez la variable item1 dans l'onglet Smart Data et dveloppez-la. A l'aide des valeurs
de quantity et unitPrice, calculez la valeur item1Total de la commande. Quelle
est la valeur actuelle de item1Total ?
Indice : La valeur affiche pour quantity est 2 , tandis que celle de unitPrice est 2.95.
Pourtant, la valeur de item1Total est "null" dans la fentre Smart Data.
6. Slectionnez Debug > Step Over (ou appuyez sur F8, ou cliquez sur l'icne approprie dans
la barre d'outils) pour calculer item1Total. Notez les modifications apportes la variable
d'instance item1Total dans l'onglet Smart Data de la fentre Debug. Le calcul de l'tape
prcdente tait-il correct ?
7. Dans la barre d'outils situe en haut de l'cran, cliquez sur le bouton Resume (ou appuyez sur
F9, ou slectionnez Debug > Resume). La flche rouge de l'diteur de code avance et dsigne
la ligne comportant le point d'arrt suivant dtect dans la squence d'excution du code.
8. Slectionnez Debug > Resume (ou appuyez sur la touche F9, ou cliquez sur le bouton de la
barre d'outils) jusqu' ce que l'excution du programme soit termine. Vous n'avez effectuer
cette action qu'une seule fois.
9. Supprimez les points d'arrt dans le fichier source Order.java en cliquant dessus (points
rouges) dans la marge de gauche pour chaque ligne concerne.





O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 21
Exercices - Chapitre 6
Exercice 6 : Crer des classes et des objets
Objectif
Dans cet exercice, vous allez complter les fonctionnalits de base du corps des mthodes
existantes de la classe Customer. Vous allez ensuite crer des objets dans cette classe, que vous
manipulerez l'aide de leurs mthodes d'instance public. Vous afficherez les informations
relatives aux objets de Customer dans la fentre de messages de JDeveloper.
Remarque : Pour cet exercice, vous devez accder au rpertoire les06 et charger l'application
OrderEntryApplicationLes06. (Ce fichier d'espace de travail intgre la solution de
l'exercice 5.)
Tches accomplir
Dans cet exercice, vous allez commencer optimiser l'application de traitement des commandes.
Les classes constituent toujours le fondement de l'application que vous allez crer dans la suite du
cours. Aprs avoir cr un ou plusieurs objets Customer, vous allez associer un client une
commande.
Optimiser la classe Customer
1. Dans le navigateur d'applications (Application Navigator), slectionnez le projet
OrderEntryProjectLes06 et apportez les modifications suivantes la classe
Customer :
a. Affectez toutes les variables d'instance la porte private. Pour ce faire, cliquez deux
fois sur le fichier Customer.java pour l'ouvrir dans l'diteur de source (Source Editor).
Effectuez les modifications directement dans le code.
b. Affectez chacune des mthodes setXXX() au champ appropri.
c. Les mthodes get() doivent tre affectes. Vrifiez que les mthodes getXXX()
renvoient les valeurs de champ appropries.
Remarque : La convention d'appellation (setId(), setName(), etc.) de ces
mthodes rend l'utilisation des classes plus intuitive et facile.
2. Pour le moment, il n'existe aucun moyen d'afficher tout ou partie des dtails d'un objet
Customer en appelant une mthode. Vous devez combler cette lacune.
a. Ajoutez la classe une mthode public toString() sans arguments qui renvoie une
variable de type String contenant l'ID, le nom, l'adresse et le numro de tlphone du
client. La chane rsultante doit tre une concatnation des attributs que vous souhaitez
afficher, comme dans l'exemple suivant :
public String toString() {
return property1 + " " + property2;
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 6 : Crer des classes et des objets (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 22
Remarque : La mthode toString() est une mthode spciale appele chaque fois
qu'une reprsentation de type String d'un objet est requise. Il est trs utile d'ajouter la
mthode toString() aux classes. C'est la raison pour laquelle elle est ajoute
presque toutes les classes cres. Lors de l'ajout de la mthode toString, une bote de
dialogue s'affiche avec le message "OK to override method". Cliquez sur Yes.
b. Enregistrez la classe Customer et compilez-la pour corriger les ventuelles erreurs de
syntaxe. Lancez la compilation en cliquant avec le bouton droit de la souris sur le fichier
Customer.java et en slectionnant l'option Make.
Crer des objets Customer (classe OrderEntry)
3. Modifiez la mthode main() de la classe OrderEntry afin de crer deux objets Customer.
a. Dans la mthode main() de OrderEntry.java, crez deux objets Customer l'aide
de l'oprateur new, en affectant chacun une rfrence objet diffrente (utilisez
customer1 et customer2).
Customer customer1 = new Customer();
Customer customer2 = new Customer();
b. A la fin de la mthode main(), initialisez l'tat de chaque objet Customer en appelant
ses mthodes public setXXX() afin de dfinir l'ID, le nom, l'adresse et le numro de
tlphone. Utilisez les donnes du tableau suivant :
Id Name Address Phone
1 Gary Williams Houston,TX 713. 555. 8765
2 Lynn Munsinger Orlando, FL 407.695.2210
customer1.setId(1);
customer1.setName("Gary Williams");
customer1.setAddress("Houston, TX");
customer1.setPhone("713.555.8765");

customer2.setId(2);
customer2.setName("Lynn Munsinger");
customer2.setAddress("Orlando, FL");
customer2.setPhone("407.695.2210");
c. Affichez les deux objets Customer ainsi crs sous un en-tte "Customers:" en appelant
la mthode toString() l'intrieur de l'argument de la mthode
System.out.println(). Par exemple :
System.out.println("\nCustomers:");
System.out.println(customer1.toString());
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 6 : Crer des classes et des objets (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 23
Remarque : Vous obtiendrez le mme rsultat en affichant simplement la variable de
rfrence objet du client, comme dans l'exemple suivant :
System.out.println(customer1);
Cette dernire technique est une fonctionnalit Java qui sera aborde dans un chapitre
ultrieur.
d. Enregistrez la classe OrderEntry, compilez-la et excutez-la afin d'afficher les
rsultats.
Modifier OrderEntry afin d'associer un client une commande
4. Dans la mthode main() de la classe OrderEntry, associez l'un des objets Customer
l'objet Order et affichez les dtails de la commande.
a. Appelez la mthode setCustomer() de l'objet order en transmettant la rfrence
objet de customer1 (ou customer2) :
order.setCustomer(customer1);
b. Aprs avoir dfini l'objet Customer, appelez la mthode showOrder() de l'objet
order :
order.showOrder();
c. Enregistrez, compilez et excutez la classe OrderEntry.














O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 24
Exercices - Chapitre 7
Exercice 7 : Classes de cycle de vie des objets
Objectif
Dans cet exercice, vous allez vous exercer crer et utiliser des constructeurs, des mthodes de
niveau classe et des attributs. Vous allez galement utiliser une classe DataMan existante pour
fournir une couche d'accs aux donnes permettant de rechercher des clients et des produits dans
l'application OrderEntry. Une partie de l'exercice est destine vous faire comprendre la
surcharge de mthode, via la cration dans la mme classe de plusieurs constructeurs et/ou
mthodes portant le mme nom.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les07, chargez l'application
OrderEntryApplicationLes07, puis continuez. (Cette application intgre la solution de
l'exercice 6.)

Afficher le modle : Pour afficher le modle de l'application du cours ce stade, dveloppez
OrderEntryApplicationLes07 application OrderEntryProjectLes07 -
Application Sources oe, puis cliquez deux fois sur l'entre UML Class
Diagram1. Le diagramme affiche toutes les classes cres jusqu' prsent dans le cours.
Tches accomplir
Crez au moins un constructeur adapt afin d'initialiser correctement les objets Customer
lorsqu'ils sont instancis. Examinez la classe Order et les nouvelles instanciations. Copiez et
examinez la classe DataMan afin de fournir les attributs de niveau classe (static) des objets
Customer qui seront utiliss par l'application OrderEntry lors de l'association d'un objet Customer
une commande.
Modifier les informations relatives Customer
1. Crez deux constructeurs pour la classe Customer. Crez un constructeur sans argument
afin de fournir l'initialisation par dfaut, et un autre constructeur pour dfinir les proprits
relles de nom, d'adresse et de numro de tlphone. Le constructeur sans argument est
appel par le deuxime constructeur.
a. Ajoutez un constructeur sans argument la classe Customer, utilis pour gnrer l'ID
unique suivant de l'objet Customer, en commenant par dclarer une variable de classe
nomme nextCustomerId en tant qu'entier private static initialis zro.
private static int nextCustomerId = 0;
b. Dans la classe OrderEntry, convertissez en commentaires les instructions
customer.setId, customer.setName, customer.setAddress et
customer.setPhone pour customer1 et customer2.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 7 : Classes de cycle de vie des objets (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 25
c. Dans la classe Customer, crez un constructeur sans argument, incrmentez
nextCustomerId, puis utilisez la mthode setId() avec nextCustomerId pour
dfinir l'ID du client.

public Customer()
{
nextCustomerId++;
setId(nextCustomerId);
}
d. Ajoutez un deuxime constructeur acceptant trois arguments de type String : Name,
Address et Phone. Ce constructeur doit affecter ces valeurs aux proprits
correspondantes.
public Customer(String theName, String theAddress,
String thePhone)
e. Dans la premire ligne du deuxime constructeur, associez ce dernier au premier
constructeur en appelant le constructeur sans argument l'aide du mot-cl this(). Cela
permet de garantir que l'ID d'un client est toujours dfini, quel que soit le constructeur
utilis.
{
this();
name = theName;
address = theAddress;
phone = thePhone;
}
f. Enregistrez, compilez et excutez la classe OrderEntry afin de vrifier les rsultats. En
incluant les dtails relatifs aux commandes et aux articles qui s'affichent en tant que
rsultat, vous devez voir "Customer: 1 null null null".
Remplacer et examiner le fichier Order.java
1. Dans l'Explorateur Windows, copiez la classe Order.java du rpertoire
C:\labs\D53983GC11\Les07Adds vers votre rpertoire de travail \src\oe actuel.
Par exemple, si vous travaillez dans le rpertoire les07, copiez les fichiers dans
C:\Labs\D53983GC11\les07\src\oe.
a. Dans le navigateur d'applications (Application Navigator), slectionnez l'application
(OrderEntryApplication) puis slectionnez File > Open. Accdez au rpertoire
\src\oe en cours et slectionnez le fichier Order.java. Cliquez sur le bouton
Open. Le fichier est inclus dans la liste de fichiers. Si ncessaire, slectionnez View >
Refresh pour voir le nouveau fichier dans le navigateur.
2. La nouvelle version de la classe Order comporte galement un constructeur. Examinez la
faon dont les informations relatives aux dates de commande sont gres.
a. Notez que la variable orderDate qui avait t convertie en commentaire est prsent
une variable private.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 7 : Classes de cycle de vie des objets (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 26
b. Aprs l'instruction de package au dbut de la classe, examinez les instructions d'import
(avant la dclaration de la classe) :
import java.util.Date;
import java.util.Calendar;
c. Notez que le type de orderDate est Date et non String, et que les trois variables de
type integer (day, month et year) ont t supprimes.
3. Examinez les mthodes qui dpendent des trois variables de date de type integer pour
utiliser orderDate.
a. Le type de donnes renvoy et la valeur de la mthode getOrderDate() ont t
remplacs de la manire suivante :
public Date getOrderDate()
{
return orderDate;
}
Vous remarquez galement une mthode surcharge void setOrderdate()qui
accepte un argument de type Date et dfinit la variable orderDate.
b. La mthode getShipDate() utilisait la classe Calendar pour calculer la date de
livraison. Le corps de la mthode getShipDate() a t remplac par le code suivant :
int daysToShip = Util.getDaysToShip(region);
Calendar c = Calendar.getInstance();
c.setTime(orderDate);
c.add(Calendar.DAY_OF_MONTH, daysToShip);
return c.getTime().toString();
c. Le corps de la mthode setOrderDate() est cod afin de dfinir orderDate l'aide
des mthodes de la classe Calendar, avec trois arguments d'entre. Le code suivant
d'initialisation de la date a t supprim :
day = 0;
month = 0;
year = 0;
d. Notez que la mthode setOrderDate(int,int,int) a t modifie. Les trois
lignes de code en gras ci-dessous
if ((m > 0 && m <= 12) && (y > 0 )) {
day = d;
month = m;
year = y;
}
ont t remplaces par les trois lignes suivantes :
Calendar c = Calendar.getInstance();
c.set(y, m - 1, d);
orderDate = c.getTime();
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 7 : Classes de cycle de vie des objets (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 27
4. Un constructeur sans argument a t cr pour initialiser le numro, la date et le total de la
commande. Notez les dtails suivants :
Une nouvelle variable de classe, nextOrderId, a t dclare et initialise avec la
valeur 100.
Dans le constructeur sans argument, l'ID de la commande est dfini avec la valeur de
nextOrderId, puis la valeur de nextOrderId est incrmente de 1. La valeur 0
est affecte orderTotal et la valeur orderDate est dfinie de la faon
suivante :
orderDate = new Date;
Charger le fichier de classe DataMan.java dans JDeveloper
La classe DataMan sert crer les donnes utilises pour tester l'application. Le fichier cre les
objets Customer. Il sera utilis ultrieurement pour accder une base de donnes d'informations.
Cette classe prsente l'avantage de simplifier le test de l'application. Une fois acheve, elle peut
tre modifie pour permettre l'extraction de donnes partir d'une base, sans que cela affecte
l'application.
1. Dans l'Explorateur Windows, copiez la classe DataMan.java du rpertoire
C:\labs\D53983GC11 vers votre rpertoire de travail \src\oe actuel.
2. Slectionnez l'application, puis slectionnez File > Open. Accdez au rpertoire \src\oe
en cours et slectionnez le fichier DataMan.java. Cliquez sur OK. Le fichier est inclus
dans la liste de classes. Si ncessaire, slectionnez View > Refresh pour voir le nouveau
fichier dans le navigateur.
3. Enregistrez et compilez la classe DataMan.
Remarque : Vous pouvez compiler le fichier DataMan.java en cliquant dessus avec le
bouton droit de la souris et en slectionnant l'option de menu Make.
4. Enregistrez, compilez et excutez la classe OrderEntry afin de vrifier que le code
fonctionne toujours. Vous pouvez compiler le fichier OrderEntry.java en cliquant
dessus avec le bouton droit de la souris et en slectionnant l'option de menu Make.
Modifier OrderEntry pour utiliser DataMan
Modifiez la mthode main() de OrderEntry afin qu'elle utilise les objets Customer de la
classe DataMan.
1. Utilisez le nom de classe DataMan. comme prfixe pour toutes les variables de rfrence
Customer (customer1 et customer2). Par exemple, remplacez le code suivant :
order.setCustomer(customer1);
par :
order.setCustomer(DataMan.customer1);
Remarque : Vous accdez une variable de classe par l'intermdiaire de son nom de classe,
ce qui signifie qu'il n'est pas ncessaire de crer un objet DataMan. En outre, les variables
Customer de la classe DataMan sont visibles par OrderEntry, car elles prsentent un
accs par dfaut (package).
2. Enregistrez, compilez et excutez la classe OrderEntry afin de vrifier que le code
fonctionne toujours. Remplacez customer1 par customer3 ou customer4 partir de
DataMan afin de vrifier que le code utilise les objets Customer de DataMan.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 28
Exercices - Chapitre 8
Exercice 8 : Utiliser des chanes, des classes StringBuffer, des
classes wrapper et des classes de formatage de texte
Objectif
L'objectif de cet exercice est de modifier la classe Util afin de fournir des mthodes gnriques
permettant de formater des dtails de la commande, notamment la prsentation du total sous
forme de devise et le format utilis pour afficher les chanes de date. Vous dcouvrirez ainsi
l'utilisation de certaines classes Java de formatage de texte.
Dans cet exercice, vous allez utiliser la classe GregorianCalendar. Cette classe vous permet
d'obtenir une valeur de type date pour un instant donn. Vous pouvez indiquer une date et une
heure et voir le comportement de cette classe. La classe peut ensuite tre base sur les valeurs que
vous entrez plutt que sur la date et l'heure systme.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les08, chargez l'application
OrderEntryApplicationLes08, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours jusqu' cet exercice,
chargez l'application OrderEntryApplicationLes08. Dans le navigateur d'applications
(Application Navigator), dveloppez OrderEntryApplicationLes08 OrderEntryProjectLes08 -
Application Sources oe, puis cliquez deux fois sur l'entre UML Class Diagram1. Le
diagramme affiche toutes les classes cres jusqu' prsent dans le cours.
Tches accomplir
Vous devez crer une mthode appele toMoney() afin de renvoyer une chane sous forme de
devise pour le total de la commande. Vous allez galement crer une mthode
toDateString() qui met en forme la date d'une faon particulire. Vous modifierez ensuite
la classe Order afin d'utiliser ces mthodes pour modifier l'affichage des dtails des commandes
tels que la date et le total.
Ajouter des mthodes de mise en forme la classe Util
1. Crez une mthode static nomme toMoney() qui accepte un montant de type double et
renvoie une valeur de type String.
a. Ouvrez Util.java et ajoutez l'instruction d'import suivante la classe :
import java.text.DecimalFormat;
b. Ajoutez la mthode toMoney() suivante au code de la classe, afin de mettre en forme
une valeur de type double :
public static String toMoney(double amount) {
DecimalFormat df = new DecimalFormat("$##,###.00");
return df.format(amount);
}
c. Enregistrez et compilez la classe Util.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 8 : Utiliser des chanes, des classes StringBuffer, des
classes wrapper et des classes de formatage de texte (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 29
2. Ajoutez la mthode static toDateString() pour formater une date.
a. Ajoutez les instructions d'import suivantes la classe Util :
import java.util.Date;
import java.text.SimpleDateFormat;
b. Utilisez le code suivant pour la mthode toDateString :
public static String toDateString(Date d) {
SimpleDateFormat df = new SimpleDateFormat("dd- MMMM-
yyyy");
return df.format(d);
}
c. Enregistrez et compilez la classe Util.
3. Dans cette tape, vous allez utiliser la classe GregorianCalendar. Cette classe vous
permet d'obtenir une valeur de type date pour un instant donn. Vous pouvez indiquer une
date et une heure, puis observer le comportement de cette classe en fonction des valeurs que
vous entrez (autres que la date et l'heure du systme).
Crez une autre mthode static nomme getDate() qui accepte trois entiers reprsentant le
jour, le mois et l'anne, et qui renvoie un objet java.util.Date reprsentant la date
indique (par exemple, le mois 1 reprsente janvier). Etant donn que nombre des mthodes
de la classe Date qui auraient pu tre utilises sont dsormais obsoltes, vous allez recourir
la classe GregorianCalendar pour cette tche.
a. Importez la classe java.util.GregorianCalendar.
b. Utilisez le code suivant pour la mthode getDate :
public static Date getDate(int day,int month,int year)
{
// Decrement month, Java interprets 0 as
// January.
GregorianCalendar gc =
new GregorianCalendar(year, --month, day);
return gc.getTime();
}
c. Enregistrez et compilez la classe Util.
Utiliser les mthodes de formatage de la classe Util dans la classe Order
Dans la classe Order, modifiez la mthode toString() afin d'utiliser les mthodes
toMoney() et toDateString() de la classe Util pour modifier le format d'affichage.
1. Dans la mthode toString(), remplacez la valeur renvoye par le texte ci-dessous.
Lorsque shipMode n'est pas indiqu, il n'est pas ncessaire d'afficher les informations
relatives "Shipped: ".
return "Order: " + id +
" Date: " + Util.toDateString(orderDate) +
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 8 : Utiliser des chanes, des classes StringBuffer, des
classes wrapper et des classes de formatage de texte (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 30
" Shipped: " + shipMode +
" (" + Util.toMoney(getOrderTotal()) + ")";
2. Enregistrez et compilez la classe Order, puis excutez OrderEntry afin de voir les
modifications apportes aux dtails de la commande.
3. Importez la classe java.text.MessageFormat dans la classe Order, puis utilisez cette
dernire pour formater la valeur renvoye par toString(), de la faon suivante :
import java.text.MessageFormat;
Object[] msgVals = {new Integer(id),
Util.toDateString(orderDate), shipMode,
Util.toMoney(getOrderTotal()) };
return MessageFormat.format(
"Order: {0} Date: {1} Shipped: {2}
(Total: {3})",msgVals);
4. Enregistrez et compilez la classe Order, puis excutez la classe OrderEntry afin de voir
les rsultats de la commande affiche. La modification apporte au total affich doit
apparatre.
Utiliser la mise en forme dans la classe OrderItem (Facultatif)
Dans la classe OrderItem, modifiez la mthode toString() afin d'utiliser les mthodes
Util.toMoney() pour changer le format d'affichage du total de la commande.
1. Dans la mthode toString(), remplacez l'instruction return par le code suivant :
return lineNbr + " " + quantity + " " +
Util.toMoney(unitPrice);
2. Enregistrez et compilez la classe OrderItem, puis excutez la classe OrderEntry afin de
voir les modifications apportes au total de la commande.
Utiliser Util.getDate() pour dfinir la date de la commande (Facultatif)
1. Dans la classe OrderEntry, modifiez la deuxime instruction de cration d'objet Order
afin d'utiliser la mthode Util.getDate() pour fournir la valeur du premier argument
dans le constructeur. Choisissez la date du jour prcdent pour les valeurs des arguments day,
month et year fournis la mthode Util.getDate().
L'appel du constructeur doit prsenter l'aspect suivant :
Order order2 = new Order(Util.getDate(7, 3, 2002),
"overnight");
2. Enregistrez, compilez et excutez la classe OrderEntry afin de vrifier que la date de la
commande a t dfinie correctement.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 31
Exercices - Chapitre 9
Exercice 9 : Utiliser des flux pour les E/S
Objectif
Dans cet exercice, vous allez utiliser des classes de flux de donnes binaires (octets) et de
donnes alphanumriques (caractres) pour lire et crire les donnes d'une application. Vous vous
familiariserez galement avec la srialisation pour enregistrer et restaurer des objets.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les09, chargez l'application
OrderEntryApplicationLes09, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours jusqu' cet exercice,
chargez l'application OrderEntryApplicationLes09. Dans la fentre Application
Navigator, dveloppez OrderEntryApplicationLes09
OrderEntryProjectLes09 - Application Sources oe, puis cliquez deux fois
sur l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres jusqu'
prsent dans le cours.
Tches accomplir
Dans cet exercice, vous allez examiner quelques classes de flux permettant de manipuler les
donnes. Vous utiliserez tout d'abord la classe PrintWriter pour crire un fichier contenant
des informations sur des clients. Vous ferez ensuite appel plusieurs classes
(FileInputStream, InputStreamReader et Scanner) pour lire ce fichier et afficher
ses valeurs. Enfin, vous vous familiariserez avec la srialisation d'objets pour enregistrer et
restaurer les informations relatives aux clients et aux commandes. Importez les classes d'E/S
ncessaires lorsque JDeveloper vous y invite.
Utiliser PrintWriter pour crer un fichier contenant des donnes sur des clients
Crez un fichier destin contenir les informations sur les clients qui sont codes en dur dans la
classe DataMan.
1. A la fin de la mthode main de la classe OrderEntry, dclarez une variable String pour
le nom du fichier qui contiendra les informations sur les clients. Nommez ce fichier
Customers.txt.
String fileName = "customers.txt";
2. Dclarez une instance de la classe PrintWriter pour crire les donnes dans le nouveau fichier.
PrintWriter pw = new PrintWriter(fileName);
3. Ecrivez un enregistrement pour chacun des clients de la classe DataMan, en utilisant la
valeur renvoye par la mthode toString().
Notez qu'il n'est pas ncessaire d'utiliser la mthode toString() explicitement.
pw.println(DataMan.customer1);
pw.println(DataMan.customer2);
pw.println(DataMan.customer3);
pw.println(DataMan.customer4);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 9 : Utiliser des flux pour les E/S (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 32
4. Ajoutez l'instruction suivante la dclaration de la mthode main. (Le traitement des
exceptions est dcrit dans le chapitre 14.)
throws Exception
5. Fermez l'instance de PrintWriter.
Utiliser diffrentes classes pour lire le fichier Customers.txt et afficher
ses valeurs
Examinez les diverses syntaxes utilises dans les tapes suivantes et notez que dans un cas, la
sortie est diffrente.
1. Utilisez FileInputStream pour lire et afficher le contenu du fichier Customers.
Souvenez-vous que la classe FileInputStream est utilise pour les flux binaires
(d'octets).
a. Dclarez une instance de FileInputStream pour lire le fichier cr prcdemment.
FileInputStream fis = new FileInputStream(fileName);
b. Dclarez une variable de type int pour stocker la taille de la mmoire tampon (buffer)
et affectez-lui la valeur renvoye par la mthode available().
int fileSize = fis.available();
c. Crez un tableau de type byte ayant la taille de la mmoire tampon pour stocker les
octets lus dans le fichier.
byte[] bbuf = new byte[fileSize];
d. Lisez le fichier partir du tampon.
e. Fermez le flux FileInputStream.
f. Essayez d'afficher le tampon en tant que String.
g. Excutez la classe OrderEntry.
A quoi ressemblent les rsultats ? Les rsultats ne sont pas comprhensibles parce que la
sortie du flux FileOutputStream n'est pas une chane de caractres Java.
h. Remplacez l'instruction d'affichage du tampon par une boucle qui affiche les octets du
tableau un un.
for (int cx = 0; cx < fileSize; cx++) {
System.out.print(bbuf[cx]);
}
i. Excutez nouveau la classe OrderEntry.
A quoi ressemblent les rsultats cette fois-ci ? Vous obtenez simplement une liste des
valeurs dcimales du flux de donnes binaires renvoy (caractres ASCII stocks). Pour
afficher ces rsultats sous forme de texte, il faudrait convertir chaque octet en type char.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 9 : Utiliser des flux pour les E/S (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 33
2. Utilisez InputStreamReader pour lire et afficher les valeurs du fichier Customers.
Souvenez-vous que la classe InputStreamReader gre des donnes alphanumriques.
a. Dclarez une instance de la classe InputStreamReader qui lit un flux d'entre
contenant le fichier Customers.
InputStreamReader isr = new InputStreamReader(new
FileInputStream(fileName));
b. En utilisant la taille de tampon mmorise l'tape 2b ci-avant, crez un tableau de
caractres destin recevoir le contenu du fichier.
char[] cbuf = new char[fileSize];
c. Copiez le contenu du fichier dans un tampon et affichez-le comme un seul bloc.
isr.read(cbuf);
System.out.println(cbuf);
d. Fermez l'instance de InputStreamReader.
e. Excutez la classe OrderEntry. Vous devriez prsent obtenir les informations sur les
clients sous la forme correcte que vous avez dj affiche dans ce programme.
3. Utilisez Scanner pour lire et afficher le contenu du fichier Customers.
a. Dclarez une instance de Scanner pour lire le fichier cr prcdemment.
Scanner sc = new Scanner(new File(fileName));
b. Dfinissez une boucle pour lire et afficher une ligne la fois jusqu' la fin du fichier.
(Utilisez la mthode nextLine() de la classe Scanner.)
while (sc.hasNext()) {
System.out.println(sc.nextLine());
`
c. Fermez l'instance de Scanner.
d. Excutez la classe OrderEntry. Vous devriez obtenir le mme affichage correct des
informations que prcdemment.
Utiliser la srialisation pour enregistrer et restaurer des objets
Dans cet exercice, vous allez utiliser la srialisation pour enregistrer et restaurer un objet simple.
Ensuite, vous ferez de mme avec un objet plus complexe contenant des objets imbriqus. Vous
marquerez l'un des objets imbriqus en tant que transient pour qu'il ne soit pas enregistr
lorsque son conteneur est crit dans un fichier.
Les fichiers crs de cette manire constituent une copie permanente des donnes de l'objet qui
peut tre utilise ailleurs, dans la mme application ou dans une autre.
(Indice : Reportez-vous l'exemple de srialisation fourni dans le chapitre si vous avez besoin
d'aide.)
1. Utilisez la srialisation pour enregistrer et restaurer un objet Customer : Enregistrez
l'objet customer1 dans un flux, puis restaurez-le et excutez-le.
a. Assurez-vous que les classes Order, OrderItem et Customer peuvent utiliser la
srialisation d'objet en prcisant qu'elles implmentent l'interface Serializable.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 9 : Utiliser des flux pour les E/S (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 34
b. Dans la classe OrderEntry, dclarez une nouvelle instance de
ObjectOutputStream fonde sur une nouvelle instance de FileOutputStream,
en rfrenant le fichier dans lequel vous souhaitez enregistrer l'objet. (Nommez ce
fichier customers.ser.)
ObjectOutputStream cs = new ObjectOutputStream(new
FileOutputStream("customers.ser"));
c. Ecrivez l'objet customer1 de DataMan dans ce fichier.
cs.writeObject(DataMan.customer1);
//entire object is written
d. Fermez le flux ObjectOutputStream.
e. Crez une instance de ObjectInputStream fonde sur une nouvelle instance de
FileInputStream, en rfrenant le fichier que vous venez de crer pour pouvoir lire
l'objet enregistr prcdemment.
ObjectInputStream ois =
new ObjectInputStream(new FileInputStream("customers.ser"));
f. Lisez l'objet Customer enregistr dans le fichier customers.ser et envoyez-le dans
une variable Customer diffrente.
Customer restCust1 = (Customer)ois.readObject();
//entire object is read
g. Fermez le flux ObjectInputStream.
h. Affichez l'objet Customer restaur.
i. Excutez la classe OrderEntry.
Dans la fentre Log, vous devez obtenir le mme affichage qu' partir de l'objet
customer1 d'origine. Il s'agit d'un objet trs simple qui ne contient ni objets imbriqus, ni
rfrences objet.
2. Utilisez la srialisation pour enregistrer et restaurer un objet Order : Enregistrez l'objet
order2 dans un flux, puis restaurez-le et excutez-le. Vous allez maintenant utiliser la classe
Order, qui comprend les classes imbriques OrderItem et Customer, pour observer la
puissance de la srialisation d'objets.
a. Dans la classe OrderEntry, dclarez comme prcdemment une nouvelle instance de
ObjectOutputStream en rfrenant le fichier dans lequel vous souhaitez enregistrer
l'objet. (Nommez ce fichier orders.ser.)
b. Ecrivez l'objet order2 dans ce fichier. Cette action enregistre l'ensemble de la structure de la
classe Order, appele "graphe".
c. Fermez le flux ObjectOutputStream.
d. Crez comme prcdemment une instance de ObjectInputStream pour pouvoir lire
l'objet partir du fichier orders.ser.
e. Crez une nouvelle instance de la classe Order nomme restOrd2 pour contenir
l'objet restaur, puis rcuprez-y l'objet order2 enregistr.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 9 : Utiliser des flux pour les E/S (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 35
f. Fermez le flux ObjectInputStream.
g. Affichez l'objet restOrd2.
h. Excutez la classe OrderEntry. Les dtails de la commande restOrd2 doivent
s'afficher dans la fentre Log. Ces informations doivent tre identiques celles affiches
prcdemment partir de l'objet order2.
Utiliser le modificateur transient pour empcher l'enregistrement et la
restauration des champs
Si la classe d'un objet imbriqu n'est pas marque comme tant srialisable, ou si vous ne voulez
pas la stocker avec l'objet conteneur, vous pouvez la marquer l'aide du modificateur
transient. La JVM saura ainsi qu'elle doit ignorer cette classe lors de l'criture de l'objet
conteneur dans un flux d'objets.
Il est essentiel que les rfrences un objet transient comprennent un test de valeur null
afin de scuriser le traitement d'une copie restaure de l'objet conteneur.
Il a t dcid que dans l'application OrderEntry, les informations relatives aux clients ne
seront dsormais plus stockes dans le graphe des commandes. Pour implmenter cette dcision,
marquez la variable Customer comme tant transient.
1. Dans Order.java, ajoutez le modificateur transient la variable Customer.
private transient Customer customer;
2. Faites dfiler l'affichage jusqu' la mthode showOrder() et vrifiez que les rfrences
cette variable sont soumises au fait que la valeur de celle-ci ne doit pas tre null.
3. Excutez la classe OrderEntry. Dans la fentre Log, vous devez constater que les
informations affiches pour l'objet restOrd2 ne contiennent plus les informations relatives
au client.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 36
Exercices - Chapitre 10
Exercice 10 : Hritage et polymorphisme
Objectif
Dans cet exercice, vous allez voir comment crer des sous-classes en langage Java et comment
utiliser le polymorphisme avec hritage par l'intermdiaire des sous-classes Company et
Individual de la classe Customer. Vous allez ajuster les sous-classes, redfinir certaines
mthodes et ajouter de nouveaux attributs, en utilisant l'diteur de classe de JDeveloper.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les10, chargez l'application
OrderEntryApplicationLes10, puis continuez.
Afficher le modle : Pour examiner le modle de l'application du cours jusqu' cet exercice,
affichez UML Class Diagram. Le diagramme affiche toutes les classes cres jusqu' prsent
dans le cours.
Scnario mtier
Les propritaires de l'entreprise ont dcid de dvelopper leur activit et de vendre leurs produits
la fois aux entreprises et aux particuliers. Ces deux types de client prsentent des attributs
lgrement diffrents, de sorte qu'il convient de stocker sparment les informations
correspondantes. D'o l'ide de crer les sous-classes Company et Individual de la classe
Customer. Chaque sous-classe fournira quelques mthodes spcifiques et redfinira la mthode
toString() de Customer.
Tches accomplir
Crez les deux classes Company et Individual en tant que sous-classes hritires de la classe
Customer. Le diagramme ci-aprs illustre les relations entre les classes Customer, Company
et Individual. Chaque case reprsente une classe. Le nom de la classe apparat en haut de
chaque case. La section du milieu indique les attributs de la classe. Ceux qui sont souligns
reprsentent une variable de classe. La section du bas indique les mthodes de la classe.
Notez la flche sur la ligne qui relie Company et Individual Customer. Il s'agit de la
notation UML de la relation d'hritage.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 10 : Hritage et polymorphisme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 37





Customer
int nextCustomerId
int id
String name
String address
String phone

toString()
getName()
setName()
getAddress()
setAddress()

Company
String contact
int discount
toString()
setContact()
getContact()
setDiscount()
getDiscount()
Individual
String licNumber

toString()
setLicNumber()
getLicNumber()

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 10 : Hritage et polymorphisme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 38
Dfinir une nouvelle classe Company
1. Dfinissez une classe Company qui tend Customer et inclut les attributs et mthodes
mentionns dans le diagramme de classes fourni au dbut de cet exercice.
a. Cliquez avec le bouton droit de la souris sur le projet OrderEntryProject et
slectionnez New dans le menu contextuel. Dans la fentre New Gallery, slectionnez la
catgorie General (si elle n'est pas slectionne par dfaut), puis slectionnez Java Class
dans la liste Items. Cliquez sur OK.
b. Dans l'assistant Create Java Class Wizard, entrez Company dans le champ Name,
indiquez le package oe, puis cliquez sur le bouton Browse situ en regard du champ
Extends. Dans la fentre Class Browser, cliquez sur l'onglet Hierarchy, puis localisez et
dveloppez le package oe. Slectionnez la classe Customer et cliquez sur le bouton OK.
La classe oe.Customer s'affiche dans le champ Extends. Conservez les valeurs par
dfaut de Optional Attributes et cliquez sur OK. Lorsque le code source de la classe
gnre s'affiche, enregistrez votre travail.
c. Dans l'diteur de code du fichier Company.java, dclarez les attributs suivants :
private String contact;
private int discount;
d. Pour gnrer les mthodes associes aux attributs, cliquez avec le bouton droit de la
souris dans l'diteur de code et slectionnez Generate Accessors dans le menu contextuel.
e. Dans la bote de dialogue Generate Accessors, cochez la case situe gauche du nom de
la classe. Dveloppez les noeuds correspondant chacun des attributs pour afficher le
nom des mthodes gnrer. Cliquez sur OK pour gnrer ces mthodes.
f. Enregistrez vos modifications.
2. Modifiez le constructeur Company pour ajouter des arguments.
a. Ajoutez les arguments suivants au constructeur sans argument :
public Company(String aName, String aAddress,
String aPhone, String aContact, int
aDiscount) {
}
b. Utilisez les arguments pour initialiser l'tat de l'objet (y compris l'tat de la superclasse).
Indice : Utilisez la syntaxe de la mthode super() pour transmettre des valeurs un
constructeur de superclasse appropri afin d'initialiser les attributs de la superclasse.
Exemple :
super(aName, aAddress, aPhone);
contact = aContact;
discount = aDiscount; ...
3. Ajoutez une mthode public String toString() la classe Company afin de
renvoyer le nom du contact et le pourcentage de remise, comme dans l'exemple suivant :
(Scott Tiger, 20%).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 10 : Hritage et polymorphisme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 39
a. Incluez dans la valeur renvoye les dtails de la superclasse formats comme suit :
<company info> (<contact>, <discount>%)
l'aide de l'instruction suivante :
return super.toString() + " ("+ contact + ", "+
discount + "%) ";
b. Enregistrez et compilez la classe Company.java.
Dfinir une nouvelle classe Individual en tant que sous-classe de
Customer
Dfinissez une classe Individual qui tend Customer et inclut les attributs et mthodes
mentionns dans le diagramme de classes fourni au dbut de cet exercice.
1. Crez la classe Individual de la mme manire que vous avez cr la classe Company
l'tape 1.a. Ajoutez l'attribut licNumber en tant que String de porte private, et
vrifiez que les mthodes get et set correspondantes existent pour extraire les valeurs.
2. Modifiez le constructeur sans argument afin qu'il accepte quatre arguments pour le nom,
l'adresse, le numro de tlphone et le numro de licence.
3. Compltez l'initialisation du corps du constructeur en affectant les arguments aux variables
d'instance appropries dans la classe Individual et sa superclasse.
4. Redfinissez la mthode toString() dfinie dans la superclasse et ajoutez le numro de
licence entre parenthses aux informations de la superclasse.
5. Enregistrez et compilez la classe Individual.
Modifier la classe DataMan afin d'inclure les objets Company et Individual
Ajoutez deux nouvelles variables de classe la classe DataMan : l'une pour un objet Company,
l'autre pour un objet Individual. Ouvrez DataMan dans l'diteur de code et ajoutez deux
nouvelles variables de classe nommes customer5 et customer6.
1. Crez une variable Company nomme customer5 et initialisez-la l'aide du constructeur
Company. Exemple :
static Company customer5 =
newCompany("Oracle","Redw","80","Larry",20);
2. Crez une variable Individual nomme customer6 et initialisez-la l'aide du
constructeur de la classe Individual.
3. Enregistrez et compilez DataMan.java en cliquant avec le bouton droit de la souris sur le
fichier et en slectionnant Make dans le menu contextuel.
Tester les nouvelles classes dans l'application OrderEntry
1. Au cours de ces tapes, vous allez modifier le code de l'application OrderEntry qui affecte un
objet Customer chacun des deux objets Order dans la mthode main(). Vous excuterez
ensuite l'application pour examiner les rsultats de votre travail.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 10 : Hritage et polymorphisme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 40
a. Ouvrez OrderEntry.java dans l'diteur de code. Localisez la ligne qui affecte
customer3 au premier objet order.
Par exemple, recherchez la ligne :
order.setCustomer(DataMan.customer3);
Indice : Utilisez la combinaison de touches Ctrl + F pour afficher une bote de dialogue
de recherche.
Remplacez customer3 par customer5 (la classe Company dans DataMan).
b. Compilez le code. Si cela fonctionne, expliquez pourquoi.
c. Dans l'argument order2.setCustomer(DataMan.customer4) remplacez
customer4 par customer6 (la classe Individual dans DataMan).
d. Compilez et excutez l'application OrderEntry. Quels dtails relatifs au client s'affichent
pour chaque commande ?
Expliquez les rsultats obtenus. Si vous utilisez la mme application que dans l'exercice
prcdent, souvenez-vous que pour afficher les informations relatives au client dans la
commande stocke (2), vous devez retirer le modificateur transient de la dclaration
de la variable Customer dans Order.java.
Ajuster les classes Util et Customer et tester les rsultats (facultatif)
Pour que l'utilisateur lambda puisse voir que les donnes qui s'affichent pour les objets Customer,
Company ou Individual reprsentent en fait des objets distincts, il doit tre conscient de la
signification des subtiles diffrences dans les donnes affiches. Modifiez le code afin d'indiquer
explicitement le nom du type d'objet dans le texte qui s'affiche, avant les autres dtails relatifs
l'objet, de la faon suivante :
[Customer] <customer details>
[Company] <company details>
[Individual] <individual details>
Si vous ajoutez manuellement le texte entre crochets avant les valeurs renvoyes par les
mthodes toString() des classes, [Company] et [Customer] sont concatns, de mme
que[Individual] et [Customer], pour les sous-classes de Customer. La solution
consiste donc utiliser le code hrit appel par la classe Customer, qui dtermine de faon
dynamique le nom du type d'objet lors de l'excution.
Vous pouvez dterminer le nom du type de n'importe quel objet Java lors de l'excution en
appelant sa mthode getClass(), laquelle est hrite de la classe java.lang.Object. La
mthode getClass() renvoie une rfrence objet java.lang.Class, par l'intermdiaire de
laquelle vous pouvez appeler une mthode getName() qui renvoie une variable de type
String contenant le nom entirement qualifi de l'objet lors de l'excution. Par exemple,
supposons que vous ajoutiez la ligne suivante la classe Customer :
String myClassName = this.getClass().getName();
La variable myClassName contiendra un nom de classe entirement qualifi comprenant le
nom du package. La valeur stocke dans myClassName sera alors oe.Customer.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 10 : Hritage et polymorphisme (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 41
Pour extraire uniquement le nom de la classe, vous devez supprimer le nom du package et le
point qui prcdent le nom de la classe. Il suffit pour cela d'utiliser une mthode
lastIndexOf() dans la classe String pour localiser la position du dernier point dans le
nom du package, puis de supprimer le texte qui suit.
1. Ajoutez la mthode getClassName() la classe Util, puis appelez-la partir de la
mthode toString() de la classe Customer.
a. Ouvrez Util.java dans l'diteur de code et ajoutez une mthode static String
getClassName() qui dtermine le nom du type d'objet lors de l'excution et renvoie
uniquement le nom de la classe.
public static String getClassName(Object o) {
String className = o.getClass().getName();
return className.substring(
className.lastIndexOf('.')+1,
className.length());
}
b. Enregistrez et compilez Util.java. Notez que JDeveloper recompile automatiquement
les autres classes qui dpendent du code de Util.java. JDeveloper comprend un
mcanisme de vrification des dpendances des classes.
2. Ouvrez Customer.java dans l'diteur de code.
a. Ajoutez un appel de la mthode Util.getClassName() comme prfixe avant les
autres donnes renvoyes par la mthode toString(), de la faon suivante :
return "[" + Util.getClassName(this) + "]
" + id+...;
b. Enregistrez et compilez Customer.java.
c. Excutez l'application OrderEntry pour examiner les rsultats.
d. Dans l'tape "a" qui prcde, que reprsente "this" ? Pourquoi transmettez-vous le
paramtre this la mthode Util.getClassName() ?
Expliquez pourquoi le compilateur accepte cette syntaxe.





O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 42
Exercices - Chapitre 11
Exercice 11 : Utiliser les tableaux et les collections
Objectif
Dans cet exercice, vous allez vous familiariser avec l'utilisation des tableaux Java et des classes
de collection telles que java.util.ArrayList. Vous utiliserez galement des arguments de
ligne de commande.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les11, chargez l'application
OrderEntryApplicationLes11, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours jusqu' cet exercice,
chargez l'application OrderEntryApplicationLes11. Dans la fentre Application
Navigator, dveloppez OrderEntryApplicationLes11
OrderEntryProjectLes11 - Application Sources oe, puis cliquez deux fois
sur l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres jusqu'
prsent dans le cours.
Tches accomplir
Continuez d'utiliser JDeveloper et les classes d'application cres au cours des exercices
prcdents. Vous allez amliorer la classe DataMan afin de crer un tableau d'objets Customer,
puis fournir une mthode permettant de rechercher et renvoyer un objet Customer pour un ID
donn.
La classe Order doit tre modifie afin de contenir une collection ArrayList d'articles, ce qui
ncessite une mthode pour ajouter les articles la collection et (ventuellement) une autre
mthode pour les supprimer.
Modifier DataMan pour stocker les objets Customer dans un tableau
1. Modifiez la classe DataMan afin de crer un tableau d'lments Customer.
a. Dfinissez un tableau private static d'objets Customer nomm customers.
private static Customer[] customers;
b. Initialisez le tableau avec une rfrence null.
private static Customer[] customers = null;
2. Crez une mthode public static void nomme buildCustomers() afin
d'alimenter le tableau d'lments Customer. Le tableau doit contenir six objets, savoir les
quatre objets Customer, ainsi que les objets Company et Individual crs
prcdemment.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 11 : Utiliser les tableaux et les collections (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 43
a. Dans le corps de la mthode, commencez par tester si la variable customers a une
valeur autre que null. Si oui, quittez la mthode sans rien faire, car cela signifie que le
tableau customers a t initialis. Si la variable customers a la valeur null, vous
devez crer l'objet tableau contenant les six objets dj crs.
public static void buildCustomers()
{
if (customers != null) return;
customers = new Customer[6];
b. A prsent, transfrez (par copier/coller) les dfinitions des quatre objets Customer
existants, de l'objet Company et de l'objet Individual dans le corps de cette mthode,
aprs avoir cr l'objet tableau. Ensuite, supprimez le mot-cl static ainsi que le nom
et le type de classe devant chaque nom de variable customer<n>. Modifiez chaque
variable afin qu'elle corresponde au nom de la variable de tableau, suivi de crochets
incluant un numro d'lment de tableau. Rappelez-vous que les lments des tableaux
sont numrots partir de zro.
Par exemple, remplacez :
static Customer customer1 = new Customer();
par :
customers[0] = new Customer();
Cet exemple affecte l'objet Customer au premier lment du tableau.
Rptez cette procdure pour chaque rfrence objet customer<n> du code.
c. Crez un bloc static qui appelle la mthode buildCustomers() afin de crer et
d'initialiser le tableau d'objets Customer, lorsque la classe DataMan est charge. Placez
le bloc la fin de la classe DataMan. (Les blocs statiques de la dfinition de classe sont
parfois appels constructeurs de classe.)
static
{
buildCustomers();
}
d. Enregistrez et compilez la classe DataMan. Quelles autres classes sont compiles ?
Expliquez les rsultats. (Rsolvez uniquement les ventuelles erreurs lies la classe
DataMan. Toute erreur concernant la classe OrderEntry sera rsolue aprs les
questions suivantes.)
Indice : Examinez les onglets Messages et Compiler de la fentre Log.
Modifier DataMan pour rechercher un objet Customer en fonction de son ID
1. Crez une mthode public static nomme findCustomerById(int custId), qui
renvoie un objet Customer, l'argument de la mthode reprsentant l'ID de l'objet
Customer rechercher. Si l'objet est trouv, renvoyez la rfrence correspondante. Dans le
cas contraire, renvoyez une valeur de rfrence null.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 11 : Utiliser les tableaux et les collections (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 44
a. Pourquoi l'initialisation du tableau customers est-elle garantie lors de l'appel de la
mthode findCustomerById() ? Vous pouvez donc crire du code en partant du
principe que le tableau est rempli.
b. Ecrivez une boucle permettant de balayer le tableau customers, afin que chaque
rfrence objet Customer compare la valeur du paramtre custId la valeur renvoye
par la mthode getId() de chaque objet Customer. En cas de correspondance, renvoyez
la rfrence objet Customer. Sinon, renvoyez la valeur null.
c. Enregistrez et compilez la classe DataMan, en rsolvant uniquement les erreurs de
syntaxe signales pour cette classe.
2. Corrigez prsent les erreurs de syntaxe de la classe OrderEntry provoques par les
modifications apportes DataMan.
a. Dans l'diteur de code, localisez et modifiez chaque ligne faisant directement rfrence
aux variables DataMan.customer<n> qui existaient prcdemment.
Indice : Vous pouvez accder rapidement aux lignes comportant des erreurs en cliquant
deux fois sur la ligne du message d'erreur sous l'onglet Compiler de la fentre Log.
Remplacez chaque occurrence du texte DataMan.customer<n> par un appel de la
mthode DataMan.findCustomerById(n). Par exemple, remplacez :
System.out.println(DataMan.customer1.toString());
par :
System.out.println(DataMan.findCustomerById(1).toString());
b. Enregistrez, compilez et excutez le fichier OrderEntry.java afin de tester vos
modifications.
Modifier la classe Order pour qu'elle contienne une collection ArrayList
d'objets OrderItem (facultatif)
Pour l'instant, la classe Order a cod en dur la cration de deux objets OrderItem en tant que
variables d'instance, et les dtails de chaque objet OrderItem sont dfinis dans la mthode
getOrderTotal(). Cela est peu commode pour le comportement prvu de la classe Order.
Il faut prsent remplacer les deux variables OrderItem par une collection ArrayList
contenant les objets OrderItem. Vous devez donc crer des mthodes permettant d'ajouter et
de supprimer des objets OrderItem dans la collection ArrayList.
Dans la classe Order, dfinissez une collection ArrayList pour les articles, puis remplacez
les variables d'instance OrderItem, en supprimant le code qui dpend des variables d'instance
OrderItem d'origine.
1. Ajoutez une instruction au dbut de la classe, aprs l'instruction package, afin d'importer la
classe java.util.ArrayList.
2. Dclarez une nouvelle variable d'instance nomme items comme rfrence d'objet
ArrayList. Par ailleurs, supprimez ou mettez en commentaires les dclarations des deux
variables d'instance nommes item1 et item2, ainsi que tout le code qui utilise ces
variables.
Indice : Les mthodes suivantes utilisent directement les variables item1 et item2 :
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 11 : Utiliser les tableaux et les collections (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 45
getOrderTotal(), showOrder().

3. Dans le constructeur sans argument Order, ajoutez une ligne permettant de crer la
collection de type ArrayList items, de la faon suivante :
items = new ArrayList(10);
4. Enregistrez les modifications apportes la classe Order et compilez la classe.
Modifier OrderItem pour grer les informations relatives aux produits
(facultatif)
Avant de crer la mthode permettant d'ajouter un objet OrderItem la collection ArrayList
items, il est ncessaire de modifier la classe OrderItem afin qu'elle puisse contenir les
informations sur le produit command. Chaque objet OrderItem reprsente un article. Chaque
article contient des informations sur le produit command, son prix et la quantit commande.
1. Editez la classe OrderItem et ajoutez une nouvelle variable d'instance nomme product.
Dclarez la variable en tant que private int, puis gnrez ou crivez les mthodes
getProduct() et setProduct(). Modifiez la mthode toString() afin d'ajouter la
valeur product entre lineNbr et quantity.
2. Crez un constructeur OrderItem afin d'initialiser l'objet l'aide de valeurs fournies par les
deux arguments suivants : int productId et double itemPrice. Initialisez la
variable quantity avec la valeur 1.
Remarque : La classe OrderItem ne fournit pas de constructeur sans argument.
3. Enregistrez et compilez la classe OrderItem.
Modifier Order pour ajouter des produits dans la collection ArrayList
OrderItem (facultatif)
Dans la classe Order, crez une nouvelle mthode public void nomme
addOrderItem() qui accepte un argument : un entier nomm product, reprsentant l'ID du
produit command. Cette mthode doit effectuer les oprations suivantes :
1. Rechercher dans la collection ArrayList items un OrderItem contenant le produit indiqu.
Pour cela, crez une boucle afin d'obtenir chaque lment OrderItem de la collection
ArrayList items.
Indice : Utilisez la mthode size() de l'objet ArrayList pour dterminer le nombre
d'lments de la collection.
2. Utilisez la mthode getProduct() de la classe OrderItem pour comparer la valeur du
produit la valeur existante dans l'article de la commande. Si le produit comportant l'ID
indiqu est trouv parmi les lments OrderItem de la collection ArrayList, incrmentez la
quantit l'aide de la mthode setQuantity(). Si le produit indiqu n'existe dans aucun
des objets OrderItem de la collection ArrayList, crez un nouvel objet OrderItem
l'aide du constructeur qui acceptera le produit et un prix.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 11 : Utiliser les tableaux et les collections (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 46
Ajoutez ensuite le nouvel objet OrderItem la collection ArrayList.
Remarque : Etant donn que les numros des articles sont dfinis par rapport leur ordre,
dfinissez le numro de ligne pour OrderItem l'aide de la mthode setLineNbr()
aprs l'ajout d'un article la collection ArrayList. Le numro de ligne est dfini l'aide de la
mthode size() de la collection ArrayList, car les lments sont ajouts la fin de la liste.
Pour le moment, supposons que le prix de tous les produits soit de 5 dollars.

public void addOrderItem(int product)
{
OrderItem item = null;
boolean productFound = false;
for (int i = 0; i < items.size() &&
!productFound; i++)
{
item = (OrderItem) items.get(i);
productFound = (item.getProduct() ==
product);
}
if (productFound)
{
item.setQuantity(item.getQuantity() + 1);
}
else
{
item = new OrderItem(product, 5.0);
items.add(item);
item.setLineNbr(items.size());
}
}
3. La valeur orderTotal est prsent calcule mesure que chaque produit est ajout la
commande. Vous devez donc galement ajouter le prix de chaque produit orderTotal.
Indice : Utilisez la mthode getUnitPrice() de la classe OrderItem. Etant donn que
orderTotal est prsent mis jour mesure que chaque produit est ajout la commande,
la mthode getOrderTotal() peut simplement renvoyer la valeur orderTotal.
orderTotal += item.getUnitPrice();
Remarque : Cela peut dj avoir t effectu suite aux prcdentes modifications apportes
la mthode.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 11 : Utiliser les tableaux et les collections (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 47
4. Modifiez la mthode showOrder() afin d'utiliser une technique d'itration pour effectuer
une boucle dans la collection ArrayList items en vue d'afficher chaque objet OrderItem
en appelant la mthode toString().
Indice : Importez java.util.Iterator et utilisez la mthode elements() de la
classe ArrayList pour crer une itration. Reportez-vous aux notes du cours pour examiner un
exemple ou demandez des explications au formateur.

public void showOrder()
{
System.out.println(toString());
if (customer != null)
{
System.out.println("Customer: " + customer);
}
System.out.println("Items:");
for (Iterator it = items.iterator(); it.hasNext(); )
{
System.out.println(it.next().toString());
}
}
5. Enregistrez et compilez la classe Order, puis corrigez les ventuelles erreurs de syntaxe.
6. Testez les modifications apportes aux classes OrderItem et Order, en modifiant la classe
OrderEntry afin d'ajouter les produits 101 et 102 au premier objet order.
Par exemple, avant l'appel de la mthode showOrder(), entrez les lignes indiques en gras
ci-aprs :
order.setCustomer(DataMan.findCustomerById(5));
order.addOrderItem(101);
order.addOrderItem(102);
order.addOrderItem(101);
order.showOrder();
7. Compilez (en corrigeant d'abord les erreurs de syntaxe), enregistrez et excutez
OrderEntry.java. Vrifiez l'exactitude des rsultats. Par exemple, vrifiez que le total de
la commande 100 est bien de 15 $.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 48
Exercices - Chapitre 12
Exercice 12 : Utiliser les types gnriques
Il n'y a pas d'exercice associ ce chapitre.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 49
Exercices - Chapitre 13
Exercice 13 : Structurer le code l'aide de classes abstraites et
d'interfaces
Objectif
L'objectif de cet exercice est d'apprendre crer et utiliser une classe abstraite, ainsi qu' crer
et utiliser une interface.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les13, chargez l'application
OrderEntryApplicationLes13, puis continuez.
Tches accomplir
Pour l'instant, la classe OrderItem considre un produit comme un entier uniquement. Cela est
insuffisant pour l'entreprise, qui doit connatre le nom, la description et le prix unitaire de chaque
produit. Pour rpondre ce besoin, vous devez crer une classe abstraite appele Product et
dfinir trois sous-classes concrtes appeles Software, Hardware et Manual.
Pour prendre en charge le calcul d'une taxe sur les produits matriels, vous devez crer une
interface appele Taxable, implmente par la sous-classe Hardware.
Pour tester vos modifications, vous modifiez DataMan afin de crer une liste d'objets Product
et de fournir une mthode permettant de rechercher un produit en fonction de son ID.
Crer une classe abstraite et trois sous-classes
Crez une classe public abstract nomme Product dans OrderEntryProject.
1. Dclarez les attributs ci-aprs et leurs mthodes getXXX() et setXXX().
Remarque : N'oubliez pas d'ajouter le mot-cl abstract avant le mot-cl class dans le
code source, aprs la cration du fichier Product.java.
private static int nextProductId = 2000;
private int id;
private String name;
private String description;
private double retailPrice;
2. Dfinissez un constructeur public sans argument qui affecte nextProductId l'ID d'un
nouvel objet Product, avant d'incrmenter nextProductId.

public Product()
{
id = nextProductId++;
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 13 : Structurer le code l'aide de classes abstraites et
d'interfaces (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 50
3. Ajoutez une mthode public String toString() afin de renvoyer ID, name et
retailPrice. Faites-la prcder du nom de la classe l'aide de la mthode
getClassName(this) de la classe Util. Formatez ensuite retailPrice l'aide de
la mthode Util.toMoney().

public String toString()
{
return "[" + Util.getClassName(this) + "] " + id + " " +
name + " " + Util.toMoney(retailPrice);
}
4. Compilez et enregistrez la classe Product.
5. Crez trois sous-classes concrtes de la classe Product avec pour chacune les attributs et
les valeurs initiales indiqus dans le tableau ci-aprs. Ajoutez les mthodes get et set
appropries.
Sous-classe Attributs
Software String license = "30 Day Trial";
Hardware int warrantyPeriod = 6;
Manual String publisher = "Oradev Press";
6. Modifiez le constructeur sans argument des sous-classes Software, Hardware et
Manual, de sorte qu'il accepte trois arguments pour le produit (name, description et
price). Utilisez le code suivant comme exemple pour la classe Software :
public Software(String name,String desc,double price)
{
setName(name);
setDescription(desc);
setRetailPrice(price);
}
7. Compilez et enregistrez les nouvelles sous-classes.
Modifier DataMan pour fournir une liste de produits et une mthode de
recherche
Utilisez les nouvelles dfinitions de classe de DataMan pour crer un inventaire des produits.
1. Dans DataMan, crez un objet destin contenir une collection de produits.
a. Crez une classe interne private static appele ProductMap qui tend
HashMap.
Remarque : N'oubliez pas d'importer java.util.HashMap.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 13 : Structurer le code l'aide de classes abstraites et
d'interfaces (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 51
b. Dans la classe interne ProductMap, crez la mthode suivante pour ajouter des objets
Product la collection. Id est la cl et la rfrence objet est la valeur :
public void add(Product p) {
String key = Integer.toString(p.getId());
put(key, p); // use inherited put() method
}
c. Dclarez une variable private static ProductMap appele products, par
exemple :
private static ProductMap products = null;
d. Compilez et enregistrez la classe DataMan.
2. Crez une mthode permettant d'alimenter la variable ProductMap avec les objets Product.
a. Crez la mthode nomme buildProducts() dans la classe DataMan, de la faon
suivante :
public static void buildProducts() {
if (products != null) return;
products = new ProductMap();
products.add(new Product();
}
b. Enregistrez et compilez le code. Expliquez l'erreur de compilation indique pour la ligne
qui ajoute Product la mappe products.
c. Corrigez l'erreur de compilation en ajoutant des sous-classes concrtes de la classe
Product. Remplacez la ligne de code products.add(new Product()) par le
texte ci-aprs :
products.add(
new Hardware("SDRAM - 128 MB", null, 299.0));
products.add(new Hardware("GP 800x600", null, 48.0));
products.add(
new Software("Spreadsheet-SSP/V2.0", null, 45.0));
products.add(
new Software("Word Processing-SWP/V4.5",null,65.0));
products.add(
new Manual("Manual-Vision OS/2x +", null, 125.0));
d. Compilez la classe DataMan et enregistrez vos modifications. Cette fois-ci, la
compilation doit fonctionner.
e. A la fin du fichier, dans le bloc static de DataMan, ajoutez un appel de la mthode
buildProducts().
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 13 : Structurer le code l'aide de classes abstraites et
d'interfaces (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 52
f. Ajoutez la mthode findProductById() pour renvoyer un objet Product
correspondant un ID fourni.
public static Product findProductById(int id) {
String key = Integer.toString(id);
return (Product) products.get(key);
}
Remarque : Etant donn que products est un objet HashMap, recherchez le produit
en fonction de sa cl, c'est--dire de son ID.
g. Enregistrez les modifications apportes la classe DataMan et compilez la classe.
h. Testez le code de DataMan et les classes supplmentaires en affichant le produit trouv
en fonction de son ID. Ajoutez la ligne suivante la classe OrderEntry la fin de la
mthode main() :
System.out.println("Product is: " +
DataMan.findProductById(2001));
i. Compilez, enregistrez et excutez l'application OrderEntry afin de tester le code.
Modifier OrderItem pour qu'elle contienne les objets Product (facultatif)
Remplacez les utilisations de la variable product en tant que type int par la classe Product
que vous venez de crer.
1. Dans OrderItem.java, remplacez la dclaration de type int de la variable d'instance
product par Product.
2. Remplacez le constructeur deux arguments par un constructeur un seul argument, nomm
newProduct, dont le type est Product. Autrement dit, supprimez les arguments
productId et itemPrice.
3. Modifiez le corps du constructeur afin de stocker newProduct dans la variable product,
puis affectez unitPrice la valeur renvoye par l'appel de la mthode
getRetailPrice() de l'objet product.
4. Modifiez la mthode getProduct() pour renvoyer un type Product au lieu d'un type
int. Modifiez la mthode setProduct() pour accepter un type Product au lieu d'un
type int.
5. Modifiez la mthode toString() afin d'afficher le total des articles au lieu de
unitPrice.
Indice : Utilisez la mthode getItemTotal().
6. Compilez et enregistrez les modifications apportes au code. Corrigez uniquement les
erreurs de syntaxe gnres par la classe OrderItem. Les erreurs signales pour la classe
Order seront corriges l'tape suivante de cet exercice.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 13 : Structurer le code l'aide de classes abstraites et
d'interfaces (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 53
Modifier Order pour ajouter les objets Product OrderItem (facultatif)
Modifiez la classe Order.java afin qu'elle utilise l'objet Product au lieu d'une valeur int.
Pour cela, vous devez modifier la mthode addOrderItem() :
1. Dans addOrderItem, renommez l'argument productId et modifiez la boucle for en
remplaant :
productFound = (item.getProduct() == product);
par :
productFound =
(item.getProduct().getId() == productId);
2. Dans la section else de l'instruction if, appelez la mthode findProductById() de
DataMan en utilisant la valeur productId. Si un objet Product est trouv, crez
OrderItem partir de cet objet. Dans le cas contraire, ne faites rien. Exemple :
item = new OrderItem(product, 5.0);
items.add(item);
devient :
Product p = DataMan.findProductById(productId);
if (p != null) {
item = new OrderItem(p);
items.add(item);
}
3. Testez les modifications apportes au code de la classe Product et de ses sous-classes en
modifiant la classe OrderEntry afin qu'elle utilise les nouvelles valeurs de productId.
4. Etant donn que l'ID des objets de la classe Product (ou de ses sous-classes) commence
2000, modifiez le fichier OrderEntry.java en remplaant les valeurs des paramtres
dans tous les appels de la mthode order.addOrderItem(), comme indiqu dans le
tableau suivant :
Remplacez Par
101 2001
102 2002
5. Enregistrez, compilez et excutez le projet OrderEntryProject, puis vrifiez les
modifications apportes aux lments affichs. Vrifiez que le calcul du prix est toujours
correct.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 13 : Structurer le code l'aide de classes abstraites et
d'interfaces (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 54
Crer et implmenter l'interface Taxable (facultatif)
1. Crez une interface nomme Taxable pour calculer la taxe sur les produits matriels. Cette
interface sera implmente par la sous-classe Hardware. Pour cela, procdez de la manire
suivante :
a. Cliquez avec le bouton droit de la souris sur le fichier OrderEntryProject.jpr
dans le navigateur et slectionnez New dans le menu contextuel. Dans la catgorie
General, slectionnez Java Interface et cliquez sur OK. Entrez le nom de classe
Taxable et cliquez sur le bouton OK.
b. Dans l'diteur de code, ajoutez les dfinitions de variable et de mthode suivantes
l'interface :
double TAX_RATE = 0.10;
double getTax(double amount);
Remarque : Rappelez-vous que toutes les variables sont implicitement public
static final et que toutes les mthodes sont implicitement public.
L'implmenteur de l'interface doit multiplier amount (par exemple le prix) par
TAX_RATE et renvoyer le rsultat sous forme de type double.
c. Compilez et enregistrez l'interface.
2. Editez la classe Hardware afin d'implmenter l'interface Taxable.
a. Ajoutez le code suivant la dfinition de la classe pour implmenter l'interface :
public class Hardware extends Product
implements Taxable {
b. Compilez la classe Hardware et expliquez l'erreur.
c. Ajoutez la mthode suivante afin de complter l'implmentation de l'interface :
public double getTax(double amount) {
return amount * TAX_RATE;
}
Remarque : Pour excuter cette tape, cliquez avec le bouton droit de la souris dans la
marge de gauche en regard de la dclaration de l'interface. Dans le menu contextuel,
slectionnez Implement Methods. JDeveloper gnre tout le code, l'exception du calcul
de la valeur renvoye (que vous pouvez modifier comme il se doit).
d. Compilez et enregistrez la classe Hardware.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 13 : Structurer le code l'aide de classes abstraites et
d'interfaces (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 55
3. Modifiez la classe OrderItem afin d'obtenir la taxe sur chaque article.
a. Ajoutez une mthode public double getTax() afin de dterminer si l'objet
Product correspondant l'article est taxable. Si tel est le cas, renvoyez le montant de la
taxe pour le total des articles (utilisez la mthode getItemTotal()). Dans le cas
contraire, renvoyez 0.0. Exemple :
double itemTax = 0.0;
if (product instanceof Taxable)
{
itemTax =((Taxable) product).getTax(getItemTotal());
}
b. Modifiez la mthode toString() afin d'afficher le montant de la taxe sur l'article si et
seulement si le produit est taxable. Utilisez la mthode getTax() que vous avez cre,
puis formatez la valeur avec Util.toMoney().
c. Pour afficher les modifications, compilez OrderItem.java, puis excutez OrderEntry.
4. Modifiez la classe Order afin d'afficher la taxe. Modifiez le total de la commande pour qu'il
comprenne la taxe.
a. Dans la mthode showOrder(), ajoutez une variable locale double nomme
taxTotal, initialise avec la valeur 0.0, qui cumule la taxe totale de la commande.
b. Modifiez la boucle for en utilisant une itration afin d'appeler la mthode getTax()
pour chaque article, puis ajoutez la valeur taxTotal.
Indice : Pour cela, vous devez convertir la valeur renvoye de it.next() en
OrderItem.
c. Ajoutez trois instructions System.out.println() aprs la boucle : l'une pour
afficher taxTotal, la deuxime pour afficher orderTotal (incluant taxTotal) et
la dernire sans paramtre, pour afficher une ligne vide. Utilisez la mthode
Util.toMoney() pour mettre en forme les totaux.
d. Pour afficher les rsultats, compilez et enregistrez Order.java, puis excutez
OrderEntry.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 56
Exercices - Chapitre 14
Exercice 14 : Gnrer et dtecter les exceptions
Objectif
Dans cet exercice, vous allez apprendre crer vos propres classes d'exception, gnrer un
objet exception l'aide de votre propre classe et traiter les exceptions.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les14, chargez l'application
OrderEntryApplicationLes14, puis continuez.
Tches accomplir
L'application ne gre pas de faon satisfaisante le cas d'un ID client non valide fourni la
mthode DataMan.findCustomerById() ou d'un ID produit non valide fourni la
mthode DataMan.findProductById(). Dans les deux cas, une valeur null est renvoye.
Les tches effectuer sont les suivantes :
Crer une exception (contrle) dfinie par l'utilisateur, nomme
oe.NotFoundException.
Modifier DataMan.findCustomerById() afin de gnrer une exception lorsqu'un Id
client non valide est saisi.
Modifier la mthode DataMan.findProductById() de la classe DataMan afin de
gnrer l'exception si l'ID produit fourni n'est pas valide (c'est--dire s'il est introuvable).
Crer la classe NotFoundException
Dans OrderEntryProject, crez une nouvelle classe nomme NotFoundException.
1. Cliquez avec le bouton droit de la souris sur le nom du projet dans le navigateur, puis
slectionnez New dans le menu contextuel. Dans la fentre New Gallery, assurez-vous que la
catgorie General et l'lment Java Class sont slectionns. Entrez le nom de classe
NotFoundException et dfinissez cette classe en tant que sous-classe de
java.lang.Exception.
2. Modifiez le constructeur sans argument par dfaut afin d'accepter un message comme
argument de type String, puis transmettez la chane au constructeur de la superclasse,
comme dans l'exemple ci-aprs :
public NotFoundException(String message) {
super(message);
}
3. Compilez et enregistrez la classe NotFoundException.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 14 : Gnrer et dtecter les exceptions (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 57
Gnrer des exceptions dans DataMan, rechercher les mthodes et traiter
les exceptions dans OrderEntry
1. Editez DataMan.java et modifiez la mthode findCustomerById() afin de gnrer
l'exception NotFoundException lorsque l'ID client indiqu est introuvable dans le
tableau.
a. A la fin de la boucle for, si la rfrence de l'objet Customer local est null (c'est--dire
si le client est introuvable), gnrez un objet exception en utilisant la structure de
message d'erreur suivante dans l'argument du constructeur :
"Customer with id " + custId + " does not exist"
b. Compilez la classe DataMan. Expliquez l'erreur.
c. Corrigez l'erreur en modifiant la dclaration de la mthode afin de propager l'exception.
d. Compilez de nouveau DataMan. Quelles erreurs obtenez-vous cette fois-ci ?
Expliquez-les.
e. Rsolvez les erreurs de compilation en traitant les exceptions avec un bloc try-catch
dans la classe OrderEntry. Pour simplifier, utilisez un mme bloc try-catch pour
grer tous les appels des mthodes DataMan.findCustomerById(). Vous pouvez
galement traiter chaque appel dans son propre bloc try-catch.
try { // calls to findCustomerById() here
}
catch (NotFoundException e) {
// handle the error here
}
Dans le bloc catch, vous pouvez utiliser les mthodes hrites de l'exception pour
afficher les informations relatives l'erreur. Utilisez les deux mthodes suivantes pour
afficher ces informations :
- e.printStackTrace() pour afficher l'exception, le message et la trace de pile
- e.getMessage() pour renvoyer le texte du message d'erreur sous forme de String
f. Compilez, enregistrez et excutez OrderEntry.java. Testez le code avec les erreurs.
2. Modifiez findProductById() afin de gnrer une exception NotFoundException
lorsque l'ID de produit fourni est absent de la mappe Product.
a. La mthode findProductById() appelle get(key) pour rechercher un produit
dans HashMap. Si get(key) renvoie null, gnrez une exception
NotFoundException l'aide du message d'erreur suivant. Dans le cas contraire,
renvoyez l'objet Product trouv. Vous devez galement ajouter la ligne de dclaration du
produit et modifier l'instruction return actuelle.
"Product with id " + id + " is not found"
b. Modifiez la mthode findProductById afin de propager l'exception.
c. Compilez et enregistrez la classe DataMan, puis expliquez l'erreur signale lors de la
compilation.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 14 : Gnrer et dtecter les exceptions (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 58
d. Dans la classe Order, modifiez addOrderItem afin de propager l'exception.
e. Compilez la classe Order, puis expliquez pourquoi elle est compile avec succs.
f. Dans OrderEntry.java, utilisez la valeur 9999 comme ID de produit dans le premier
appel de order.addOrderItem(2001). Compilez et excutez OrderEntry.
Expliquez pourquoi l'application s'arrte immdiatement aprs l'ajout du produit 9999.
g. Dans Order.java, supprimez throws NotFoundException la fin de la
dclaration de la mthode addOrderItem(). Ecrivez un bloc try-catch afin de
traiter l'exception dans cette mthode.
Indice : Vous devez quitter la mthode dans le bloc catch afin de garantir que
itemTotal n'est pas affect.
h. Compilez Order, excutez OrderEntry.java, puis expliquez la diffrence dans les
rsultats.
i. Dans OrderEntry, remplacez l'ID de produit 9999 par 2001. Compilez, enregistrez et
excutez.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 59
Exercices - Chapitre 15
Exercice 15 : Utiliser JDBC pour accder la base de donnes
Objectif
Dans cet exercice, vous allez utiliser l'application du cours pour interagir avec la base de donnes
Oracle. Vous allez tablir une connexion avec la base de donnes, crer des instructions
d'interrogation afin d'y accder et extraire des informations que vous intgrerez dans l'application.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les15, chargez l'application
OrderEntryApplicationLes15, puis continuez.
Tches accomplir
Dans la classe DataMan, tablissez une connexion la base de donnes pour extraire des
donnes de la table Customers.
Configurer l'environnement afin d'utiliser JDBC
Mettez jour le projet afin d'inclure les classes JDBC ncessaires.
1. Ouvrez OrderEntryApplicationLes15, cliquez deux fois sur le nom du projet (en
l'occurrence OrderEntryProjectLes15), puis slectionnez le noeud Libraries and
Classpath. Vous ouvrez ainsi le volet de bibliothques.
2. Cliquez sur le bouton Add Library, puis faites dfiler la liste des bibliothques et
slectionnez Oracle JDBC. Slectionnez la bibliothque et cliquez sur OK. Cliquez
nouveau sur OK pour fermer la bote de dialogue Project Properties.
3. Enregistrez le projet.
Ajouter des composants JDBC afin d'interroger la base de donnes
1. Modifiez la classe DataMan pour fournir les informations de connexion.
a. Indiquez les packages importer :
import java.sql.*;
b. Ajoutez une variable static destine contenir les informations de connexion :
private static Connection conn = null;
c. Ajoutez une mthode qui interroge la table Customers aprs le bloc de code static
situ la fin de la classe DataMan. Cette mthode utilise customer_id comme
paramtre d'entre et interroge la table Customers. Commencez par le code de
connexion ci-aprs (votre formateur vous indiquera l'URL de connexion approprie) :
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 15 : Utiliser JDBC pour accder la base de donnes (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 60
public static Customer selectCustomerById(int id) throws
Exception {
// Register the Oracle JDBC driver
DriverManager.registerDriver(new
oracle.jdbc.OracleDriver());
// Define the connection url
String url = "jdbc:oracle:thin:@myhost:1521:SID";
// Provide db connection information
conn = DriverManager.getConnection (url, "oe", "oe");
}
2. Ajoutez des instructions permettant d'excuter l'instruction select en fonction de l'ID de
client puis de renvoyer le rsultat un objet Customer. Dans cet exercice, vous alimentez
seulement deux des lments de la base de donnes. Dans les exercices prcdents, le numro
de tlphone a t dfini en tant qu'objet String. En revanche, il est stock dans la base de
donnes en tant que type d'objet complexe. Un utilitaire, nomm JPublisher, vous permet de
convertir un type d'objet en type String pour pouvoir l'utiliser dans votre application. Ce
processus est beaucoup trop dtaill pour tre dcrit dans ce cours. Dans cet exercice,
l'lment numro de tlphone ne reoit pas de valeurs.
a. Dans la mthode selectCustomerById, excutez l'interrogation en fonction d'un ID
client :
Customer customer = null;
Statement stmt = conn.createStatement();
System.out.println
("Table Customers query for customer with id: " + id);
ResultSet rset = stmt.executeQuery
("SELECT cust_last_name, nls_territory" +
" FROM customers WHERE customer_id = " + id);
b. Si un enregistrement est renvoy, alimentez l'objet customer :
if (rset.next ()) {
customer = new Customer();
customer.setId(id);
customer.setName(rset.getString(1)); //holds first
column
customer.setAddress(rset.getString(2)); //holds second
column
System.out.println("Customer found: " + customer);
// prints both columns to the command window
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 15 : Utiliser JDBC pour accder la base de donnes (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 61
c. Dans le cas contraire, gnrez une exception indiquant que le client est introuvable,
fermez l'instruction, puis renvoyez le client :
else {
throw new NotFoundException("Customer with id " + id + " not
found");
}
rset.close();
stmt.close();
return customer;
}
d. Enregistrez et compilez le fichier DataMan.java. Corrigez les ventuelles erreurs.
3. Ajoutez une nouvelle mthode pour fermer la connexion la fin de la classe DataMan.
a. Le code utiliser pour obtenir ce rsultat est le suivant :
public static void closeConnection() {
try {
conn.close();
}
catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
b. Enregistrez le fichier DataMan.java.
Tester l'accs JDBC la base de donnes
1. Jusqu' ce point du cours, vous avez utilis des donnes client "codes en dur". Vous allez
prsent modifier le code qui affiche ces informations pour afficher des informations client
"relles" issues de la base de donnes. Dans la classe OrderEntry, ajoutez un appel la
mthode selectCustomerById, dtectez l'exception gnre pour un client introuvable,
puis fermez la connexion. Procdez de la manire suivante :
a. Ajoutez un appel la mthode selectCustomerByID() que vous venez de crer.
Dans la boucle for qui affiche les informations client correspondant aux ID indiqus
dans les arguments de la ligne de commande, remplacez la mthode
DataMan.findCustomerById(custId) de la ligne suivante :
System.out.println("Arg: " + custId... )
par :
DataMan.selectCustomerById(custId);
b. Pour dtecter l'exception gnre par DataMan lorsque le client est introuvable, faites
dfiler le bloc catch et remplacez la ligne suivante :
catch (NotFoundException e)
par :
catch (Exception e)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 15 : Utiliser JDBC pour accder la base de donnes (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 62
c. Ajoutez un appel la mthode closeConnection() aprs le bloc catch dans la
classe DataMan.
d. Enregistrez et compilez la classe DataMan. Corrigez les ventuelles erreurs.
2. Modifiez les ID client que vous avez utiliss jusqu' prsent (ils sont indiqus dans la
configuration Run/Debug du projet), puis testez l'application.
a. Cliquez avec le bouton droit de la souris sur le nom du projet dans le navigateur, puis
slectionnez Project Properties dans le menu contextuel. Slectionnez Run/Debug dans
le volet de gauche et cliquez sur le bouton Edit. Dans le champ Program Arguments,
remplacez les valeurs par les ID rels, savoir : 150, 352, 468, 999 (n'insrez pas de
virgule entre les ID lors de la saisie). Cliquez sur OK deux reprises.
b. Excutez l'application. Tous les ID ont-ils renvoy des informations client ? A dfaut,
avez-vous vu l'exception gnre ?

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 63
Exercices - Chapitre 16
Exercice 16 : Utiliser Swing pour planifier la prsentation de
l'application
Objectif
Dans cet exercice, vous allez utiliser JDeveloper pour commencer crer la prsentation de
l'application. Vous allez crer le cadre principal de l'application en tant que fentre MDI ainsi que
les cadres internes qu'il contient. L'utilisation de ces cadres vous permettra d'explorer les classes
Swing ainsi que les moyens de crer des applications d'interface graphique.
Remarque : Pour cet exercice, vous utilisez l'application OrderEntryApplicationLes16.
Tches accomplir
Vous allez commencer par crer la fentre principale en tant qu'extension de la classe JFrame.
Celle-ci contient un objet JDesktopPane permettant de grer la prsentation des cadres
internes. Vous allez galement crer une classe fonde sur la classe JinternalFrame, dans
laquelle les dtails relatifs au client et la commande seront saisis par l'intermdiaire de
composants atomiques Swing. La prsentation des composants sera gre l'aide de panneaux et
des gestionnaires de prsentation associs. Vous utiliserez l'assistant JDeveloper Frame Wizard
pour crer le menu de base de l'application, ainsi qu'une barre d'tat dans la fentre principale.
Crer la fentre principale de l'application
1. Commencez par crer une sous-clase de la classe JFrame dans le projet OrderEntry.
a. Cliquez avec le bouton droit de la souris sur le nom du projet dans le navigateur, puis
slectionnez New dans le menu contextuel. Slectionnez l'lment Frame dans la
catgorie Client Tier > Swing/AWT, puis cliquez sur le bouton OK.
b. Dans la bote de dialogue Create Frame, entrez le nom de classe
OrderEntryMDIFrame, puis tendez javax.swing.JFrame. Dans la section
Optional Attributes, affectez au champ Title la valeur Order Entry Application, puis
cochez uniquement les cases Menu Bar et Status Bar. Cliquez ensuite sur le bouton OK.
c. Examinez le code gnr par JDeveloper pour la nouvelle classe en slectionnant l'onglet
Source. Vous remarquez que JDeveloper cre une mthode jbInit() appele par le
constructeur sans argument par dfaut. La mthode jbInit() doit contenir tout le code
permettant d'initialiser la structure de l'interface graphique. Si ncessaire, modifiez le code
afin qu'il corresponde celui qui est affich.
d. Dans la fentre de l'diteur, slectionnez l'onglet Design, et examinez la hirarchie
graphique des conteneurs et la prsentation du cadre. La hirarchie de conteneurs est
visible dans la fentre Structure (situe sous le navigateur).
e. Cliquez sur l'onglet Source pour retourner dans l'diteur de code et effectuez les
modifications suivantes :
Remplacez la dclaration de variable JPanel panelCenter par :
JDesktopPane desktopPane = new JDesktopPane();
Remarque : Il se peut que vous deviez importer javax.swing.JDesktopPane.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 16 : Utiliser Swing pour planifier la prsentation de
l'application (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 64
Dans la mthode jbInit(), remplacez les rfrences panelCenter par
desktopPane.
f. Enregistrez et compilez la classe OrderEntryMDIFrame.
2. Rendez le cadre visible, de la manire suivante :
a. Modifiez OrderEntry.java en renommant la mthode main() en test1().
b. A la fin de la classe, crez une nouvelle mthode public static void main(String[] args)
qui cre une instance de OrderEntryMDIFrame et la rend visible.
3. Compilez, enregistrez et excutez l'application OrderEntry.
Crer la classe JInternalFrame pour les donnes de commande
Ce cadre contient l'essentiel du code de l'interface graphique pour la saisie des donnes et
l'interaction avec l'utilisateur lors d'une commande, ainsi que pour l'affectation d'un client et
l'ajout des articles la commande.
1. Crez le cadre JInternalFrame et nommez-le OrderEntryFrame.
a. Accdez au noeud Client Tier > Swing/AWT et slectionnez l'lment Frame. Dans la
bote de dialogue Create Frame, entrez le nom de la classe OrderEntryFrame et
tendez javax.swing.JInternalFrame. Indiquez le titre Order, puis cliquez sur
le bouton OK.
Remarque : Vous pouvez slectionner la classe JInternalFrame en cliquant sur le
bouton Browse.
Remarque : Une fois que vous avez slectionn javax.swing.JInternalFrame
dans le champ Extends, le champ Title devient gris et vous ne pouvez pas y saisir de texte.
Pour contourner ce problme, vous pouvez soit entrer le titre dans le champ Title avant de
slectionner javax.swing.JInternalFrame dans le champ Extends, soit entrer le
titre l'aide du gestionnaire de proprits (Property Inspector) aprs avoir cr le cadre.
b. L'objet OrderEntryFrame gnr n'affiche pas le gestionnaire de prsentation ou le volet
de contenu souhait. Pour dfinir le gestionnaire de prsentation et ajouter un panneau au
volet de contenu, ouvrez OrderEntryFrame avec l'diteur d'interface graphique.
Remarque : Lorsque l'diteur d'interface graphique est activ (via l'onglet Design), la
fentre Property Inspector s'affiche galement, avec les proprits de l'objet slectionn
dans l'diteur.
c. Slectionnez l'objet frame en cliquant sur la barre de titre du cadre dans l'diteur
d'interface graphique ou sur le noeud libell this dans le volet de structure. (Vous
devrez peut-tre dvelopper le noeud UI pour voir les objets de la hirarchie de
conteneurs.) Dans la fentre Property Inspector, localisez la proprit layout et
slectionnez BorderLayout dans la liste d'options. (Remarque : La proprit layout se
trouve sous le noeud Visual.)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 16 : Utiliser Swing pour planifier la prsentation de
l'application (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 65
d. Examinez les lignes de code ajoutes ou modifies par JDeveloper dans votre classe en
cliquant sur l'onglet Source. Lors de la cration d'une interface graphique Swing avec
l'diteur de JDeveloper, il est judicieux d'afficher les modifications apportes au code
source afin de voir ce que vous devriez crire pour crer l'interface manuellement.
Supprimez la dclaration private de BorderLayout.
2. Ajoutez un composant JPanel au cadre.
a. Revenez la vue de conception. JDeveloper fournit une palette de composants dans la
barre d'outils (demandez au formateur, si ncessaire).
b. Dans la palette de composants (Component Palette) slectionnez Swing et le sous-groupe
Containers, cliquez sur l'icne JPanel, puis cliquez au centre du cadre dans l'diteur
d'interface graphique (ou cliquez sur le noeud libell this dans le volet de structure de
l'interface graphique). Vous ajoutez ainsi un panneau dans la zone centrale de la
prsentation BorderLayout.
Remarque : Si l'icne JPanel n'est pas visible, agrandissez la fentre Component Palette
en augmentant sa hauteur.
3. Divisez le panneau JPanel en deux sections l'aide d'un gestionnaire de prsentation
GridLayout, avec une colonne et deux lignes.
a. Slectionnez jPanel1 et affectez sa proprit layout la valeur GridLayout.
b. Dveloppez JPanel1 dans le volet de structure de l'interface graphique et slectionnez
l'objet gridLayout1. Dans le noeud Model, affectez la valeur 1 la proprit columns
et la valeur 2 la proprit rows.
4. En vous inspirant de l'illustration suivante, ajoutez un autre panneau dans la partie suprieure
du volet de contenu, et un volet de dfilement dans la partie infrieure.













a. Ajoutez un deuxime panneau dans la moiti suprieure (ou la premire ligne) du premier
panneau, en cliquant sur l'icne JPanel dans la palette de composants Swing, puis en
cliquant sur l'objet jPanel1 dans l'diteur d'interface graphique ou dans le volet de
structure.
Remarque : Vrifiez que le nouveau panneau se nomme jPanel2, et surtout qu'il est
situ sous jPanel1 dans la hirarchie.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 16 : Utiliser Swing pour planifier la prsentation de
l'application (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 66
b. Ajoutez une bordure en relief au nouveau panneau jPanel2 en slectionnant sa
proprit border dans le gestionnaire de proprits et en slectionnant Swing Border
dans la liste. Dans la bote de dialogue Border, slectionnez BevelBorder et le bouton
d'option RAISED, puis cliquez sur le bouton OK.
Remarque : jPanel2 doit occuper graphiquement la moiti suprieure de jPanel1.
c. Ajoutez un volet de dfilement dans la moiti infrieure (deuxime ligne) de jPanel1
en cliquant sur l'icne JScrollPane dans la palette de composants Swing, puis en
cliquant dans la partie infrieure de jPanel1. (Vous pouvez galement cliquer sur
l'objet jPanel1 dans le volet de structure afin d'ajouter l'objet JScrollPane.)
d. Utilisez le volet de structure pour vrifier que vous avez la hirarchie de conteneurs
suivante :











e. Enregistrez et compilez la classe OrderEntryFrame.
Modifier la classe OrderEntryMDIFrame afin qu'elle contienne un cadre
interne OrderEntryFrame
1. Pour voir comment se prsente le cadre interne lors de l'excution, modifiez le constructeur
dans OrderEntryMDIFrame afin de crer une instance de OrderEntryFrame, puis
rendez celle-ci visible. Procdez de la manire suivante :
a. Editez OrderEntryMDIFrame.java et ajoutez les lignes de code suivantes la fin
du constructeur :
OrderEntryFrame iFrame = new OrderEntryFrame();
iFrame.setVisible(true);
desktopPane.add(iFrame);
Remarque : Les limites (taille et position) du cadre interne doivent prsent tre dfinies.
Sinon, le cadre ne sera pas visible. Vous devez en outre modifier les dimensions du cadre
OrderEntryMDIFrame afin qu'il soit plus grand que le cadre interne
OrderEntryFrame initial.
b. Dans la mthode jbInit() de la classe OrderEntryMDIFrame, localisez
l'instruction suivante :
this.setSize(new Dimension(400,300));
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 16 : Utiliser Swing pour planifier la prsentation de
l'application (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 67
Remplacez ensuite les arguments de dimension par (700,500).
c. Dans OrderEntryFrame, ajoutez la ligne suivante la mthode jbInit() :
this.setBounds(0, 0, 400, 300);
d. Compilez et enregistrez OrderEntryMDIFrame et OrderEntryFrame.
e. Excutez l'application OrderEntry.java afin d'examiner les rsultats.
2. Remarquez que le cadre interne ne peut tre ni agrandi, ni rduit en icne, ni ferm. Apportez
les modifications ncessaires OrderEntryFrame afin d'activer ces fonctions.
a. Dans la mthode jbInit(), ajoutez les lignes de code suivantes afin de permettre
l'agrandissement, la rduction en icne et la fermeture du cadre interne :
this.setMaximizable(true);
this.setIconifiable(true);
this.setClosable(true);
b. Compilez et enregistrez les modifications apportes OrderEntryFrame.java.
c. Excutez l'application et observez les changements.
Ajouter des composants d'interface graphique OrderEntryFrame
1. Avant d'ajouter les composants d'interface graphique jPanel2 dans OrderEntryFrame,
affectez-lui le gestionnaire de prsentation null.
Remarque : Vous pouvez galement utiliser le gestionnaire JDeveloper XYLayout.
Dans les deux cas, JDeveloper utilise le positionnement et le dimensionnement absolus pour
les composants ajouts au panneau. Il est plus facile d'utiliser le positionnement absolu lors
de la cration de la prsentation initiale de l'interface graphique. Vous changerez nouveau
de gestionnaire de prsentation dans un prochain chapitre.
Utilisez l'image suivante comme guide afin d'obtenir les rsultats souhaits :











a. En mode Design, slectionnez l'option Swing dans la palette de composants. Ajoutez
ensuite un objet JLabel JPanel2 et affectez sa proprit text la valeur Order Id.
Si ncessaire, redimensionnez le libell afin de voir sa valeur. Quelles lignes de code ont
t ajoutes votre classe ?
Indice : Vous devriez trouver au moins cinq lignes de code (certaines d'entre elles dans la
mthode jbInit()). Essayez d'identifier les trois lignes qui rendent l'objet visible dans
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 16 : Utiliser Swing pour planifier la prsentation de
l'application (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 68
le panneau.
Remarque : La valeur setBounds peut tre modifie (si ncessaire) dans le code
source pour rendre le libell clairement visible.
b. Dans la page Swing de la palette de composants, slectionnez un composant
JTextField et ajoutez-le jPanel2 ( droite du libell).
Remarque : Les valeurs setBounds peuvent tre modifies si ncessaire.
c. Compilez et enregistrez OrderEntryFrame, puis excutez OrderEntry pour voir
les rsultats.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 69
Exercices - Chapitre 17

Exercice 17-1 : Ajouter des composants d'interface graphique
Objectif
Dans cet exercice, vous allez crer le menu et les composants graphiques permettant l'utilisateur
de grer la saisie d'une commande. L'application comprend un bouton permettant de rechercher le
client affect la commande, ainsi que des boutons permettant d'ajouter des produits la
commande ou d'en supprimer. Vous allez apprendre crer une application d'interface graphique
base sur Swing, en utilisant l'diteur d'interface graphique de JDeveloper pour construire cette
interface. Vous apprendrez galement grer les vnements lis aux composants Swing ajouts
l'application.
Remarque : Lorsque vous crez un composant d'interface graphique, JDeveloper le dclare
comme private, mais vous pouvez supprimer ce mot-cl si ncessaire.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que vous
souhaitez passer ce nouvel exercice, accdez au rpertoire les17, chargez l'application
OrderEntryApplicationLes17, puis continuez.
Interface graphique de l'application OrderEntry
La diapositive fournie dans le chapitre 17 de l'expos thorique contient une capture d'cran
illustrant l'aspect final de la fentre principale de l'application, OrderEntryMDIFrame, ainsi
qu'un exemple de cadre OrderEntryFrame pour une commande cre sous forme de cadre
interne.
Utiliser l'application
La fentre OrderEntryMDIFrame fournit le menu principal de l'application, partir duquel
l'utilisateur clique sur Order > New lorsqu'il veut crer une nouvelle commande pour un client.
La nouvelle commande doit crer le cadre interne OrderEntryFrame, ainsi qu'un nouvel objet
Order (dont l'ID dfinit le champ de texte Order Id du cadre).
Pour entrer les dtails relatifs au client, l'utilisateur saisit un ID dans le champ Customer Id, puis
il clique sur le bouton Find. L'vnement du bouton Find vrifie si le client existe ( l'aide de la
mthode DataMan.findCustomerById()). Le cas chant, le client est affect la
commande et les dtails le concernant s'affichent dans les champs appropris. Dans le cas
contraire, un message d'erreur s'affiche.
Pour ajouter des produits la commande, saisissez une valeur dans le champ Product ID et
cliquez sur le bouton Add. La recherche des produits est effectue l'aide de la mthode
DataMan.findProductById(). Les produits trouvs sont ensuite ajouts la commande
contenue dans les objets correspondant aux articles ajouts l'objet JList dans le volet infrieur
du cadre OrderEntryFrame. Plusieurs produits peuvent tre ajouts la commande. L'ajout
d'un produit qui existe dj incrmente la quantit de l'article.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-1 : Ajouter des composants d'interface graphique (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 70
Tches accomplir
En vous aidant de la capture d'cran ci-aprs, modifiez le menu du cadre
OrderEntryMDIFrame, puis ajoutez plusieurs composants Swing au cadre
OrderEntryFrame afin de rpondre aux besoins des utilisateurs :












Crer le menu du cadre OrderEntryMDIFrame
1. La structure de la barre de menus que vous devez ajouter la fentre principale est illustre
ci-aprs :

Utilisez l'diteur d'interface graphique de JDeveloper pour ajouter le menu Order et ses
options, conformment la capture d'cran prcdente.
Remarque : File > Exit existe dj.
a. Modifiez le cadre OrderEntryMDIFrame dans l'diteur d'interface graphique.
Dveloppez l'lment Menu dans le volet de structure, puis cliquez sur l'entre menuBar
afin d'afficher la structure de menu initiale dans la fentre de l'diteur.
b. Ajoutez le menu Order droite du menu File. Cliquez avec le bouton droit de la souris
sur le contour de zone situ droite du menu File, puis slectionnez l'option Insert Menu
dans le menu contextuel.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-1 : Ajouter des composants d'interface graphique (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 71
c. Le nouveau menu doit tre slectionn et affich en tant que jMenu1. Le menu tant
slectionn, remplacez son libell par dfaut par le texte Order, et appuyez sur la touche
Entre.
d. Enregistrez votre travail et compilez la classe en vrifiant qu'il n'y a aucune erreur de
compilation. Quelles sont les lignes ajoutes par JDeveloper la classe
OrderEntryMDIFrame ?
2. Ajoutez au menu Order des options et un sparateur, conformment au tableau suivant :
Texte de l'option de menu
New
Open
Close
<separator>
Print
a. Dans le volet de structure, cliquez sur l'option Order que vous venez de crer,
slectionnez le contour vide en bas du menu Order, puis entrez le libell New dans la zone.
Procdez de la mme manire pour ajouter les autres options de menu indiques dans le
tableau. Pour ajouter un sparateur (ligne sparant les options de menu), cliquez avec le
bouton droit de la souris et slectionnez Insert Separator dans le menu contextuel.
b. Enregistrez et compilez la classe. Excutez ensuite OrderEntry.java pour examiner
le menu.
Ajouter des composants OrderEntryFrame afin de constituer sa
structure graphique
1. Ajoutez des champs de texte et leurs libells pour les informations relatives aux clients. Ajoutez
un bouton Find pour rechercher un client partir de son ID. Ajoutez galement une zone dans la
partie infrieure du cadre pour l'affichage des informations relatives la commande.
a. Dans le panneau suprieur, ajoutez les composants JLabel et JTextField pour les
dtails relatifs l'objet Customer. (Ces composants se trouvent dans la liste Swing.)
Utilisez l'exemple de fentre de la page prcdente pour la prsentation. Crez des libells
et des champs de texte conformment au tableau suivant :
Proprit text de JLabel
Customer Id
Name
Address
Phone
Indice : L'alignement des composants d'interface graphique fonctionne mieux avec le
gestionnaire XYLayout, dans lequel l'alignement est effectu par rapport au premier
composant sur lequel vous cliquez. Slectionnez des composants supplmentaires en
maintenant la touche Maj ou Ctrl enfonce. Cliquez avec le bouton droit de la souris sur
un composant slectionn et slectionnez l'option Align dans le menu contextuel.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-1 : Ajouter des composants d'interface graphique (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 72
Si vous utilisez le gestionnaire de prsentation null, JDeveloper gnre des appels la
mthode setBounds() de chaque composant, avec un paramtre Rectangle qui
dfinit les coordonnes x et y ainsi que la largeur et la hauteur. Vous pouvez soit modifier
les paramtres (x, y, width, height) dans le constructeur Rectangle pour aligner et
dimensionner manuellement les composants, soit dfinir la proprit bounds de chaque
composant dans le gestionnaire de proprits.
b. Ajoutez un objet JButton droite du champ de texte Customer Id, puis affectez sa
proprit text la valeur Find. Enregistrez ensuite votre travail.
c. Ajoutez un composant JList au volet de dfilement dans le panneau infrieur du cadre
OrderEntryFrame. Ce composant de liste doit remplir toute la section infrieure du
cadre (cliquez simplement dans le volet infrieur : le composant JList s'agrandira pour
occuper la totalit du volet).
S'il vous reste du temps...
Les tapes suivantes visent ajouter au cadre des informations sur les commandes, mais aussi
ajouter et supprimer des produits. La procdure ressemble videmment beaucoup celle que vous
avez suivie pour ajouter les informations relatives aux clients. Vous pouvez donc sauter ces
tapes si vous manquez de temps. Pour examiner l'aspect du cadre OrderEntryFrame termin et le
fonctionnement de l'ajout de produit, ouvrez OrderEntryApplication17-2 et excutez
OrderEntry.java. Vous pouvez galement utiliser cette application pour commencer
l'exercice suivant.
1. Ajoutez les composants ncessaires la saisie des informations de la commande et l'ajout
de produits une commande.
a. Crez un objet JLabel et affectez sa proprit text la valeur Product ID. A droite de
ce libell, ajoutez un composant JTextField. Sous le libell et le champ de texte
Product ID, crez un composant JButton et affectez sa proprit text la valeur Add.
b. Dans la partie suprieure droite du panneau suprieur, ajoutez deux composants JLabel
pour la date de commande. Affectez la proprit text du premier libell la valeur Order
Date. Affectez la proprit text du deuxime libell une chane vide. Slectionnez
l'option Swing Border pour la proprit border, puis slectionnez la valeur LineBorder
dans la bote de dialogue Border. Choisissez une paisseur de 1 pour la bordure, si
celle-ci n'est pas dj dfinie.
c. Pour le total de la commande, ajoutez deux autres composants JLabel sous les libells
de date. Affectez la proprit text du premier libell la valeur Order Total. Affectez
une chane vide la proprit text du deuxime libell. Slectionnez l'option Swing
Border pour la proprit border, puis slectionnez nouveau la valeur LineBorder dans
la bote de dialogue Border. Choisissez une paisseur de 1 pour la bordure, si celle-ci n'est
pas dj dfinie.
d. Enregistrez et compilez la classe OrderEntryFrame.
e. Excutez l'application OrderEntry pour voir la prsentation de l'interface graphique dans
le cadre interne. Apportez rapidement quelques ajustements mineurs la prsentation de
l'interface graphique afin que tous les lments soient bien visibles.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 73
Exercice 17-2 : Ajouter le code de gestion des vnements
Objectif
Dans cet exercice, vous allez crer les dtails de saisie des commandes. Vous allez ajouter le
code de gestion des vnements pour le menu Order > New, ainsi que les boutons Find Customer
et Add Product.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si vous n'avez pas termin l'exercice prcdent ou que sa
compilation a chou, mais que vous souhaitez passer ce nouvel exercice, accdez au rpertoire
les17-2, chargez l'application OrderEntryApplicationLes17-2, puis continuez.
Tches accomplir
Dans l'exercice prcdent, vous avez cr les cadres qui affichent les informations relatives aux
clients et aux commandes. Vous devez prsent ajouter ces cadres les fonctionnalits qui
permettront l'utilisateur d'afficher une commande, de rechercher un client et d'ajouter un produit
une commande.
Ajouter le code de gestion des vnements du menu Order> New
1. Modifiez OrderEntryFrame.java dans l'diteur de code source afin de crer un objet
Order et d'afficher son tat initial dans les composants appropris. Procdez de la manire
suivante :
a. Crez une nouvelle variable d'instance pour l'objet Order :
Order order = null;
b. Ajoutez la mthode suivante afin de crer un nouvel objet Order et d'afficher son contenu
dans les composants appropris du cadre :
private void initOrder() {
order = new Order();
jTextField1.setText(
Integer.toString(order.getId()));
jLabel8.setText(
Util.toDateString(order.getOrderDate()));
jLabel10.setText(
Util.toMoney(order.getOrderTotal()));
}
Remarque : Les termes en caractres italiques dans le code prcdent reprsentent les
identifiants des libells et des champs de texte ajouts dans le dernier exercice. Si vous
n'avez pas ajout ces composants dans l'ordre des tapes de l'exercice, vous devez
modifier leurs identifiants en consquence dans le code. Par exemple, jTextField1
correspond au champ de texte Order Id. Pour vrifier l'identifiant que vous avez utilis,
slectionnez le champ Order Id dans la vue Design et examinez son identifiant dans le
gestionnaire de proprits.
c. Appelez la mthode initOrder() la fin de la mthode jbInit().
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-2 : Ajouter le code de gestion des vnements (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 74
d. Pour contrler les positions x et y de l'angle suprieur gauche du cadre lorsqu'il s'affiche,
dclarez les variables d'instance et de classe suivantes :
private static int x = 0;
private static int y = 0;
private static final int OFFSET = 20;
private static final int MAX_OFFSET = 200;
Crez ensuite la mthode suivante pour produire un effet de cascade mesure que de
nouveaux cadres sont crs :
private void setBounds() {
this.setResizable(true);
this.setBounds(x, y,
this.getWidth(), this.getHeight());
x = (x + OFFSET) % MAX_OFFSET;
y = (y + OFFSET) % MAX_OFFSET;
}
e. Ajoutez un appel de la mthode setBounds() la fin de la mthode jbInit(), aprs
l'appel de initOrder().
f. Ajoutez une autre mthode OrderEntryFrame pour en faire la fentre active, de la
faon suivante :
public void setActive(boolean active) {
try {
this.setSelected(active);
}
catch (Exception e) {}
this.setVisible(active);
if (active) {
this.toFront();
}
}
Remarque : Cette mthode sera appele par le gestionnaire d'vnements du menu
Order > New.
g. Compilez et enregistrez la classe OrderEntryFrame.
2. Modifiez OrderEntryMDIFrame.java afin de crer le code du gestionnaire
d'vnements pour la nouvelle option du menu Order.
a. Ouvrez OrderEntryMDIFrame.java dans l'diteur d'interface graphique.
Dveloppez le menu dans l'diteur graphique ou dans le volet de structure, puis
slectionnez New dans le menu Order.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-2 : Ajouter le code de gestion des vnements (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 75
b. Cliquez sur le noeud Events en bas de la fentre Property Inspector et cliquez dans la
zone de texte situe droite du premier vnement nomm actionPerformed. La
zone de texte affiche un bouton reprsentant des points de suspension. Cliquez sur ce
bouton pour afficher la bote de dialogue de gnration de l'vnement
actionPerformed. Notez le nom de la mthode d'action et acceptez les valeurs par
dfaut, puis cliquez sur le bouton OK.
Remarque : JDeveloper gnre le code du processus d'coute de l'vnement en tant que
classe interne anonyme (dans la mthode jbInit()) qui appelle la mthode nomme
dans la bote de dialogue de l'vnement. JDeveloper place le curseur dans l'diteur de
code, l'intrieur du corps vide de la mthode de gestionnaire d'vnements.
c. Dplacez les lignes suivantes du constructeur OrderEntryMDIFrame() vers le corps
de la mthode jMenuItem1_actionPerformed(), en les supprimant (ou en les
transformant en commentaires) pour rendre le cadre visible, de la faon suivante :
OrderEntryFrame iFrame = new OrderEntryFrame();
// iFrame.setVisible(true);
desktopPane.add(iFrame);
Ajoutez galement la ligne suivante, aprs avoir ajout le cadre au volet du bureau dans la
mthode jMenuItem1_actionPerformed :
iFrame.setActive(true);
d. Compilez la classe OrderEntryMDIFrame et enregistrez les modifications. Excutez
et testez l'application OrderEntry en slectionnant Order > New.
Remarque : Lorsque l'application dmarre, aucune fentre de commande ne doit tre
affiche. Fermez la fentre interne en cliquant sur son icne de fermeture (X).
Si vous manquez de temps...
Les tapes suivantes expliquent comment crer la gestion d'vnements pour le bouton Find
Customer. Si vous manquez de temps, ignorez ces tapes et ouvrez l'application
OrderEntryApplication17-2Sol fournie dans le dossier Solutions, puis excutez
OrderEntry.java pour examiner le fonctionnement de la gestion d'vnements.
Ajouter le code de gestion des vnements pour le bouton Find Customer
Dans cette partie du code, vous ajoutez la fonctionnalit de gestion d'vnements au bouton Find
pour pouvoir accder aux informations relatives un client valide.
1. Modifiez OrderEntryFrame.java en ajoutant le code qui effectue les oprations suivantes :
Tester si le champ de texte Customer ID contient une chane de longueur non nulle et
convertir celle-ci en un entier utilis dans la mthode
DataMan.findCustomerById() pour renvoyer un client valide. Si le champ
Customer ID est vide, ou s'il ne contient pas un nombre, la mthode
DataMan.findCustomerById() doit gnrer une exception
NotFoundException.
Afficher un message d'erreur l'aide de la classe javax.swing.JOptionPane.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-2 : Ajouter le code de gestion des vnements (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 76
Si le client est valide, associer l'objet Customer la commande et afficher les dtails du
client dans le champ appropri du cadre OrderEntryFrame.
La procdure est la suivante :
a. Slectionnez le bouton Find et cliquez sur l'onglet Events dans le gestionnaire de
proprits. Cliquez sur le bouton reprsentant des points de suspension pour gnrer le
squelette de code pour la gestion de l'vnement actionPerformed.
b. Dans le corps de la mthode jButton1_actionPerformed() gnre, ajoutez le
code suivant :
int custId = 0;
Customer customer = null;
if (jTextField5.getText().length() > 0) {
try {
custId = Integer.parseInt(jTextField5.getText());
customer = DataMan.findCustomerById(custId);
order.setCustomer(customer);
jTextField3.setText(customer.getName());
jTextField4.setText(customer.getAddress());
jTextField2.setText(customer.getPhone());
}
catch (NumberFormatException err) {
JOptionPane.showMessageDialog(this,
"The Customer Id: " + err.getMessage() +
" is not a valid number",
"Error", JOptionPane.ERROR_MESSAGE);
jTextField2.setText("");
}
catch (NotFoundException err) {
JOptionPane.showMessageDialog(this,
err.getMessage(),
"Error", JOptionPane.ERROR_MESSAGE);
jTextField2.setText("");
}
}
else {
JOptionPane.showMessageDialog(this,
"Please enter a Customer Id", "Error",
JOptionPane.ERROR_MESSAGE);
}
Remarque : Comme prcdemment, vrifiez soigneusement les variables en italiques
pour identifier les libells et les champs de texte corrects.
c. Compilez et enregistrez les modifications. Excutez l'application OrderEntry afin de
tester les modifications apportes au code (les ID des clients sont compris entre 1 et 6).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-2 : Ajouter le code de gestion des vnements (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 77
Autre exercice complmentaire : Ajouter le code de gestion des
vnements pour le bouton Add Product
Cet exercice consiste crire le code permettant d'ajouter des produits une commande.
1. Modifiez OrderEntryFrame.java en ajoutant le code qui effectue les oprations suivantes :
Lire l'ID de produit saisi et le fournir la mthode order.addOrderItem().
Mettre jour le champ Order Total aprs l'ajout de chaque produit.
Grer les erreurs de manire approprie.
La procdure est la suivante :
a. Slectionnez le bouton Add et crez son gestionnaire d'vnements
actionPerformed avec le code suivant :
Product p = null;
int prodId = 0;
if (jTextField6.getText().length() > 0) {
try {
prodId =
Integer.parseInt(jTextField6.getText();
p =
DataMan.findProductById(prodId);
order.addOrderItem(p.getId());
jLabel10.setText(

Util.toMoney(order.getOrderTotal()));
}
catch (Exception err) {
String message = err.getMessage();
if (err instanceof
NumberFormatException) {
message = "Product id '" + message +
"' is not a valid number";
}
JOptionPane.showMessageDialog(this,
message,"Error", JOptionPane.ERROR_MESSAGE);
jTextField6.setText("");
}
}
else {
JOptionPane.showMessageDialog(this,
"Please enter a Product Id",
"Error",JOptionPane.ERROR_MESSAGE);
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-2 : Ajouter le code de gestion des vnements (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 78
Remarque : Comme prcdemment, vrifiez soigneusement les variables en italiques
pour identifier les libells et les champs de texte corrects.
b. Compilez et enregistrez le code. Excutez l'application OrderEntry afin de tester le
code. Ajoutez des produits la commande (les ID de produit commencent 2000).
Avez-vous vu les produits ajouts la liste ? Si la rponse est non, expliquez pourquoi. Le
total de la commande a-t-il t mis jour ?
2. Modifiez la classe Order afin de prendre en charge l'interface graphique en remplaant le
type Vector de items par javax.swing.DefaultListModel. Ajoutez une
mthode la classe Order afin de renvoyer la rfrence au modle.
a. Modifiez la classe Order.java et remplacez la dclaration items de la faon
suivante :
// private ArrayList items = null;
doit devenir :
private DefaultListModel jList1 = null;
Remarque : Vous devrez importer javax.swing.DefaultListModel.
b. Dans le constructeur sans argument Order, crez l'objet DefaultListModel pour
initialiser la variable items, au lieu d'utiliser un Vector. Par exemple :
// items = new ArrayList(10);
jList1 = new DefaultListModel();
Dans la mthode addOrderItem(), mettez l'instruction suivante en commentaire :
//items.add(item);
Remplacez-la par :
jList1.addElement(item);
Dans la mthode showOrder(), transformez les instructions de boucle for en
commentaires :
/* for (Iterator it = items; ...) {
...
System.out.println(item.toString());
}*/
c. Ajoutez une mthode avec la signature indique ci-aprs afin de renvoyer la rfrence
items l'appelant :
public DefaultListModel getModel() { }
Remarque : Cette mthode sera utilise comme modle pour l'objet JList qui va ainsi
afficher dynamiquement les objets OrderItem mesure que des produits sont ajouts
la commande.
d. Modifiez OrderEntryFrame pour ajouter l'appel permettant d'utiliser la mthode dans
le bouton.
jList1.setModel(order.getModel());
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exercice 17-2 : Ajouter le code de gestion des vnements (suite)
Oracle Fusion Middleware 11g : Programmation Java A - 79
e. Compilez et enregistrez les modifications apportes la classe Order.
f. Enregistrez et compilez OrderEntryFrame, puis excutez l'application OrderEntry
afin de tester si les articles s'affichent dynamiquement dans la liste mesure qu'ils sont
ajouts.


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Oracle Fusion Middleware 11g : Programmation Java A - 80
Exercices - Chapitre 18
Exercice 18 : Dployer des applications Java
Il n'y a pas d'exercice associ ce chapitre.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Rappels sur le langage Java
B
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-2
Sortie sur la console
Les applications et les applets Java peuvent afficher des messages simples sur la
console, de la faon suivante :
System.out.println("This is displayed on the console");
Types de donnes
Oprateurs
boolean
Type boolen pouvant prendre la valeur true ou
false
byte Entier sign 1 octet
char Caractre Unicode (c'est--dire sur 16 bits)
short Entier sign 2 octets
int Entier sign 4 octets
long Entier sign 8 octets
float Fraction prcision simple, 6 chiffres significatifs
double Fraction prcision double, 15 chiffres significatifs


+ - * / % Oprateurs arithmtiques (% reprsente le reste)
++ -- Incrment ou dcrment de 1
result = ++i; signifie que la valeur est incrmente
de 1 avant d'tre affecte
result = i++; signifie que l'affectation est effectue
avant l'incrmentation
+= -= *= /= %= etc. Exemple : i += 2 est quivalent i = i + 2

&& AND logique. Exemple : if (i > 50 && i < 70)
Le deuxime test n'est effectu que s'il est ncessaire.
Utilisez & si le deuxime test doit toujours tre effectu.
|| OR logique. Exemple : if (i < 0 || i > 100)
Le deuxime test n'est effectu que s'il est ncessaire.
Utilisez | si le deuxime test doit toujours tre effectu.
! NOT logique. Exemple : if (!endOfFile)

== != > >= < <= Oprateurs relationnels
& | ^ ~ Oprateurs au niveau bit (AND, OR, XOR, NOT)
<< >> >>> Oprateurs de dcalage au niveau bit (dcalage
gauche, dcalage droite avec extension pour le signe,
dcalage droite avec remplissage de 0)
instanceof Teste si un objet est une instance d'une classe ou non.
Exemple :
if (anObj instanceof BankAccount)
System.out.println($$$);

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-3
Contrle du flux : if else
Les instructions if sont constitues de la faon dtaille ci-dessous (la clause
else est facultative). Les accolades {} sont ncessaires si le corps de la clause
if dpasse une ligne. Dans tous les cas, elles amliorent la lisibilit :
String dayname;

if (dayname.equals("Sat") || dayname.equals("Sun")){
System.out.println("Hooray for the weekend");
}
else if (dayname.equals("Mon")) {
System.out.println("I dont like Mondays");
}
else {
System.out.println("Not long for the weekend!");
}
Contrle du flux : switch
L'instruction switch est utilise pour comparer un entier (ou un caractre) une
liste fixe de valeurs :
int daynum;

switch (daynum) {
case 0:
case 6:
System.out.println("Hooray for the weekend");
break;
case 1:
System.out.println("I dont like Mondays");
break;
default:
System.out.println("Not long for the weekend!");
break;
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-4
Contrle du flux : Boucles
Java offre trois mcanismes de boucle :
int i = 0;
while (i < 100) {
System.out.println("Next square is: " + i*i);
i++;
}
for (int i = 0; i < 100; i++) {
System.out.println("Next square is: " + i*i);
}
int positiveValue;
do {
positiveValue = getNumFromUser();
}
while (positiveValue < 0);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-5
Dfinir des classes
Lorsque vous dfinissez une classe, vous dfinissez les attributs de donnes
(gnralement private) et les mthodes (gnralement public) d'un nouveau
type de donnes. La dfinition de la classe est place dans un fichier .java, de la
faon suivante :
// This file is Student.java. The class is declared
// public, so that it can be used anywhere in the program
public class Student {
private String name;
private int numCourses = 0;
// Constructor to initialize all the data members
public Student(String n, int c) {
name = n;
numCourses = c;
}
// No-arg constructor, to initialize with defaults
public Student() {
this("Anon", 0); // Call other constructor
}
// finalize() is called when obj is garbage collected
public void finalize() {
System.out.println("Goodbye to this object");
}
// Other methods
public void attendCourse() {
numCourses++;
}
public void cancelPlaceOnCourse() {
numCourses--;
}
public boolean isEligibleForChampagne() {
return (numCourses >= 3);
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-6
Utiliser des classes
Pour crer un objet et lui envoyer des messages :
public class MyTestClass {
public static void main (String[] args) {
// Step 1 - Declare object references
// These refer to null initially in this example
Student me, you;
// Step 2 - Create new Student objects
me = new Student("Andy", 0);
you = new Student();
// Step 3 - Use the Student objects
me.attendCourse();
you.attendCourse();
if (me.isEligibleForChampagne())
System.out.println("Thanks very much");
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-7
Tableaux
Les tableaux se comportent comme des objets. Ils sont crs et manipuls de la
faon suivante :
// Step 1 - Declare a reference to an array
int[] squares; // Could write int squares[];
// Step 2 - Create the array "object" itself
squares = new int[5]; // Creates array with 5 slots
// Step 3 - Initialize slots in the array
for (int i=0; i < squares.length; i++) {
squares[i] = i * i;
System.out.println(squares[i]);
}
Notez que les lments d'un tableau commencent [0]. Par ailleurs, les tableaux
ont une proprit length qui indique leur taille. Si vous dpassez par
inadvertance les limites d'un tableau, une exception est gnre lors de l'excution
et le programme s'arrte.
Remarque : Il est galement possible de configurer un tableau en utilisant la
syntaxe abrge suivante : String[] cities = {
"San Francisco",
"Dallas",
"Minneapolis",
"New York",
"Washington, D.C."
};
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-8
Hritage et polymorphisme
Une classe peut hriter de toutes les donnes et mthodes d'une autre classe. Les
mthodes de la superclasse peuvent tre redfinies dans la sous-classe. Tout
membre de la superclasse auquel vous souhaitez accder dans la sous-classe doit
tre dclar avec le modificateur d'accs protected. L'lment est ainsi
accessible aux sous-classes, ainsi qu'aux ventuelles classes du mme package.
public class Account {
private double balance = 0.0;
public Account(double initBal) {
balance = initBal;
}
public void deposit(double amt) {
balance += amt;
}
public void withdraw(double amt) {
balance -= amt;
}
public void display() {
System.out.println("Balance is: " + balance);
}
}
public class CheckAccount extends Account {
private int maxChecks = 0;
private int numChecksWritten = 0;
public CheckAccount(double initBal, int maxChk) {
super(initBal); // Call superclass ctor
maxChecks = maxChk; // Initialize our data
}
public void withdraw(double amt) {
super.withdraw(amt); // Call superclass
numChecksWritten++; // Increment chk. num.
}
public void display() {
super.display(); // Call superclass
System.out.println(numChecksWritten);
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-9
Classes abstraites
Une classe abstraite est une classe qui ne peut jamais tre instancie. Autrement
dit, elle ne peut jamais tre utilise pour crer un objet. Les classes abstraites sont
dfinies de la faon suivante :
// Abstract superclass
public abstract class Mammal {

}
// Concrete subclasses
public class Cat extends Mammal {

}
public class Dog extends Mammal {

}
public class Mouse extends Mammal {

}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-10
Mthodes abstraites
Une mthode abstraite est une mthode qui ne comporte pas de corps dans la
superclasse. Chaque sous-classe concrte est oblige de redfinir la mthode abstraite
et de fournir une implmentation, faute de quoi la sous-classe elle-mme est juge
abstraite car elle n'implmente pas toutes ses mthodes.
// Abstract superclass
public abstract class Mammal {
// Declare some abstract methods
public abstract void eat();
public abstract void move();
public abstract void reproduce();
// Define some data members if you like
private double weight;
private int age;
// Define some concrete methods too if you like
public double getWeight{} {
return weight;
}
public int getAge() {
return age;
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-11
Interfaces
Une interface est semblable une classe abstraite, avec des mthodes 100 %
abstraites et aucune variable d'instance. Une interface est dfinie de la faon
suivante :
public interface Runnable {
public void run();
}
Une classe peut implmenter une interface de la faon dtaille ci-aprs. Elle est
oblige de fournir une implmentation pour chaque mthode dfinie dans
l'interface, faute de quoi elle doit tre dclare abstract car elle n'implmente
pas toutes ses mthodes.
public class MyApp extends Applet implements Runnable {
public void run() {
// This is called when the Applet is kicked off
// in a separate thread

}
// Plus other applet methods

}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-12
Variables static
Une variable static est comme une variable globale pour une classe. Autrement
dit, il n'existe qu'une seule instance de la variable pour l'ensemble de la classe,
quel que soit le nombre d'objets. Les variables static sont dclares dans la
classe de la faon suivante :
public class Account {
private String accnum; // Instance var
private double balance = 0.0; // Instance var
private static double intRate = 5.0; // Class var

}
Mthodes static
Dans une classe, une mthode static est une mthode qui ne peut accder
qu'aux lments static. Elle ne peut accder aucune donne ou mthode non
static. Les mthodes static sont dfinies de la faon suivante dans une
classe :
public class Account {
public static void setIntRate(double newRate) {
intRate = newRate;
}
public static double getIntRate() {
return intRate;
}

}
Pour appeler une mthode static, utilisez le nom de la classe comme suit :
public class MyTestClass {
public static void main(String[] args) {
System.out.println("Interest rate is" +
Account.getIntRate());
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-13
Packages
Les classes lies peuvent tre places dans un package commun, de la faon
suivante :
// Car.java
package mycarpkg;
public class Car {

}
// Engine.java
package mycarpkg;
public class Engine {

}
// Transmission.java
package mycarpkg;
public class Transmission {

}
Importer des packages
Quiconque doit utiliser les classes de ce package peut importer tout ou partie des
classes du package, de la faon suivante :
import mycarpkg.*; // import all classes in package
ou
import mycarpkg.Car; // just import individual classes
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-14
Mot-cl final
Le mot-cl final peut tre utilis dans trois situations :
Classes final (par exemple, il n'est pas possible d'hriter de cette classe).
Mthodes final (par exemple, la mthode ne peut pas tre redfinie dans une
sous-classe).
Variables final (par exemple, la variable est constante et ne peut pas tre
modifie).
Voici quelques exemples :
// final classes
public final class Color {

}
// final methods
public class MySecurityClass {
public final void validatePassword(String password) {

}
}
// final variables
public class MyTrigClass {
public static final double PI = 3.1415;

}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-15
Traitement des exceptions
Le traitement des exceptions utilise cinq mots-cls en Java :
try Bloc de code o sont places les instructions pouvant gnrer une
exception.
catch Bloc de code dfinissant le traitement des erreurs.
finally Bloc de code facultatif aprs un bloc try, pour un traitement
inconditionnel.
throw Mot-cl utilis dans le code de bas niveau pour gnrer une exception.
Throws Mot-cl qui introduit la liste des exceptions qu'une mthode peut
gnrer.
Voici quelques exemples :
public class MyClass {
public void anyMethod() {
try {
func1();
func2();
func3();
}
catch (IOException e) {
System.out.println("IOException:" + e);
}
catch (MalformedURLException e) {
System.out.println("MalformedURLException:" + e);
}
finally {
System.out.println("This is always displayed");
}
}
public void func1() throws IOException {

}
public void func2() throws
MalformedURLException {

}
public void func3() throws IOException,
MalformedURLException {

}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

C
a
t
a
l
y
s
t

B
u
s
i
n
e
s
s

S
o
l
u
t
i
o
n
s

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

Vous aimerez peut-être aussi