Java 1.4
Java 1.4
v 1.4
Mohammed Lahmer (©2002-2023)
[Link]@[Link]
1
© M. Lahmer 2002-2023



SOMMAIRE
SOMMAIRE.............................................................................................................................................................2
1. Pr sentation du Langage ...........................................................................................................................4
1. Bref historique ..................................................................................................................4
2. Les caractéristiques du langage Java ................................................................................4
3. Kit de développement .........................................................................................................6
2. Structure du Langage ..................................................................................................................................9
1. La syntaxe ...................................................................................................................9
2. Classes et Objets .......................................................................................................12
2. Méthodes et variables de la classe ............................................................................14
3. Les packages .............................................................................................................15
4. Classes particulières .................................................................................................16
3. L’h ritage en Java ................................................................................................................................21
1. Principe de L’héritage ...............................................................................................21
2. Syntaxe de l’héritage ................................................................................................21
3. Polymorphisme ...............................................................................................................22
4. Classes et méthodes abstraites ........................................................................................23
5. Les interfaces ..................................................................................................................24
4. Les Collections .............................................................................................................................................25
1. Définitions ......................................................................................................................25
2. L’interface Collection .....................................................................................................26
3. La classe ArrayList .........................................................................................................27
4. L’interface Map...............................................................................................................28
5. Tri et Recherche dans des collections .............................................................................29
6. La gestion du temps (Date/Time) ...................................................................................30
4. Les entr es sorties............................................................................................................................31
1. Les flux java ...................................................................................................................31
2. La classe File ..................................................................................................................31
3. Les flux octets .................................................................................................................32
4. Les flux caractères ..........................................................................................................34
5. Les filtres ........................................................................................................................35
6. Sérialisation des objets ...................................................................................................35
6. Le graphique en Java .................................................................................................................................37
1. Graphique en Java...........................................................................................................37
2. Composants lourds/ légers ..............................................................................................39
3. Composants de base........................................................................................................40
4. Mise en page des composants dans un conteneur ...........................................................42
5. Traitement des événements .............................................................................................44
6. Les autres Composants graphiques.................................................................................47
7. JavaFX ...............................................................................................................................................................55
1. Introduction .....................................................................................................................55
2. Architecture .....................................................................................................................55
3. Application JavaFX .........................................................................................................56
4. Exemple ...........................................................................................................................59
5. ListView ..........................................................................................................................60
2
© M. Lahmer 2002-2023

é
é
é












































6. Text Style .........................................................................................................................61
7. Charts ...............................................................................................................................61
8 Acc s aux bases de donn es en JDBC .........................................................................................63
1. Principe ...........................................................................................................................63
2. Mise en œuvre ................................................................................................................63
3. PreparedStatement et CollablStatement ..........................................................................65
4. Les métadonnées.............................................................................................................66
9. Client / Serveur en RMI ..................................................................................................................67
1. Définition ........................................................................................................................67
2. Mise en œuvre ................................................................................................................67
3
© M. Lahmer 2002-2023

è
é










1. Présentation du Langage
1. Bref historique
■ 1993 : projet Oak (langage pour l' lectronique grand public)
■ 1995 : Java / HotJava
■ Mai 95 : Netscape prend la licence
■ Sept. 95 : JDK 1.0 b1
■ Déc. 95 : Microsoft se dit int resser
■ Janv. 96 : JDK 1.0.1
■ Eté 96 : Java Study Group ISO/IEC JTC 1/SC22
■ Fin 96 : RMI, JDBC, JavaBeans, ...
■ Fév. 97 : JDK 1.1
■ 98 : C’est la grande r volution JDK 1.2 ou java 2
Java 2
Spécification
J2ME J2SE J2EE
(Java 2 Micro Edition) (Java 2 Standard Editon) (Java 2 Enterprise Edition)
4
© M. Lahmer 2002-2023

f

é
é
é
é
é
à
é
é
é
é
é
f
é
é
é
é
2. Langage semi-compilé et semi-interprété
■ Un langage compil est un langage qui permet de cr er un ichier ex cutable partir d’un
programme source
■ Un langage interpr t est un langage ou le code source doit tre lu par un interpr teur
pour s’ex cuter.
■ Le code source est d’abords compil en byte code (attention ce n’est pas un code
machine) puis interpr t et ex cut par la machine virtuelle Java (JVM)
5
© M. Lahmer 2002-2023


é
é
é
é
É
é
é
é
é
é
é
à
é
é
é
é
é
é
é
è
è
é
é
è
f
é
ê
f
é
é
é
à
é
à
é
è
é
à
f
é
■ Compilateur contraignant (erreur si exception non g r e, si utilisation d’une variable non
affect e, ...).
■ Tableaux = objets (taille connue, d bordement : exception)
■ Contr le des cast l'ex cution. Seules les conversions s res sont automatiques.
3. Kit de développement
1. JVM / JRE
Les machines virtuelles java sont fournies gratuitement par Sun Microsystems. Elles sont
fournies sous forme de JRE (Java Runtime Environment) comprenant la machine virtuelle et les
package du noyau de java (APIs).
6
© M. Lahmer 2002-2023

é
è
f
é
é
é
é
ô
é
é
é
é
é
é
é
f
à
é
é
à
f
é
à
é
é
é
é
ô
é
è
é
f
é
é
é
é
û
é
é
f
è
à
Le JRE ne contient pas d'outils ou d'utilitaires pour compiler ou d buguer les applets ou les
applications.
Intel, Motorala, Ultra-sparc sont des exemples de processeurs int gr s dans des plate-formes
type : Pc, Mac ou Station Sun
2. Structure JSDK
JSDK (Java Software Developpement Kit) est compos de JRE et plusieurs outils.
Les outils
■ javac : compilateur de sources java
■ java : interpr teur de byte code
■ appletviewer : interpr teur d'applet
■ javadoc : g n rateur de documentation (HTML, MIF)
■ javah : g n rateur de header pour l'appel de m thodes natives
7
© M. Lahmer 2002-2023



é
é
é
é
é
é
é
é
é
é
é
■ javap : d sassembleur de byte code
■ jdb : d begueur
■ javakey : g n rateur de cl s pour la signature de code
■ rmic : compilateur de stubs RMI
■ rmiregistry : "Object Request Broker" RMI
Il existe d’autres Apis tierces que vous pouvez t l charger ind pendamment du Kit :
■ JFreeChart / JGraph : pour la génération des graphes tels que les histogrammes, les secteurs,….
■ SNMP4J : La supervision d’un r seau par le biais du protocole snmp
■ Jpcap : La capture des trames, paquets qui circules dans un r seau
■ [Link] : offre un support la majorit des protocoles r seaux (FTP/
FTPS, NNTP, SMTP(S), POP3(S), IMAP(S), Telnet, TFTP, …)
8
© M. Lahmer 2002-2023

é
é
é
è
é
f
é
é
è
é
é
f
è
é
f
é
f
à
é
é
f
é
é
é
é
é
é
2. Structure du Langage
1. La syntaxe
• La classe Helloworld est public, donc le ichier qui la contient doit s’appeler (en tenant
compte des majuscules et minuscules) [Link]
• Un ichier .java peut contenir la d inition de plusieurs classes mais une et une seule qui
doit tre publique
• Compilation avec javac c:\>javac [Link]
o cr e un ichier « [Link] » qui contient le bytecode, situ dans le m me
r pertoire que le ichier « .java »
• Execution avec java c:\>java HelloWorld
o interpr te le bytecode de la m thode main() de la classe HelloWorld
• [Link] doit tre dans le r pertoire courant ou dans un des emplacements
indiqu s par une option -classpath ou par la variable CLASSPATH
9
© M. Lahmer 2002-2023

é
é
f
ê
é
é
è
f
f
è
f
f
f
ê
f
à
ê
é
à
é
é
è
é
f
é
f
è
f
è
é
é
ê
■ Les variables peuvent tre d clar es n'importe o dans un bloc.
■ Les affectations non implicites doivent tre castées (sinon erreur la compilation).
int i = 258;
long l = i;
■ Valeurs par d faut
Si elles ne sont pas initialis es, les variables d’instance ou de classe (pas les variables
locales d’une m thode) reçoivent par d faut les valeurs suivantes :
boolean false
char ’\u0000’
Entier (byte short int long) 0 0L
Flottant ( loat double) 0.0F 0.0D
R f rence d’objet null
Les constantes
■ Une constante « enti re » est de type long si elle est suf ix e par « L » et de type
int sinon
■ Une constante « lottante » est de type loat si elle est suf ix e par « F » et de type
double sinon : .123587E-25F // de type loat
4. La conversion de type
■ En Java, 2 seuls cas sont autoris s pour les casts :
– entre types primitifs (suit les m mes r gles que C),
– entre classes m re/anc tre et classes illes (voir plus loin dans ce cours)
■ Un cast entre types primitifs peut occasionner une perte de donn es Par exemple, la
conversion d'un int vers un short
■ Un cast peut provoquer une simple perte de pr cision. Par exemple, la conversion d'un
loat vers un int
int i = 258;
long l = i; // ok
byte b = i; // error: Explicit cast needed to convert int to byte
byte b = 258; // error: Explicit cast needed to convert int to byte
byte b = (byte)i; // ok mais b = 2
10
© M. Lahmer 2002-2023
f

é
é
f
é
é
f
è
è
é
ê
ê
ê
é
é
é
é
ê
f
é
ê
f
è
f
é
ù
f
f
é
é
é
à
TROIS: while(...) {
if (...) continue UN;// Reprend sur la première boucle while
if (...) break DEUX;// Quitte la boucle for
continue;// Reprend sur la deuxième boucle while
}}
■ Une boucle for sp ciale a t rajout e depuis la version 1.5 a in de faciliter le parcours
des tableaux d’objet (voir exemple Tableau paragraphe 6.)
■ A partir de JDK 1.8, il est d sormais possible de faire un switch sur un type String
Switch (jour) {
case ’’Lundi’’ :
….
}
6. Les tableaux
E Java un tableau est trait comme un objet, donc il faut le d clarer et l’initialiser avant de
l’utiliser
■ Déclaration
int[ ] tab_of_int; // quivalent : int tab_of_int[ ];
Color rgb_cube[ ][ ][ ];
■ Création et initialisation
array_of_int = new int[42];
rgb_cube = new Color[256][256][256];
int[ ] primes = {1, 2, 3, 5, 7, 7+4};
tab_of_int[0] = 3 ;
■ Utilisation
int l = tab_of_int.length; // l = 42
L’indice commence 0 et se termine length - 1
int e = tab_of_int[50]; /* Lève une Exception ArrayIndexOutOfBoundsException*/
Exemple de programme qui af iche les l ments d’un tableau
public class AfficherTab {
public static void main(String[] args)
{
int [ ] T={10, 2, 15, -8, 7};
for (int el:T)
{
[Link](el);
}
}
}
11
© M. Lahmer 2002-2023

é
é
é
à
é
é
é
é
f
à
é
à
é
é
é
é
f
é
f
■ public static void arraycopy(Object src, int src_position,Object dst,
int dst_position, int length)
■ comparer 2 tableaux
■ La fonction equals() de la classe [Link]
■ public static boolean equals(double[] a1, double[] a2)
Les param tres de ligne de commande ou les arguments de main constituent un tableau de
cha nes de caract res
class Arguments {
public static void main(String[] args) {
for (int i=0; i < [Link]; i++)
[Link](args[i]);
}}
java Arguments toto titi //affichera toto puis titi
2. Classes et Objets
1. Objet / Classe
■ Un objet peut tre envisag de façon pragmatique comme constitu de deux parties :
■ Une partie de stockage physique (Objet)
■ Une partie descriptive (Classe)
■ L'Objet peut tre apparent une variable de type structure en C (record en pascal, ligne
d'une table dans une BD Relationnelle)
■ Une classe n'est pas destin e au stockage des donn es. C'est un type de donn es abstrait,
caract ris par des propri t s (attributs et m thodes) communes des objets et
permettant de cr er des objets poss dant ces propri t s.
Nom_Classe Point
Attributs float x
float y
2. Les constructeurs
Chaque classe a un ou plusieurs constructeurs qui servent
– cr er les instances
– initialiser l’ tat de ces instances
12
© M. Lahmer 2002-2023


î
é
é
é
è
ê
é
ê
é
è
é
à
é
é
é
é
à
é
é
é
é
é
à
à
é
é
Un constructeur a le m me nom que la classe et n’a pas de type retour. Lorsque le code d’une
classe ne comporte pas de constructeur, un constructeur sera automatiquement ajout par
Java. Pour une classe Nom_Classe, ce constructeur par d faut sera [public] Nom_Classe() { }
Exemple
Fichier [Link]
/** Modélise un point de coordonnées x, y */
public class Point {
private int x, y;// Les attributs
// Le constructeur
public Point(int x1, int y1) {
x = x1; y = y1;
}
//Methode
public double distance(Point p) {
return [Link]((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y));
}}
Fichier [Link]
/** Pour tester la classe Point */
class TestPoint {
public static void main(String[] args) {
Point p1 = new Point(1, 2);
Point p2 = new Point(5, 1);
[Link]("Distance : " + [Link](p2));
}}
Le mot cl new permet d’allouer de l’espace m moire au nouvel objet de type Point.
3. Les méthodes
Une m thode est l’ quivalent d’une fonction en C. Quand la m thode renvoie une valeur, on doit
indiquer le type de la valeur renvoy e dans la d claration de la m thode double
calculSalaire(int indice, double prime). Le pseudo-type void indique qu’aucune valeur n’est
renvoy e void setSalaire(double unSalaire)
13
© M. Lahmer 2002-2023

é
é
é
é
é
ê
ê
é
é
é
é
é
é
à
é
é
é
é
è
ê
é
Il est interdit de surcharger une m thode en changeant le type de retour par exemple, il est
interdit d'avoir ces 2 m thodes dans une classe :
■ int calculerSalaire(int)
■ double calculerSalaire(int)
1. Variables de classe
Certaines variables peuvent tre partag es par toutes les instances d’une classe. Ce sont les
variables de classe (modi icateur static en Java). Si une variable de classe est initialis e dans
sa d claration, cette initialisation est ex cut e une seule fois quand la classe est charg e en
m moire
Les variables static sont communes toutes les instances de la classe.
public class Employe {
private static int nbEmployes = 0;
// Constructeur
public Employe(String n, String p) {
nom = n;prenom = p;nbEmployes++;}}
14
© M. Lahmer 2002-2023

é
é
é
é
é
é
é
é
é
f
é
ê
é
é
è
é
é
à
é
é
é
é
é
à
é
è
é
é
é
à
é
é
è
é
2. Méthodes de classe
Une m thode de classe (modi icateur static en Java) ex cute une action ind pendante d’une
instance particuli re de la classe. Elle ne peut utiliser de r f rence une instance courante
(this)
■ static double tripleSalaire() {return salaire * 3;} // NON
La m thode main() est n cessairement static. Pourquoi ?
Pour d signer une m thode static depuis une autre classe, on la pr ixe par le nom de la
classe :
■ int n = [Link]();
On peut aussi la pr ixer par une instance quelconque de la classe ( viter car cela nuit la
lisibilit : on ne voit pas que la m thode est static) : int n = [Link]();
3. Les packages
Un package regroupe un ensemble de classes sous un m me espace de 'nomage'. Les noms
des packages suivent le sch ma : [Link] ...
Une classe employe appartenant au package [Link] doit se trouver dans le
ichier societe\travail\. L'instruction package indique quel package appartient la ou les
classe(s) de l'unit de compilation (le ichier). En dehors du package, les noms des classes
sont : [Link], sinon L'instruction import packageName permet
d'utiliser des classes sans les pr ixer par leur nom de package.
Encapsulation (public, protected et private)
15
© M. Lahmer 2002-2023
f

é
f
f
é
é
é
é
f
f
f
è
é
é
é
f
é
é
é
f
à
é
é
f
f
f
f
é
à
ê
é
é
ê
é
é
à
à
f
é
é
é
à
à
é
é
ê
à
class c1 {
public int A; Package P2
protected int B; PackageP1
int C;
private int D;} class c4 extends c1 {
...
}
A B C D
Accessible par c2 o o o -
Accessible par c3 o o o -
Accessible par c4 o o - -
Accessible par c5 o - - -
4. Classes particulières
16
© M. Lahmer 2002-2023


é
é
f
é
é
î
é
é
é
î
é
é
é
é
à
é
é
é
î
à
é
î
ê
û
è
é
é
f
é
char[] t={‘a’,’b’,’r’,’c’,’e’,’f’};
c = new StringBuffer(t[0]);
for (int i = 1; i < [Link]; i++) [Link](t[i]);
Fonctions de comparaison
La m thode equals() teste si 2 instances de String contiennent la m me valeur elle retourne
true ou false:
String s1, s2;
s1 = "Bonjour ";s2 = "les amis";
if ((s1 + s2).equals("Bonjour les amis"))
[Link]("Egales");
■ equalsIgnoreCase() pas de diff rence entre majuscule et minuscule
■ [Link](t) renvoie ( « signe » de s-t)
■ 0 en cas d’ galit de s et de t,
■ un nombre entier positif si s suit t dans l’ordre lexicographique
■ un nombre entier n gatif sinon
■ compareToIgnoreCase(t)
D’autres fonctions
Fonction Rôle
int length() Retourne la longueur de la cha ne appelante
String toString() Convertir un objet en String
char charAt(int i) Retourne le caract re la position i (0<= i < length())
String substring (int d, int f) Retourne tous les caract res entre la position d et f dans
une cha ne.
int indexOf(String sCh) Retourne la position de la sous cha ne sCh s’elle existe.
-1 si non
int indexOf(String sCh, Cherche la position de sCh partir de debut. elle
int debut) retourne sa position s’elle existe et – 1 si non
String [ ] split(String sep) Permet de d composer une cha ne en un tableau de
String en utilisant le s parateur sep
■ Exercice
Ecrire un programme Java qui permet de r cup rer le protocole, la machine, le
r pertoire et le nom du ichier une adresse Web [Link]
[Link]
17
© M. Lahmer 2002-2023
f

é
é
î
é
é
é
è
é
é
à
è
f
î
à
é
î
î
é
é
ê
les classes enveloppes offre des m thodes utilitaires (le plus souvent static) pour faire des
conversions entre types primitifs (et avec la classe String)
3. La classe System
Cette classe est tr s utile pour diverses op rations d'entr e et sortie, d' mission d'erreurs,
d'acc s aux propri t s du syst me, et bien d'autres fonctionnalit s relatives des t ches
syst me.
■ [Link](NomPropriete) : renvoie la valeur de la propri t system ci-
dessous quelques exemples de R cup ration des variables d’environnement :
- Nom Utilisateur Connect : [Link]("[Link]")
- R pertoire de travail : [Link]("[Link]")
- Nom OS install : [Link]("[Link]")
- Version OS install : [Link]("[Link]");
■ [Link](code retour) : arr t imm diat de la JVM
■ [Link]() : appel explicite du Garbage Collector ou (Ramasse Miettes). Le ramasse-
miettes (garbage collector) est une t che(job) qui travaille en arri re-plan et dont le r le
de lib rer la place occup e par les instances non r f renc es. Il intervient
automatiquement quand le syst me a besoin de m moire ou, de temps en temps, avec
une priorit faible (voir Thread). Avant la suppression d’un objet par le ramasse miettes,
le syst me appelle la m thode inalize() de la classe de l’objet (si elle existe).
class garbage{
static boolean gcok=false;/*devient true lorsque le GC est
appelé*/
static int count;
public garbage(){count++;}
public void finalize(){
18
© M. Lahmer 2002-2023

é
é
è
é
é
è
è
é
é
é
î
è
é
é
è
é
é
é
é
é
é
é
f
è
ê
è
è
é
é
â
é
é
é
é
é
é
é
è
é
é
é
é
é
à
ô
â
if(gcok==false)
[Link]("Appel GC:\n"+"Nombre d'instance
crees/supprimées : "+count);
gcok=true;}
public static void main(String[] args)
while(!gcok) {new garbage();}}}
19
© M. Lahmer 2002-2023

ê
ê
é
é
é
é
f
é
é
é
à
é
é
f
é
é
é
é
é
é
ê
é
é
é
é
à
à
Object getContent()
{
try
{
openConnection(); void openConnection()
} 1 throws IOException
catch(IOException e) {
{ openSocket();
... sendRequest(); 4 2
} 5 receiveResponse(); void sendRequest()
finaly { } throws IOException
... {
} 6 write(header);
... 3write(body);//ERROR
} }
Il est tout fait possible de d inir vos propres exceptions en cr ant une classe qui d rive de la
classe m re Exception.
public class MonException extends Exception
{ public MonException(String text)
{ super(text); }}
On utilise le mot cl throw pour lever une exception en instanciant un objet sur une classe
d riv e de la classe Exception : throw new MonException("blabla");
20
© M. Lahmer 2002-2023


é
é
è
à
é
é
f
é
é
3. L’héritage en Java
1. Principe de L’héritage
Le concept d'h ritage est un des concepts les plus importants de l’orient objet. C’est gr ce
ce dernier que la programmation objet est ce qui est aujourd’hui. Par d inition l’h ritage est
le fait de pouvoir utilis tout ce qui a d j t fait (r utilisation) et de pouvoir l'enrichir
(sp cialisation). Il indique toujours une relation de type "est un" ou « est une sorte de » :
- Un lapin est un animal,
- Un employ est une personne,
- Un pc est une machine.
En Java, chaque classe a une et une seule classe m re (pas d’h ritage multiple) dont elle
h rite les variables et les m thodes. Le mot clef extends indique la classe m re par exemple :
class B extends A{ }. La classe A s'appelle une classe m re, ou super-classe et la classe B qui
h rite de la classe A s'appelle une classe ille ou sous-classe.
Dans B on indique seulement ce qui a chang dans B par rapport au code de A ; on peut :
■ ajouter des variables, des m thodes et des constructeurs
■ redé inir des m thodes (exactement la m me signature et le m me type retour)
■ surcharger des m thodes (m me nom mais pas m me signature) (possible aussi
l’int rieur d’une classe)
Note : Si « B extends A », le grand principe est que tout B est un A
2. Syntaxe de l’héritage
1. Constructeur
La r gle g n rale est que pour construire un objet de la sous-classe il faut d’abord
construire un objet de la super-classe. Si un constructeur de la classe d riv e appelle
explicitement un constructeur de la classe de base, cet appel doit tre obligatoirement la
premi re instruction de constructeur. Il doit utiliser pour cela, le mot cl super.
3. Redé inition
Supposons que B h rite de A et que la m thode m() de A soit red inie dans B selon le
sch ma UML suivant :
21
© M. Lahmer 2002-2023
à

é
é
é
é
è
f
f
é
è
é
é
é
é
é
é
é
é
é
é
é
ê
f
é
ê
é
à
é
é
é
é
ê
è
é
è
ê
é
ê
é
f
é
é
f
é
é
è
é
é
â
à
B
A
String s
void m()
void m()
void p()
Un objet d'une classe d riv e peut toujours tre utilis au lieu d'un objet de sa super-
classe donc on peut crire par exemple :
■ A a = new B();
■ a.m();
Quelle m thode m() sera ex cut e celle de A ou celle de B ?. ventuellement celle de B
parce que le contenu de a est un objet de B.
4. Conversion
Un objet de type B est un A. Mais l’inverse n’est pas vrai. Une machine n’est pas
n cessairement un pc.
A a ; B b = new B(’’s’’);
■ Cas a=b; // vrai
L’ criture a.m(); est vrai parce que m() est d inie dans A. Mais a ne peut pas appeler
p() donc a.p() est fausse.
■ Cas b=a; // fausse
Dans ce cas un cast est n cessaire parce que a ne contient pas tous les l ments de b
(dans ce cas le champs s)
■ Cas b=(B) a ;// vrai lors de la compilation mais pas à l’exécution
3. Polymorphisme
Une m thode est dite polymorphe si elle a le m me nom dans plusieurs classes d riv es mais
pas la m me impl mentation.
22
© M. Lahmer 2002-2023

é
é
é
é
ê
é
è
ê
f
f
f
é
é
f
f
é
é
é
é
é
ê
f
é
é
f
é
é
f
é
é
f
é
ê
f
ê
é
é
ê
É
f
é
é
é
é
é
è
f
é
é
Figure
void dessiner()
Cercle Rectangle
23
© M. Lahmer 2002-2023



é
é
f
é
é
é
é
é
é
à
é
f
é
f
é
û
ê
é
• Une classe doit tre d clar e abstraite (abstract class) si elle contient au moins une
m thode abstraite. Mais il est possible de d clarer une classe abstraite sans aucune
m thode abstraite
• Il est interdit de cr er une instance d’une classe abstraite.
Une m thode static ne peut tre abstraite (car on ne peut red inir une m thode static)
5. Les interfaces
Une interface est une « classe » purement abstraite dont toutes les m thodes sont abstraites et
publiques (les mots-cl s abstract et public sont optionnels dans la d claration des m thodes).
En fait, une interface correspond un service rendu ou un comportement qui correspond aux
m thodes de l'interface
[public] interface NomDeLInterface [extends InterfaceMere] {}
Une interface ne peut contenir que :
■ des m thodes abstract et public
■ des d initions de constantes publiques (« public static inal »)
Une interface ne peut contenir de m thodes static, inal, synchronized , native ou default
(voire la in du chapitre)
Pour impl menter une interface, il faut rajouter la d claration de la classe concern e le mot
cl implements suivi du nom de l'interface. Une classe peut impl menter une ou plusieurs
interfaces (et h riter d'une classe)
Lorsqu’une classe C impl mente une interface I elle doit red inir toutes les m thodes de I, sinon
il faut la d clarer abstraite.
A partir de Java 8, il est d sormais possible de d inir dans une interface des m thodes de type
default et ou static. Une m thode de type default peut tre red inie mais une m thode static
non.
24
© M. Lahmer 2002-2023



é
é
é
é
é
é
f
é
à
é
é
f
é
ê
é
é
é
é
é
é
é
ê
à
é
é
é
à
f
f
f
é
ê
é
f
é
f
é
f
é
é
é
é
é
é
é
é
é
4. Les Collections
1. Définitions
Une collection est un objet qui contient d’autres objets par exemple, un tableau est une
collection. Le JDK fournit d’autres types de collections sous la forme de classes et d’interfaces
d inies dans le paquetage [Link] et organis es selon 2 hi rarchies d’interfaces principales
■ Collection correspond aux interfaces des collections proprement dites
■ Map correspond aux collections index es par des cl s ; un l ment d’une map est
retrouv rapidement si on conna t sa cl .
25
© M. Lahmer 2002-2023


é
f
é
î
é
é
é
é
é
é
é
2. L’interface Collection
2. Les itérateurs
Un it rateur (instance d’une classe qui impl mente l’interface Iterator) permet d’ num rer les
l ments contenus dans une collection. L’interface Collection fournit la m thode Iterator
iterator() qui renvoie un it rateur pour parcourir les l ments de la collection. Les principales
m thodes de Iterator sont :
■ boolean hasNext() : permet de v ri ier s'il y a un l ment qui suit
■ Object next() : retourne l’ l ment en cours et pointe sur l' l ment suivant
26
© M. Lahmer 2002-2023

é

é
é
é
f
é
é
é
é
é
é
é
é
é
é
é
f
é
é
é
é
é
é
é
é
é
é
é
é
é
é
Iterator it=[Link]();
while ([Link]()) // tant qu’ il y a un element non parcouru
{
Object o = [Link]();
//les opérations
}
3. La classe ArrayList
Est une classe qui impl mente l’interface List. Une instance de la classe ArrayList est une sorte
de tableau qui peut contenir un nombre quelconque d’instances de la classe Object. Les
emplacements sont rep r s par des nombres entiers ou des indices ( partir de 0). Les
principales m thodes en plus de celle de Collection sont
■ Object get(int indice)
■ int indexOf(Object obj)
■ void add(int indice, Object element)
■ void set(int indice, Object obj)
■ Object remove(int index)
Le type retour de la m thode get() est Object ; on doit donc souvent caster les l ments que l’on
r cup re dans un ArrayList si on veut les utilis s. Ce probl me ne se pose plus dans JDK 1.5 et
sup rieur si on adopte le principe de g n ricit ou de template :
1) sans template
ArrayList l = new ArrayList();// création d’une Liste l
[Link]("Ahmed"); // ajouter les objets ds l
[Link]("Mohamed");
[Link]("Mustapha");
[Link]("Taib");
[Link](l); // trier les objets de l
String Nom =(String)[Link](2) ; // on utilise le cast
2) avec template
2) ListIterator
27
© M. Lahmer 2002-2023

é
é
è
é
é
é
é
é
é
é
é
é
è
à
é
é
ListIterator est une interface qui h rite de Iterator, ainsi en plus des m thodes hasNext() et
next() elle dispose de deux autres m thodes suppl mentaires hasPrevious() et previous() qui
permettent de parcourir la liste dans le sens inverse.
List list = = new ArrayList();
// ajouter les objets ds List
ListIterator iterator = [Link]([Link]());
while ([Link]()) {
Object element = [Link]();
// traitement d'un élément
}
4. L’interface Map
Une Map est un ensemble de couples objets (cl , valeur) o Deux cl s ne peuvent tre gales au
sens de equals(). Dans l’algorithmique classique c’est une table de hachage (hashTable).
28
© M. Lahmer 2002-2023
é

é
é
é
é
é
é
é
é
é
é
é
é
é
è
é
à
é
é
ù
è
é
é
ê
é
é
Employe e2 = (Employe)[Link]("E369");
Collection elements = [Link]();
Iterator it = [Link]();
//Afficher tous les employes
while ([Link]()) {
[Link](
((Employe)[Link]()).getNom());}
Depuis java 8, il est possible lorsqu’une interface d inie une seule m thode on peut utiliser le
Lambda Langage .
[Link](employes,new Comparator(((Employe) o1, (Employe) o2)->{
return (int)([Link]()- [Link]());
});
29
© M. Lahmer 2002-2023

é
é
é
é
ê
é
é
é
é
é
é
é
é
é
f
é
ê
é
é
é
b) Recherche
Pour rechercher la position d’un objet dans une liste on peut utiliser les m thodes suivantes :
■ int binarySearch(List l, Object obj)
■ int binarySearch(List l, Object obj, Comparator c)
La liste doit tre tri e en ordre croissant suivant l’ordre naturel (interface Comparable) ou
suivant le comparateur, pour la 2 me m thode.
Avant JDK 1.8, on avait quelques classes pour l’obtention et le formatage de la date r partie :
[Link] (Date/Time), [Link] (Calendrier) , [Link] et
[Link] (formatage de la date).
Date now = new Date();
[Link](now); // Date time Système
// Utilisation DateFormat
DateFormat formatter = [Link](); // Date and time
String dateStr = [Link](now);
[Link](dateStr);
formatter = [Link](); // time only
[Link]([Link](now));
// Utilisation SimpleDateFormat
SimpleDateFormat simpleFormatter = new SimpleDateFormat("E [Link] 'at'
hh:mm:ss a zzz");
[Link]([Link](now));
A partir de JDK 1.8, on a introduit l’api [Link] qui concr tise toutes les fonctionnalit s de la
gestion du temps : [Link].*, [Link].*, [Link].*,
[Link].*
30
© M. Lahmer 2002-2023

ê
é
è
é
é
é
é
é
4. Les entrées sorties
2. La classe File
Cette classe fournie une d inition plateform-independent des ichiers et des r pertoires : Un
objet de type File peut repr senter un ichier ou un r pertoire. Elle permet de r aliser les
op rations de base sur les ichiers tels que le listage d’un r pertoire, la v ri ication de l’existence
d’un ichier, etc…. Une partie des m thodes de la File sont illustr es ci-dessous :
31
© M. Lahmer 2002-2023

é
é
é
é
f
à
é
é
f
f
f
f
f
f
f
f
f
f
é
f
è
f
é
ê
é
f
é
é
f
f
é
f
é
f
é
é
é
f
é
f
é
f
é
é
é
é
é
é
é
è
é
f
é
é
é
f
é
f
à
é
f
é
é
é
• la gestion des attributs "cach " et "lecture seule" (isHidden, isReadOnly)
• des m thodes qui renvoient des objets de type File au lieu de type String ( getParentFile,
getAbsoluteFile, getCanonicalFile, listFiles)
Les principaux constructeurs sont :
■ File(File rep, String nom)
■ File(String chemin)
■ File(String rep, String nom)
if ([Link]() ) {
[Link](" contenu du repertoire ");
File fichiers[] = [Link]();
for(int i = 0; i <[Link]; i++) {
if (fichiers[i].isDirectory())
[Link]("d-"+fichiers[i].getName());
else
[Link]("f-"+fichiers[i].getName());
}}}
32
© M. Lahmer 2002-2023

é
f
é
é
é
é
é
1. File(Input|Output)Stream
Ces classes permettent d'acc der en lecture et en criture un ichier
import [Link].*;
public class CopyBytes {
public static void main(String[] args) throws IOException {
File inputFile = new File("[Link]");
File outputFile = new File("[Link]");
FileInputStream in = new FileInputStream(inputFile);
FileOutputStream out = new FileOutputStream(outputFile);
int c;
while ((c = [Link]()) != -1)
[Link](c);
[Link](); [Link](); }}
33
© M. Lahmer 2002-2023



é
é
à
f
2. Data (Input|Output) Stream
Ce sont ces classes qui poss dent des critures ou lectures de plus haut niveau que de simples
octets (des entiers, des lottants, ...).
■ DataInputStream ,
public inal boolean readBoolean() throws IOException
public inal char readChar() throws IOException
public inal int readInt() throws IOException
…
■ DataOutputStream,
public inal void writeBoolean(boolean) throws IOException,
public inal void writeChar(int) throws IOException,
public inal void writeInt(int) throws IOException
Si vous crivez un entier avec writeInt() il faut le lire avec readInt(). Les cha nes de caract res
sont lues par la m thode readUTF(). Pour lire un ichier texte ligne par ligne on peut utiliser la
m thode readLine(). Cette derni re a t d pr cier et donc vous pouvez la remplacer par la
m thode de BuffredReader comme suit :
File inputFile = new File("[Link]");
DataInputStream in = new DataInputStream(inputFile) ;
BufferedReader brin = new BufferedReader(in) ;
String L=[Link]();
34
© M. Lahmer 2002-2023


é
é
f
f
f
f
f
f
é
é
f
è
è
é
é
é
é
é
é
f
è
î
è
import [Link].*;
public class Copy {
public static void main(String[] args) throws IOException {
File inputFile = new File("[Link]");
File outputFile = new File("[Link]");
[Link]();
[Link]();
}}
5. Les filtres
Un iltre permet de s lectionner les ichiers qui v ri ient certains crit res. En Java un iltre est un
objet d'une classe qui impl mente l'interface FilenameFilter. Cette classe doit donner une
d inition de la m thode public boolean accept(File rep, Stringnom) et seuls les noms de ichiers
qui renvoie true par cette m thode seront af ich s.
import [Link].*;
class Filtre implements FilenameFilter {
public boolean accept(File rep, String nom) {
if ([Link](".java")) return true;
return false;}
//dans une classe de test
String nomFics[ ] = (new File(rep)).list(new Filtre());}
35
© M. Lahmer 2002-2023


é
é
f
f
é
é
é
é
é
é
é
f
f
é
é
ê
f
é
é
é
è
é
f
f
Pour indiquer que les objets d'une classe peuvent tre persistants on indique que cette classe
impl mente l'interface Serializable.
Public class A implements Serializable{
// attributes sérializables
//…}
Certaines classes sont par d faut s rializable (String et Date). Les lux Objets en java
(Object(Input|Output)Stream) permettent de lire et crire des objets s rialisables.
// Ecriture
FileOutputStream fos = new FileOutputStream("tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
[Link]("Today");
[Link](new Date());
[Link]();
// Lecture
FileInputStream fis = new FileInputStream("tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
String today = (String)[Link]();
Date date = (Date)[Link]();
Par d faut, tous les champs d’un objets sont s rialis s (y compris private) Cela peut poser des
probl mes de s curit . Alors il existe 3 solutions possibles:
■ R crire les m thodes writeObjet() et readObject()
■ Utiliser le mot cl transient permet d'indiquer qu'un champs ne doit pas tre
s rialis : private transient passwd;
36
© M. Lahmer 2002-2023

é
é
é
é
è
é
é
é
é
é
é
é
é
é
ê
é
é
é
f
ê
6. Le graphique en Java
1. Graphique en Java
1. Paquetages de base
Une interface graphique est form e d’une ou plusieurs fen tres qui contiennent divers
composants graphiques (widgets) tels que
■ boutons
■ listes d roulantes
■ menus
■ champ texte, etc...
Les interfaces graphiques sont souvent appel s GUI d’apr s l’anglais Graphical User Interface.
L’utilisation d’interfaces graphiques impose une programmation « conduite par les
v nements ». On peut distinguer deux packges de base pour la r alisation des GUI en java :
[Link] (Abstract Window Toolkit, JDK 1.1) et [Link] (JDK 1.2) qui font partie de JFC (Java
Foundation Classes).
Techniquement Swing est construit au-dessus de AWT
■ m me gestion des v nements
■ les classes de Swing h ritent des classes de AWT
37
© M. Lahmer 2002-2023
é


ê
é
é
é
é
é
é
é
è
ê
é
3. Les principaux composants swing
Tous les composants de AWT ont leur quivalent dans Swing en plus joli et avec plus de
fonctionnalit s. Syntaxiquement un objet swing est un objet awt avec un J comme pr ixe ainsi
une tiquette Label en awt devient un JLabel en swing. En plus Swing offre de nombreux
composants qui n’existent pas dans AWT. La igure ci-dessous illustre quelques exemples de ces
composants.
import [Link].*;
public class HelloWorldSwing {
//Déclaration d’une fenêtre et d’une étiquette.
JFrame frm;
JLabel lbl;
public void GUI() {
//Création et initiation de la fenêtre.
frm = new JFrame("HelloWorldSwing");
//création d’une étiquette "Hello World".
lbl = new JLabel("Hello World");
//être sure d’avoir une bonne décoration v1.4.
[Link](true);
//Fermer l’application dès qu’on clique sur le bouton fermer
[Link](JFrame.EXIT_ON_CLOSE);
//ajouter le label à la fenêtre
[Link](lbl);
//Ajuster la taille de la fenêtre à la taille de ses composants
[Link]();
//Afficher la fenêtre.
[Link](true); }
}
class Test{
public static void main(String[] args) {
( new HelloWorldSwing()). GUI(); }
}
38
© M. Lahmer 2002-2023


é
é
é
f
é
f
2. Composants lourds/ légers
Pour af icher des fen tres (instances de JFrame), Java s’appuie sur les fen tres fournies par le
syst me d’exploitation h te dans lequel tourne la JVM, on dit que les JFrame sont des
composants lourds. Au contraire de AWT qui utilise les widgets du syst me d’exploitation pour
tous ses composants graphiques (fen tres, boutons, listes, menus, etc.), Swing ne les utilise que
pour les fen tres de base « top-level ». Les autres composants, dits l gers, sont dessin s dans ces
containers lourds, par du code « pur Java »
1. Les conteneurs
Pour construire une interface graphique avec Swing, il faut cr er un (ou plusieurs) container
lourd et placer l’int rieur les composants l gers qui forment l'interface graphique.
Méthode Rôle
component add(Component comp) pour ajouter le composant sp ci i la in du
conteneur
39
© M. Lahmer 2002-2023

é
é
è
f
f
é
f
ê
ê
à
ê
é
ê
ô
é
f
é
é
f
à
é
ê
à
f
é
à
é
é
é
è
é
é
ê
é
void remove(int index) Supprime le composant situ la position index
void remove(Component comp) Supprime le composant sp ci i
void removeAll() Supprime tous les composants
void setLayout(LayoutManager mgr) D init le Layout (Mise en page) de ce conteneur
void paint(Graphics g) Pour dessiner
void repaint() Met jour le dessin du conteneur
2. La fenêtre JFrame
//Centrage de la fenêtre
Toolkit tk = [Link]();
Dimension d = [Link]();
int hauteurEcran = [Link];
int largeurEcran = [Link];
//Ajuster la taille et la position de la fenêtre.
[Link](largeurEcran/2, hauteurEcran/2);
[Link](largeurEcran/4,hauteurEcran/4);
3. Composants de base
1. Etiquette JLabel
Avec un Jlabel, on peut cr er un texte « tiquette » et/ou une image. On peut galement int grer
du HTML, sp ci ier la position du texte par rapport l’image ou sp ci ier l’emplacement par
rapport son conteneur. Quelques m thodes publiques de cette classe :
■ JLabel(String, Icon, int) // Création d’un JLabel
■ void setText(String) // Modi ie le texte du JLabel
■ String getText() // retourne le texte du Jlabel
■ void setIcon(Icon) et Icon getIcon()
■ // spéci ier la position du texte par rapport à l’icone
■ void setHorizontalTextPosition(int)
■ void setVerticalTextPosition( int)
40
© M. Lahmer 2002-2023

é
f
à
é
f
à
é
é
f
ê
é
é
à
f
é
f
à
é
é
é
ê
é
é
é
é
é
è
à
è
ê
é
é
f
è
é
é
é
é
é
é
é
■ void setToolTipText(String) //associe un info bulles
2. Bouton JButton
Comme le JLabel, on peut cr er un JButton avec un texte (bien videment HTML) et ou une ic ne.
//Création d’un Bouton avec icone
JButton precedent = new JButton("Precedent",leftButtonIcon);
//Création d’un Bouton avec texte HTML
new JButton("<html><h1>Ligne 1</h1></html>");
//positionnement du texte / à l’Icone
[Link]([Link]);
//Associer un raccourcis clavier au bouton ici p
[Link](KeyEvent.VK_P);
//associer une action à un bouton
[Link]("disable");
Quelques m thodes utiles
■ void setText(String) et String getText()
■ void setIcon(Icon)et Icon getIcon()
■ char getMnemonic() String getActionCommand()
■ void setEnabled(Boolean)
41
© M. Lahmer 2002-2023

f
é
f
f
é
à
f
f
é
è
é
é
è
ô
■ JTextPane : documents avec plusieurs polices et des images et composants inclus (pas
tudi dans cette partie du cours)
1. FlowLayout
Quand un conteneur utilise FlowLayout, les composants sont arrang s dans l’ordre de leur ajout
dans le conteneur, depuis le haut, de gauche droite. On ne passe la prochaine ligne que quand
42
© M. Lahmer 2002-2023
é


é
é
à
è
à
é
à
f
é
é
l’espace restant sur la ligne n’est plus suf isant pour contenir le composant. Il est utilis par
d faut dans les applets.
2. BorderLayout
Quand on ajoute un composant un contenaire qui utilise BorderLayout, on sp ci ie la r gion
dans laquelle on veut le positionner. Si la r gion n’est pas sp ci i e, il le positionne
automatiquement dans le centre. Les 5 r gions utilis s par un BorderLayout sont :NORTH, WEST,
CENTER, EAST et SOUTH
3. GridLayout
Le GridLayout arrange les composants dans un nombre donn de colonnes et de lignes. Il
commence en haut gauche, et passe la colonne suivante, et ainsi de suite, jusqu’ la derni re
43
© M. Lahmer 2002-2023



é
à
à
à
é
f
é
é
é
é
f
é
é
à
f
é
é
è
colonne, puis passe la deuxi me ligne de la premi re colonne, … etc. Le nombre de colonnes et
de lignes est sp ci i dans les arguments du constructeur :
new GridLayout(nombre_ligne, nombre_colonnes)
Le nombre de colonnes et de lignes ne peuvent pas tre tous les deux des z ros. Si l’un ou l’autre
est un z ro, il est interpr t comme d terminer par le nombre des composants.
1. principe
L'utilisateur utilise le clavier et la souris pour intervenir sur le d roulement du programme. Le
syst me d’exploitation engendre des v nements partir des actions de l’utilisateur ensuite le
programme doit lier des traitements ces v nements. On distingue deux types d’ v nement
Bas Niveau :
■
■ appui sur un bouton de souris ou une touche du clavier
■ rel chement du bouton de souris ou de la touche
■ d placer le pointeur de souris
■ Logique
■ frappe d'un A majuscule
■ clic de souris
■ choisir un l ment dans une liste
Le JDK utilise une architecture de type « observateur - observ ». Les composants graphiques
(comme les boutons) sont les observ s. Chacun de ces composants a ses observateurs (ou
couteurs, listeners). Ces couteurs sont pr venus par le composant graphique d s qu’un
v nement qui les concerne survient sur ce composant. Le code de ces couteurs ex cute les
actions effectuer en r action l’ v nement.
44
© M. Lahmer 2002-2023

é
é

é
é
â
è
é
à
é
é
é
f
é
à
é
é
é
é
è
à
é
é
à
à
é
é
é
é
é
é
é
à
è
ê
é
é
é
é
é
é
è
é
2. Classes d’événements
3.
Ecouteur Composant
ActionEvent JButton, JList, JTextField, JMenuItem and its
ActionListener derivatives including JCheckBoxMenuItem,
addActionListener( ) JMenu, and JpopupMenu.
removeActionListener( )
45
© M. Lahmer 2002-2023

é
é
é
é
é
é
é
3. Ecouteur vs Adaptateur
Pour viter au programmeur d’avoir implanter toutes les m thodes d’une interface
« couteur », AWT fournit des classes (on les appelle des adaptateurs), qui impl mentent toutes
ces m thodes. Le code des m thodes ne fait rien. Ça permet au programmeur de ne red inir
dans une sous-classe que les m thodes qui l’int resse.
Les classes suivantes du paquetage [Link] sont des adaptateurs : KeyAdapter,
M o u s e Ad a p te r , M o u s e M o t i o n Ad a p te r , Fo c u s Ad a p te r , Co m p o n e n t Ad a p te r ,
WindowAdapter.
Supposons que vous voulez traiter le clique de la souris donc il suf it d’impl menter le
traitement de la m thode mouseClicked comme suit :
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
[Link](0);}});
Mais si vous utilisez un Listener au lieu d’un Adapter il faut impl menter toutes les m thodes de
l’interface MouseListener.
46
© M. Lahmer 2002-2023

é
é
é
é
é
é
é
é
é
à
é
é
è
é
é
é
f
é
é
é
à
é
f
■ clic sur un bouton
■ return dans une zone de saisie de texte
■ choix dans un menu
Ces v nements sont tr s fr quemment utilis s et ils sont tr s simples traiter. Un objet
ecouteur int ress par les v nements de type « action » (classe ActionEvent) doit appartenir
une classe qui impl mente l’interface [Link]. L’exemple suivant af iche
le nombre de clique sur le bouton ok dans le bouton lui-m me.
//Fenetre est un écouteur de ActionEvent
class Fenetre extends JFrame implements ActionListener{
int nbClique=0;
public Fenetre(){
JButton ok=new JButton(’’OK’’+nbClique);
//inscription du bouton ok auprès de l’écouteur
[Link](this);
getContentPane().add(ok);}
Depuis java 8, il est possible lorsqu’une interface d inie une seule m thode d’utiliser le Lambda
Langage .
[Link](e ->{nbClique++;
[Link](’’OK’’+nbClique);});
47
© M. Lahmer 2002-2023

tt
é
é
à
é
é
é
è
é
é
é
é
é
é
f
ti
ê
è
ê
é
é
à
é
à
f
à
cbc. addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e)
{
// faire quelques choses}}) ;
JRadioButton
Dans awt, les boutons radio sont des checkboxs qui appartiennent au m me CheckboxGroup.
Swing offre un nouveau composant qui est JRadioButton et qu’on peut est ajout un
ButtonGroup. Comme CheckboxGroup, le ButtonGroup est un composant logique qui n’a aucun
effet visuel
ButtonGroup Payement = new ButtonGroup();
JRadioButton btrCheque = new JRadioButton("Chèque");
JRadioButton btrEspece = new JRadioButton("Espèce");
// ajouter le bouton au groupe
[Link] (btrCheque);
[Link] (btrEspece);
[Link](true); [Link](E);
48
© M. Lahmer 2002-2023

é
ê
é
é
é
f
f
é
à
é
é
é
é
é
é
é
é
é
é
é
à
ê
é
é
é
à
Liste non modi iable JList
Une JList permet d’af icher des valeurs sous forme d’une ou plusieurs colonnes et est
g n ralement int gr e dans une JScrollPane. Une JList est un composant qui impl mente le
Mod le MVC l’instar de JTable, JTree,…
• Création d’une JList
• Quelques méthodes
Le plus important dans une JList est de pouvoir r cup rer l’ l ment ou les l ments
s lectionn s. Pour cela plusieurs m thodes sont disponibles :
Méthodes Rôles
int getSelectedIndex() R cup rer l’indexe de l’ l ment s lectionn
int getMinSelectionIndex() R cup rer l’indexe minimal est maximal de la s lection
int getMaxSelectionIndex()
int[] getSelectedIndices() R cup rer tous les indexes s lectionn s dans un tableau
en ordre croissant
Object getSelectedValue() R cup rer l’objet s lectionn au lieu de l’indice,
n’oublier pas de faire le cast
Object[] getSelectedValues() R cup rer les objets s lectionn s dans un tableau en
ordre croissant
L’utilisation standard d’une liste est de demander l’utilisateur de cliquer sur un bouton
lorsqu’il a ini de faire ses choix dans la liste. Par ailleurs Il est rare d’ crire un couteur de liste
et on r cup re alors la s lection de l’utilisateur par une des m thodes pr sent es ci-dessus.
Sinon, La classe d'un couteur de liste doit impl menter l'interface ListSelectionListener qui
contient la m thode void valueChanged(ListSelectionEvent e).
49
© M. Lahmer 2002-2023




é
é
é
é
é
é
é
é
è
é
é
é
é
é
é
é
f
è
à
é
f
é
é
é
é
é
é
f
é
é
é
é
é
é
é
é
é
é
é
à
é
é
é
é
é
é
é
é
é
é
é
é
• Modèle de JList
On peut cr er une JList en l’associant mod le qui fournit les donn es af ich es par la liste :
public JList(ListModel dataModel). ListModel est une interface dont le corps est ci-
dessous :
Pour crire une classe qui impl mente ListModel, le plus simple est d'h riter de la classe
abstraite AbstractListModel qui impl mente les 2 m thodes de ListModel qui ajoutent et
enl vent les couteurs. Les plus simples ont un mod le de la classe DefaultListModel qui
h rite de la classe AbstractListModel et offre des m thodes d’ajout, de suppression et de
r cup ration des l ments de la JList.
Exemple
ListModel pays = new DefaultListModel();
[Link]("Maroc");
[Link]("France");
[Link]("Italie");
[Link]("Espagne");
JList liste = new JList(pays);
• Création d’un nouveau modèle
Pour cr er un nouveau mod le de JList il suf it d’ tendre la classe AbstractListModel et
d’impl menter les m thodes dont vous avez besoins.
import [Link].*;
class ProduitModel extends AbstractListModel
{
public Vector produits;
public ProduitModel()
{produits = new Vector();}
public int getSize(){return [Link](); }
public Object getElementAt(int j)
{return [Link](j);}
public void addElement(Object a)
{[Link](a);
[Link](this,0,getSize()-1);
}}
50
© M. Lahmer 2002-2023

é
é
è
é
é
é
é
é
f
f
é
é
é
é
è
é
é
é
é
à
é
f
è
f
ê
f
é
f
è
é
é
é
f
é
é
è
d'une information sous forme de texte, showInputDialog. JDialog (composant lourd) est
utilis e pour les cas non pr vues par JOptionPane .
Les arguments complets de JoptionPane sont :
■ Component frame // associée à la boite de dialogue
■ Object message // message à af icher
■ String titre // le titre de la boite de dialogue
■ int TypeBouton // spéci ier les boutons à faire apparaître
■ int TypeIcone // détermine l’icône à af icher
■ Object[] options // le message à af icher sur chaque bouton
■ Object initialValue // le bouton sélectionné par défaut
Pour af icher un message d’erreur :
[Link](null, "Erreur de saisie", "alert",
JOptionPane.ERROR_MESSAGE);
Pour af icher un message de con irmation avec deux boutons oui/non par d faut
[Link] irmDialog(null,
"Voulez vous vraiment Quitter", "Quitter", JOptionPane.YES_NO_OPTION);
On peut indiquer un type de message qui indiquera l'ic ne af ich e en haut, gauche de la
fen tre (message d'information par d faut)
■ JOptionPane.INFORMATION_MESSAGE
■ JOptionPane.ERROR_MESSAGE
■ JOptionPane.WARNING_MESSAGE
■ JOptionPane.QUESTION_MESSAGE
■ JOptionPane.PLAIN_MESSAGE (pas d’icône)
Les types de boutons af icher d pendent de la m thode appel e :
■ showMessageDialog : bouton Ok
■ showInputDialog : Ok et Cancel
■ showCon irmDialog : d pend du param tre pass ; les diff rentes possibilit s
sont :
■ DEFAULT_OPTION
■ YES_NO_OPTION
■ YES_NO_CANCEL_OPTION
■ OK_CANCEL_OPTION
■ showOptionDialog : selon le tableau d'objet pass en param tres (vous pouvez
franciser le texte af icher sur les boutons)
51
© M. Lahmer 2002-2023

ê
é
f
f
f
à
f
à
f
f
é
f
é
f
f
é
f
é
f
è
é
é
é
ô
é
è
é
f
é
é
é
à
String [] options={"oui","non"};
int n =
[Link](this,
"voulez vous vraiment Quitter?","Quitter",
JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,
null,options,options[0]);
if(n==1) [Link]();
Les Menus
Le mod le d’utilisation des menu swing est peut pr t identique celui des awt. Les classes
de menu (JMenuItem, JCheckBoxMenuItem, JMenu, et JMenuBar) sont toutes des sous
classe de Jcomponent. Donc on peut placer un JMenuBar dans conteneur par setMenuBar().
On peut associer une ic ne un JMenuItem. JPopupMenu ou Les menus pop-up sont des
menus qui apparaissent la demande (click bouton droit de la souris)
Exemple de construction de Menu
On va cr er un menu Fichier avec trois options (nouveau, ouvrir et fermer).
//Création d’une barre de menu
JMenuBar jmb = new JMenuBar();
//Création d’un menu fichier
JMenu fichier = new JMenu ("Fichier");
[Link](KeyEvent.VK_F);
//Ajouter des éléments au menu Fichier
JMenuItem itemNew,itemOpen,itemClose;
itemNew = new JMenuItem ("Nouveau") ;
itemOpen = new JMenuItem ("Ouvrir") ;
itemClose =new JMenuItem ("Fermer");
[Link] (itemNew);
[Link] (itemOpen);
//Ajout d’un séparateur de menu
[Link]();
52
© M. Lahmer 2002-2023



è
é
ô
à
à
à
ê
à
[Link](itemClose) ;
//Ajouter le menu fichier à la barre de menu
[Link] (fichier);
//Ajouter le menu à la fenêtre
[Link](theJMenuBar);
Pour traiter le clique sur un MenuItem il suf it d’impl menter l’ couteur ActionListener.
Exemple de JToolBar
//Création d’une barre d’outils
JToolBar toolbar = new JToolBar();
//Ajouter un élément à la barre d’outils
JButton ouvrir=new JButton();
[Link](("images/[Link]");
[Link](ouvrir);
//Désactiver le déplacement de la barre d’outils
[Link] (false);
7. JTabedPane (Onglets)
JTabedPane permet un utilisateur de switcher parmi plusieurs onglets par clique. Chaque
onglet est compos d’un titre, d’un pannel et ventuellement une image. L’ajout des onglets
au TabedPane est effectu par la m thode addTabe ou insertTab. Chaque onglet dispos d’un
indexe correspondant la position dont laquelle il a t ajout , le premier est index par 0 et
le dernier par n-1 ou n est le nombre d’onglets ajout s
53
© M. Lahmer 2002-2023


é
à
à
é
é
f
é
é
é
é
é
é
é
é
é
void setBackgroundAt(int, Color) Color getBackgroundAt(int)
void setForegroundAt(int, Color) Color getForegroundAt(int)
//Activer désactiver un onglet
void setEnabledAt(int, boolean) boolean isEnabledAt(int)
54
© M. Lahmer 2002-2023

7. JavaFX
1. Introduction
2. Architecture
JavaFX est un ensemble de bibliothèques Java conçues pour permettre aux développeurs
de créer et de déployer des applications client riches qui se comportent de manière
cohérente sur toutes les plateformes.
Scene graph
Le JavaFX scene graph, présenté dans la couche supérieure de la gure 1, constitue le
point de départ de la création d'une application JavaFX. C'est une arborescence
hiérarchique de nœuds qui représente tous les éléments visuels de l'interface utilisateur de
l'application. Chaque nœud a un identi ant, une classe de style et supporte un ensemble
d’événements. À l'exception du nœud racine d'un graphe de scène, chaque nœud a un seul
parent et zéro enfant ou plus.
Prism
Prism est un moteur haute performance permettant l’accélération matérielle utilisé pour
restituer les graphiques au format 2D et 3D.
Dans l’absence de l’accélération sur le matériel ou le GPU, Prism utilise DirectX sur
Windows et OpenGL sur Mac, Linux, et les systèmes embarqués.
Glass
Glass Windowing, représente le niveau le plus bas de la pile de graphiques JavaFX. Sa
55
© M. Lahmer 2002-2023


fi
fi
responsabilité principale consiste à fournir des services du Système d’exploitation natifs,
tels que la gestion des fenêtres, des minuteries et des surfaces. C’est l’intermédiaire entre la
plate-forme JavaFX et le système d'exploitation natif. Glass est également responsable de
la gestion de la le d'attente d'événements. Contrairement à (AWT), qui gère sa propre le
d'attente d'événements, Glass utilise les fonctionnalités de le d'attente des événements du
système d'exploitation natif pour plani er l'utilisation des processus.
Quantum Toolkit
Quantum Toolkit relie Prism et Glass Windowing Toolkit et les met à la disposition de la
couche JavaFX située au-dessus d’eux dans la pile. Il gère également les règles de thread
liées au rendu par rapport à la gestion des événements.
WebEngine : [Link]
Basé sur l’API open source web kit, WebEngine permet à une application javaFX
d’interpréter un contenu HTML (HTML5, CSS, JavaScript, DOM and SVG)
MediaEngine : [Link]
Il est basé sur un moteur open source appelé Streamer. Ce moteur multimédia prend en
charge la lecture de contenu vidéo et audio. Il supporte les formats mp3, wav, aiff et v.
3. Application JavaFX
Introduction
JavaFX vous permet de concevoir avec MVC (Model-View-Controller) en utilisant
FXML (extension XML pour JavaFX) et Java. Le "Modèle" est constitué d'objets du
domaine spéci ques à l'application, la "Vue" est constituée de FXML et le "Contrôleur" est
un code Java
qui dé nit le comportement de l'interface graphique pour interagir avec l'utilisateur. La
personnalisation de l'apparence et le style de l'application peut être fait via le CSS.
CDI : Context Dependency Injection permet de référencer un objet FXML depuis Java
(Contrôleur).
Il est possible de concevoir la GUI sans écrire de code grâce à JavaFX Scene Builder. Lors
de la conception de l'interface utilisateur, Scene Builder crée un balisage FXML pouvant
être transféré dans un environnement de développement intégré (IDE) a n que les
développeurs puissent ajouter la logique métier.
Cycle de vie d’une application JavaFX
Une application JavaFX hérite de [Link]. La JVM maintient le
cycle de vie d'une application JavaFX comme suit:
• Il construit une instance de Application en utilisant la méthode launch()
• Il appelle la méthode init() de l’application.
• Il appelle la méthode start de l'application ([Link]) et passe une instance de
Stage en argument.
• Il attend la n de l’application (par exemple, via [Link] () ou en fermant toutes les
56
© M. Lahmer 2002-2023

fi
fi
fi
fi
fi
fi
fi
fl
fi
fenêtres).
• Il appelle la méthode stop () de l'application.
Start () est une méthode abstraite, qui doit être redé nie. init() et stop() ont une
implémentation par défaut qui ne fait rien.
Si vous utilisez [Link] (int) pour mettre n à l'application, stop () ne sera pas appelé.
Structure d’une application JavaFX
57
© M. Lahmer 2002-2023


fi

fi
fi
BorderPane : C’est le BorderLayout swing, la fenêtre est décomposée en 5 zones top,
bottom, right, left et center
StackPane : Les composants sont ajoutés l’un au-dessus de l’autre et il y a que le dernier
qui est visible
TilePane : équivalent au FlowPane il permet de placer tous les noeuds dans une grille dans
laquelle chaque cellule a la même taille. Les nœuds peuvent être disposés horizontalement
(en rangées) ou verticalement (en colonnes).
GridPane : C’est le GridLayout swing, Les composants sont ajustés selon une grille
(lignes,colones)
AnchorPane : permet d'ancrer des nœuds en haut, en bas, à gauche, à droite ou au centre
du volet. Lorsque la fenêtre est redimensionnée, les nœuds conservent leur position par
rapport à leur point d'ancrage.
HBox : permet une disposition des composants en une seule ligne
VBox : permet une disposition des composants en une seule colonne
Les composants
• Accordion
• ChoiceBox
• ColorPicker • DatePicker
• ComboBox • ListView
• TableView • Menu
• TabPane • PasswordField
• TextArea • ProgressBar
• TitledPane • Slider
• ToolBar • Spinner
• TreeTableView • SplitMenuButton
• TreeView • SplitPane
58
© M. Lahmer 2002-2023


4. Exemple
La vue
59
© M. Lahmer 2002-2023



[Link]="0"/>
<TextField prefWidth="150" [Link]="1" [Link]="1"/>
</GridPane>
</center>
<bottom>
<HBox style="-fx-padding:15 20 15 20; -fx-spacing:20px;" alignment="BASELINE_CENTER" >
<Button text="Valider" prefWidth="100" onAction="#validateAction" /> ❷
<Button text="Annuler" prefWidth= "100" onAction="#cancelAction" />
</HBox>
</bottom>
</BorderPane>
// L'injection
@FXML
private void validateAction(ActionEvent event){}
@FXML
private void cancelAction(ActionEvent event) {}
}
5. ListView
<?xml version="1.0" encoding="UTF-8"?>
<?import [Link]?>
<?import [Link]?>
import [Link];
import [Link];
import [Link];
import [Link];
public class ListViewController {
@FXML
private ListView<String> listView;
public void initialize() {
// Create a sample list of items
ObservableList<String> items = [Link](
"Item 1", "Item 2", "Item 3", "Item 4", "Item 5");
60
© M. Lahmer 2002-2023

fi
[Link]().getSelectedItem();
[Link]("Selected Item: " + selectedItem);
});
}
}
————
6. Text Style
<?xml version="1.0" encoding="UTF-8"?>
<?import [Link]?>
<?import [Link]?>
7. Charts
JavaFX est livré avec un ensemble de chartes graphiques prêtes à l'emploi :
AreaChart, BarChart, BubbleChart, LineChart, PieChart, ScatterChart,
StackedAreaChart et StackedBarChart
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Override
public void start(Stage primaryStage) throws Exception {
// Create a BarChart
BarChart<String, Number> barChart = createBarChart();
Scene scene = new Scene(barChart, 600, 400);
[Link]("JavaFX BarChart Example");
[Link](scene);
[Link]();
}
61
© M. Lahmer 2002-2023

// Create the BarChart
BarChart<String, Number> barChart = new BarChart<>(xAxis, yAxis);
[Link]("BarChart Example");
// Create a data series
[Link]<String, Number> series = new [Link]<>();
[Link]("Data Series");
62
© M. Lahmer 2002-2023

8 Accès aux bases de données en JDBC
1. Principe
JDBC est une API fournie avec Java permettant l'acc s n'importe quelle base de donn es
locale ou travers un r seau. Le principe de fonctionnement est comme suit :
■ Chaque base de donn es utilise un pilote (driver) qui lui est propre et qui permet de
convertir les requ tes JDBC dans le langage natif du SGBDR.
■ Ces drivers dits JDBC (un ensemble de classes et d’interfaces Java) existent pour tous les
principaux constructeurs : Oracle, Sybase, Informix, SQLServer, MySQL, MsAccess, …
2. Mise en œuvre
Toutes les classes et les interfaces n cessaires la connection la base de donn es et son
exploitation sont fournis par l’api [Link]. Les tapes suivre pour mettre en place une
application java bas e sur JDBC sont :
1. Charger le driver JDBC
Utiliser la m thode de chargement la demande forName() de la classe Class comme suit :
[Link]("Nom du driver");
Exemples de drivers :
[Link] : pour access fournis par JDK
[Link] : pour oracle non fournis
[Link]. SQLServerDriver : SqlServer non fournis
Code de chargement :
try { [Link]("[Link]").
newInstance();
63
© M. Lahmer 2002-2023

à
é
ê
é
é
é
à
é
é
à
à
è
à
à
é
é
[Link]("Tout est OK"); }
catch (Exception e) { [Link]("Erreur de drivers
JDBC"); }
3. Exécuter la requête
La premi re tape est de construire un objet Statement .
Statement stm = [Link]();
Quand un objet Statement execute une requ te, il retourne un objet ResultSet (pour les requ te
de consultation). L'ex cution de la requ te se fait par l'une des trois m thodes suivantes :
• executeQuery : pour les requ tes de consultation. Renvoie un ResultSet pour r cup rer
les lignes une par une.
• executeUpdate : pour les requ tes de modi ication des donn es (update, insert, delete)
ou autre requ te SQL (create table, ...). Renvoie le nombre de lignes modi i es.
• execute : si on conna t pas l'ex cution la nature de l'ordre SQL ex cute
ResultSet rsUsers = [Link]("SELECT * FROM T_Users;");
64
© M. Lahmer 2002-2023

é
é
é
è
é
ê
é
î
é
f
é
é
é
é
é
é
à
ê
ê
é
à
ê
f
ê
f
é
é
é
é
à
à
é
é
f
é
é
é
é
é
é
à
é
é
ê
getInt(String); long getLong(int); long getLong(String); short getShort(int); short
getShort(String); String getString(int); String getString(String);
String strQuery = "SELECT * FROM T_Users;";
ResultSet rsUsers = [Link](strQuery);
while([Link]()) {
[Link]("Id[" + [Link](1) + "]" + "Pass[" +
[Link]("Password") ); }
Pour parcourir un ResultSet dans tous les sens (premier, dernier, suivant et pr c dent) Il faut
passer des param tres spl mentaires la m thode createStatement de l'objet de
connexion : stm = [Link](type, mode);
• Type :
o ResultSet.TYPE_FORWARD_ONLY
o ResultSet.TYPE_SCROLL_SENSITIVE
o ResultSet.TYPE_SCROLL_INSENSITIVE
• Mode :
o ResultSet.CONCUR_READ_ONLY
o ResultSet.CONCUR_UPDATABLE
Pour le type scroll, on a les possibilit s de parcours irst, last , next et previous. A titre
d’exemple pour modi ier le premier enregistrement de la table T_Users
[Link](); // Se positionne sur le premier enregistrement
[Link]("Password", "toto"); // Modi ie la valeur du password
[Link](); //Applique les modi ications sur la base
Avant de quitter l’application il faut fermer les diff rents espaces ouverts savoir rsUsers, stm et
cnx
3. PreparedStatement et CollablStatement
PreparedStatement : Requ te dynamiques pr -compil e plus rapide qu’un Statement
classique. Le SGBD n’analyse qu’une seule fois la requ te pour de nombreuses ex cutions d’une
m me requ te SQL avec des param tres variables. La m thode prepareStatement() throws
SQLException de l ’objet Connection cr e un PreparedStatement
PreparedStatement ps =
[Link]("UPDATE emp SET sal = ? WHERE name = ?");
for(int i = 0; i < 10; i++) {
[Link](1, salary[i]);
[Link](2, name[i]);
int count = [Link](); }
Les arguments dynamiques sont sp ci i s par un "?" ils sont ensuite positionn s par les
m thodes setInt() , setString() , setDate() , … de PreparedStatement et setNull() positionne
le param tre NULL (SQL). Ces m thodes n cessitent 2 arguments, le premier (int) indique le
num ro relatif de l’argument dans la requ te et le second indique la valeur positionner.
65
© M. Lahmer 2002-2023

ê
é
é
è
ê
à
è
f
é
ê
é
è
é
é
é
f
ê
à
é
é
f
é
é
é
ê
f
é
é
f
à
à
é
é
é
é
CallableStatement : utilis e pour ex cuter une proc dure sql stock e. Exemple d’addtion
/*
--EXECUTE ADDITION 10,25,NULL
ALTER PROCEDURE ADDITION
@A INT
, @B INT
, @C INT OUT
AS
SELECT @C = @A + @B
*/
CallableStatement cs2 = [Link]("{call ADDITION(?,?,?)}");
[Link](3,[Link]);
[Link](1,10);
[Link](2,25);
[Link]();
int res = [Link](3);
[Link](res);
4. Les métadonnées
JDBC permet de r cup rer des informations sur le type de donn es que l'on vient de r cup rer
par un SELECT (interface ResultSetMetaData), mais aussi sur la base de donn es elle-m me
(interface DatabaseMetaData). Les donn es que l'on peut r cup rer avec DatabaseMetaData
d pendent du SGBD avec lequel on travaille.
66
© M. Lahmer 2002-2023

é
é
é
é
é
é
é
é
é
é
é
é
é
ê
é
9. Client / Serveur en RMI
1. Définition
Appel de m thode distance (Remote Methode Invocation) est une technologie sun
d velopp e depuis JDK 1.1 qui permet un objet java s’ex cutant sur une machine
cliente d’invoquer des m thodes sur un objet s’ex cutant sur une autre machine serveur.
L’API rmi d charge le d veloppeur de toute connaissance sur les r seaux (protocoles
TCP, socket, format de donn es,….) et l’appelle de m thodes se fait d’une façon
transparente.
2. Mise en œuvre
1. principe
Le développement d’une application distribuée RMI peut être décomposé en deux parties :
Côté serveur
• La d inition d'une interface qui contient les m thodes qui peuvent tre appel es
distance
• L' criture d'une classe qui impl mente cette interface
• L’enregistrement de l’objet distant dans le registre de noms RMI (RMI Registry)
Côté client
• L'obtention d'une r f rence sur l'objet distant partir de son nom
• L'appel la m thode partir de cette r f rence
2. Exemple
L’objectif est de mettre en place une application rmi qui permettra un client d’appeler
une m thode addition(a,b) sur un objet distant calcule.
67
© M. Lahmer 2002-2023

à

é
é
é
f
é
à
é
é
é
é
é
à
é
à
é
é
é
é
é
é
à
à
é
é
é
é
à
ê
é
é
- D inition de l’interface calcule qui contiendra les services appeler distance :
import [Link].*;
public interface Calcul extends Remote {
public double addition(double a, double b) throws RemoteException;}
- Impl mentation de l’objet distant qui va impl menter l’interface Remote
import [Link];
import [Link];
public class CalculImpl extends UnicastRemoteObject implements Calcul{
protected InformationImpl() throws RemoteException {
super();}
public double addition(double x, double y) throws RemoteException {
return a+b ;}
- Enregistrement dans l’annuaire RmiRegistry (Main)
import [Link];
import [Link];
class Main{
public static void main(String[] args) {
int port=1099;
[Link](port)
CalculImpl srv = new CalculImpl();
String url = "rmi://@serveur:”+port+”/Reference";
[Link](url, srv);
[Link]("Serveur lance :");
} catch (Exception e) { [Link]();}
}
}
- Côté client en recherché l’objet distant par sa référence dans l’annuaire et appeler la
méthode.
import [Link];
import [Link];
public class Client {
public static void main(String[] args) {
try {
Remote serveur = (Calcul)[Link]("rmi://@serveur:1099/Reference ");
[Link]("Resulta = " + [Link](10,20));
}
} catch (NotBoundException e) {
[Link]();
}
}
68
© M. Lahmer 2002-2023

é
f
é
é
à
à