344
1 _________________________________________________________________ _____________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires aux Grandes Ecoles Rabat, 29 Octobre-2 Novembre 2009 Mme A. BENOMAR rofesseur à l’Institut National des Postes et Télécommunicati

1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

Embed Size (px)

Citation preview

Page 1: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

1

______________________________________________________________________________

PREMIERS PAS VERS JAVA

Les Journées Informatiques des Classes Préparatoiresaux Grandes Ecoles

Rabat, 29 Octobre-2 Novembre 2009

Mme A. BENOMARProfesseur à l’Institut National des Postes et Télécommunications

Page 2: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

2

Chapitre 1 GENERALITES SUR LE LANGAGE JAVA

Chapitre 2 OUTILS ELEMENTAIRES POUR LA PROGRAMMATION JAVA

Chapitre 3 HERITAGE ET INTERFACES EN JAVA

SOMMAIRE

Page 3: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

3

Chapitre 1 GENERALITES SUR LE LANGAGE JAVA

 

1- CARACTERISTIQUES DE BASES DE LA P.O.O

2- NAISSANCE ET DEVELOPPEMENT DE JAVA

3- ENVIRONNEMENT DE JAVA

4- LES PAQUETAGES (les packages)

5- LES CLASSES EN JAVA

6- UTILISATION DES OBJETS

7- LES CONSTRUCTEURS

8- UTILISATION DES ARGUMENTS DE MAIN

 

Page 4: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

4

Chapitre 1 INTRODUCTION A JAVA

1- CARACTERISTIQUES DE BASES DE LA P.O.O

1 - 1 Notion de classe et d’objet 

Objet = Données + Traitements

La classe : Abstraction d’un ensemble d’objets qui ont les mêmes caractéristiques ( attributs) et les mêmes comportements ( méthodes)

objet est une instance d’une classe. 

Exemple : Une classe de nom Individu Attributs : numeroCin, nom, prenom, dateNaissance, adresseMéthodes : changeAdresse(), calculSalaire(),dateRetraite().. Objets : Mohammed, Nadia, …

Page 5: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

5

1 – 2 L’encapsulation des données :- Les données sont protégées à l’intérieur de chaque objet.- Les données (publiques ,secrètes)

 1- 3 L’Héritage

Une classe dérivée hérite des propriétés d’une classe de base.-        Economie de code-        Amélioration de la fiabilité-        Amélioration de la lisibilitéExemple : Un rectangle peut hériter d’un polygone 1- 4 Le Polymorphisme

Le polymorphisme permet la redéfinition d’une méthode

1 - 5 Le Multithreading 

THREADS : processus qui s’exécutent simultanément à l’intérieur d’un unique programme

Page 6: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

6

2-NAISSANCE ET DEVELOPPEMENT DE JAVA 

2- 1 Caractéristiques de JAVA

- JAVA est un langage de programmation orientée objets proche de C++.

- JAVA fonctionne comme une machine virtuelle ( indépendant de toute plate forme)

- JAVA est simple (pas de pointeur, pas d’héritage multiple)

- JAVA autorise le multitâche (multithreading)-

Page 7: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

7

2- NAISSANCE ET DEVELOPPEMENT DE JAVA 

2- 1 Caractéristiques de JAVA

- JAVA peut être utilisé sur INTERNET

- JAVA est gratuit

-JAVA contient une très riche bibliothèque de classes (Packages) qui permettent de :

  - Créer des interfaces graphiques

- Utiliser les données multimédia

- Communiquer à travers les réseaux

Page 8: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

8

2- NAISSANCE ET DEVELOPPEMENT DE JAVA 

2- 2 Historique de JAVA

-Projet de recherche en 1991 chez Sun Microsystems

(langage de pilotage des appareils électroniques) a aboutit

à la création du l.o.o OAK

- En 1994 conversion du langage Oak pour l’adapter aux

technologies des réseaux informatiques tels que

INTERNET. C’est la naissance de JAVA

Page 9: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

9

2- NAISSANCE ET DEVELOPPEMENT DE JAVA 

2- 2 Historique de JAVA

Des éditeurs de grande réputation ont rapidement conclu des accords de licence pour diffuser JAVA

- Netscape Communications ( 23 mai 1995)

- Oracle (30 octobre 1995)

- Borland (8 novembre 1995)

- IBM ( 6 décembre 1995)

- Adobe Systems ( 6 décembre 1995)

- Symantec (13 decembre 1995)

- Microsoft (12 mars 1996)

- Novell ( 21 mars 1996)

Page 10: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

10

3- ENVIRONNEMENT DE JAVA

3- 1 Java Developer’s Kit (JDK)Sun fourni gratuitement un ensemble d'outils et d'API pour permettre le développement de programmes avec Java. Ce kit, nommé JDK, est librement téléchargeable sur le site web de Sun http://java.sun.com

Le kit java contient : * le compilateur (javac),* l’interpréteur (java), * l’appletviewer ou inspecteur d’applet

- Le JDK contient par ailleurs l’API de java (Application Programmers Interface) qui correspond à la bibliothèque de java- Le kit JDK ne comporte pas d’éditeur.

Page 11: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

11

3- ENVIRONNEMENT DE JAVA

3- 2 Versions de JavaJava évolue au fil des années. En plus de faire évoluer les

numéros de versions, le nom complet de chaque version a parfois été changé. Les principaux événements de la vie de Java sont les

suivants : Année Evénements

1995 mai : premier lancement commercial

1996 janvier : JDK 1.0.1

1997 février : JDK 1.1

1998 décembre : lancement de J2SE 1.2

1999 décembre : lancement J2EE

2000 mai : J2SE 1.3

2002 février : J2SE 1.4

2004 septembre : J2SE 5.0

2006 mai : Java EE 5 décembre : Java SE 6.0

Page 12: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

12

3- ENVIRONNEMENT DE JAVA

3- 2 Versions de Java

Depuis sa version 1.2, Java a été renommé Java 2. Les numéros de version 1.2 et 2 désignent donc la même version. Le JDK a été renommé J2SDK (Java 2 Software Development Kit) mais la dénomination JDK reste encore largement utilisée, à tel point que la dénomination JDK est reprise dans la version 5.0. En outre, Java 2 désigne les versions de J2SE 1.2 à J2SE 1.4 La version actuelle est Java SE 6 alors que la version Java SE 7 est en cours de développement (sera fini au cours de 2010)

Compatibilité de versionJava assure une compatibilité binaire ascendante (les programmes compilés avec une ancienne version peuvent s'exécuter avec une plate-forme plus récente).

Page 13: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

13

3- ENVIRONNEMENT DE JAVA

3-3 Editions de la plate-forme JavaLa plate-forme Java 2 est disponible dans plusieurs éditions utilisées à

des fins diverses.

Java 2 Standard Edition (J2SE), Contient les classes qui forment le cœur du langage Java

Java 2 Entreprise Edition (J2EE) pour le développement d’applications d’entreprise . Elle contient les classes J2SE plus

d’autres

classes pour le développement d’applications d’entreprise.

Java 2 Micro Edition (J2ME). pour les produitsd’électronique grand public (téléphones portables,..) dans ce cas seule une petite partie du langage est utilisée.

Chaque édition contient un kit de développement Java 2 (SDK) pourdévelopper des applications et un environnement d’exécution Java 2 (JRE)pour les exécuter.

Page 14: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

14

3- 4 Le code source

- Une application java est généralement composée de plusieurs fichiers source. Les fichiers source de java ont l’extension .java.

- Un fichier .java peut contenir plusieurs classes. - Le nom du fichier source java doit être le même que celui

de la classe publique que ce fichier renferme (Un fichier java ne peut pas contenir plus d’une classe publique)

3- 5La compilation* Le byte code - La compilation va transformer le code source en J-code ou byte-

code Java indépendant de toute plate forme- La commande qui permet la compilation est la suivante :

Javac nom_fich.javaCréation d’un ou plusieurs fichiers .class.

Page 15: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

15

3- 2- 3 La machine virtuelle java

- Le code java comprend des instructions écrites pour une certaine machine virtuelle java (JVM : Java virtuel Machine)

- un programme java est exécutée sur tout ordinateur pour lequel une machine virtuelle est disponible.

- Une application sera exécutée par l’interpréteur de java

Java nom_fich

3- 2- 4 Quelques environnements d’utilisation de java

- PCGRASP , JGRASP

- JBUILDER

- ECLIPSE

- NETBEANS

-….

Page 16: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

16

-Les fichiers jar

Les fichiers .jar sont des fichiers java compressés comme les

fichiers .zip selon un algorithme particulier devenu un standard de fait

dans le monde des PC.

Ils sont parfois appelés fichiers d'archives ou, plus simplement,

archives.

Ces fichiers sont produits par des outils comme jar.exe. ( qui fait

partie du jdk) .

Les fichiers .jar peuvent contenir une multitude de fichiers

compressés avec l'indication de leur chemin d'accès.

Un fichier .jar peut ainsi être exécuté directement dans tout

environnement possédant une machine virtuelle

Page 17: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

17

4- LES PAQUETAGES (les packages)* Organisation hiérarchique des classes en packages* Regrouper plusieurs classes qui collaborent entre elles dans une application* Définir un certain niveau de protection

4- 1 Construction de package- Pour ranger une classe dans un package, il faut insérer la ligne suivante

au début du fichier source:package nomDuPaquetage ;

- Un paquetage qui doit contenir des classes et donc des fichiers est un répertoire. le paquetage a le même nom que le répertoire qui le contient.

 

4- 2 Utilisation des classes d’un paquetageOn peut importer les packages de deux manières différentes :

1 - import nomDuPackage.* ; 2 - import nomDuPackage.nomDeLaclasse;

Exemple import liste.* ; // importer toutes les classes du package listeimport liste.A ; // importer la classe A du package liste

Page 18: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

18

4- 3 API de JAVA

- java.lang : contient les classes fondamentales du langage. Il contient la classe Object qui est la super classe primitive de toutes les classes.

- importé par défaut.

Exemples : Java.lang.Math

Java.lang.System

Java.lang.String

- java.awt : (awt pour Abstract Window Toolkit) contient les classes pour fabriquer des interfaces graphiques Exemples :

java.awt.Graphicsjava.awt.Color

Page 19: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

19

4- 3 API de JAVA

-Javax.swing contient les classes pour les interfaces graphiques évolués

-java.applet : utile pour faire des applets qui sont des applications utilisables à travers le web

-java.io: contient les classes nécessaires aux E/S

-java.net : accés aux réseaux

-java.util : classes d’utilitaires (Random, Date, ...)

19

Page 20: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

20

5 - LES CLASSES JAVA

Une classe définit des attributs et des méthodes

5 - 1 Architecture d'une classe JAVA 

Une classe se compose de deux parties :

* l’en-tête

* le corps

Page 21: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

21

5- LES CLASSES JAVA

5 - 1 Architecture d'une classe JAVA

Entête d’une classe

[modificateur] class <NomClasse>[extends <superclass>]

[implements <Interface>] 

[ ] : optionnel

< > : obligatoire

gras : mot clé

  Corps d’une classe Le corps de la classe donne sa définition. Il contient

les déclarations des attributs et des méthodes. 

Page 22: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

22

5 - 2 Les modificateurs de classe

Modificateur Définition

public La classe est accessible par toutes les autres classes des autres packages. Elle est visible partout

private La classe n’est accessible qu’à partir du fichier où elle est définie

final Les classes finales ne peuvent pas être héritables

friendly l'accès est garanti à toute classe dans le package.

abstract Aucun objet ne peut instancier cette classe. Seules les classes abstraites peuvent déclarer des méthodes abstraites. Cette classe sert pour l’héritage

Page 23: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

23

5 - 3 Conventions d’écriture en JAVA

Type Convention Exemple

Nom d’une classe

 Débute par une majuscule

class Polygone

Nom d’un objet

Débute par une minusculePeut s’étaler sur plusieurs mots Chaque mot commence par une majuscule sauf le premier

premierObjet

Nom de méthode

Débute par une minusculeSauf pour le constructeur

void ecrire()

Constante S’écrit en majuscules A_CONSTANT

Page 24: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

24

5- 4 Un premier exemple 

public class Premier{

public static void main (String[ ] arg){

System.out.println( ‘‘bravo’’) ;}

} public : visible de partout , y compris des autres paquetages

static : méthode de classe

System.out.println : La méthode println écrit sur l’écran la chaine de caractères passée en paramètres à cette méthode

  

Page 25: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

25

5- 4 Un premier exemple 

  

- Cette classe doit se trouver dans le fichier Premier.java

- Il est compilé par la commande javac Premier.java - La compilation crée un fichier Premier.class - Le fichier est exécuté par la commande java Premier 

- On obtient à l’exécution : bravo

Page 26: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

26

6- UTILISATION DES CLASSES

Pour utiliser une classe, elle doit être instanciée . Il y aura alors création d’un objet. Mais avant de créer un objet , il faut le déclarer

 6 - 1 Déclaration d’un objet 

NomClasse objet ; Cette instruction déclare un objet de la classe NomClasse mais ne le crée pas.

6- 2 Création d’un objet

Objet = new NomClasse( ) ; La déclaration et la création d’un objet peuvent être regroupées :

NomClasse objet = new NomClasse( )  On accéde aux méthodes et aux attributs de la classe comme suit :

NomObjet.méthode(arguments de la méthodes)

NomObjet.attribut

Page 27: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

27

6- 3 Exemple d’utilisation d’objetIl s’agit d’écrire une application en java qui permet de calculer le salaire hebdomadaire d’un employé en fonction du taux horaire et du nombre d’heures

public class Employe { String nom; // le nom de l'employé

static float taux_h=50; // le taux horaire en dirhams

int nb_h;

float salaireh () // nb_h : nombre d’heures { float s; s=(taux_h*nb_h); return s; }

Page 28: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

28

6- 3 Exemple d’utilisation d’objetpublic static void main(String[] arg) { float s1,s2; // les salaires de 2 employés Employe emp1,emp2; // 2 objets modélisant 2 employés

emp1=new Employe(); emp2=new Employe();

emp1.nom= " Mohammed"; // le nom de l’employé 1 emp1.nb_h= 35; // le nombre d’heures de l’employé 1 emp2.nom="Nadia"; // le nom de l’employé 2 emp2.nb_h=38 ; // le nombre d’heures de l’employé 2 s1=emp1.salaireh(); s2=emp2.salaireh(); System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh"); System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh"); } // fin de main } // fin de la classe

A l’éxecution , on aura : Le salaire de Mohammed est 1750.0 dhLe salaire de Nadia est 1900.0 dh

Page 29: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

29

7- LES CONSTRUCTEURS

7 - 1 Définition

- Le constructeur est une méthode qui est effectuée au moment de la création d’un objet. Il sert à initialiser les variables contenues dans les objets.

 - Le constructeur porte le même nom que sa classe. Il ne retourne pas de

valeur et ne mentionne pas void au début de sa déclaration - Toute classe possède au moins un constructeur. Si une classe ne déclare

pas de constructeur, un constructeur vide est crée automatiquement par défaut 

Un constructeur est une fonction qui est appelée par le biais de l’opérateur new

 

monObjet = new Constructeur(arguments) ;

29

Page 30: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

30

Exemple d’utilisation de constructeur

public class Employe_Constructeur { String nom; static float taux_h=50; int nb_h;

Employe_Constructeur(String identite) // Constructeur { nom=identite; }

float salaireh () // nb_h : nombre d’heures { float s; s=(taux_h*nb_h); return s; }

Page 31: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

31

Exemple d’utilisation de constructeur

public static void main(String[] arg) { float s1,s2; Employe_Constructeur emp1,emp2;

emp1=new Employe_Constructeur (" Mohammed"); emp2=new Employe_Constructeur ("Nadia");/* Dès la création d’un objet on doit spécifier la valeur du nom*/ emp1.nb_h= 35; // le nombre d’heures de l’employé 1 emp2.nb_h=38 ; // le nombre d’heures de l’employé 2 s1=emp1.salaireh(); s2=emp2.salaireh(); System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh"); System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh"); } // fin de main } // fin de la classe

Page 32: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

32

7 – 2 La variable this

La variable this sert à référencer dans une méthode

l’instance de l’objet en cours d’utilisation. Son emploi peut s’avérer utile dans les constructeurs avec des paramètres lorsque les variables de la classe et celles du constructeur portent

exactement le même nom .

public class Employe_this { String nom; static float taux_h=50; int nb_h;

Employe_this(String nom) { this.nom=nom; // variable globale de la classe = variable locale }

Page 33: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

33

7 – 2 La variable this

float salaireh () { float s; s=(taux_h*nb_h); return s; } public static void main(String[] arg) { float s1,s2; Employe_this emp1,emp2; emp1=new Employe_this (" Mohammed"); emp2=new Employe_this ("Nadia");

emp1.nb_h= 35; // le nombre d’heures de l’employé 1

emp2.nb_h=38 ; // le nombre d’heures de l’employé 2

s1=emp1.salaireh(); s2=emp2.salaireh(); System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh"); System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh"); } // fin de main } // fin de la classe

Page 34: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

34

8- UTILISATION DES ARGUMENTS DE MAIN

Les arguments de la méthodes main permettent de récupérer des chaînes de caractères fournies depuis la ligne de commande

Exemple 1 d’utilisation des arguments de main : Les noms des employés sont considérés des arguments de la méthode main

public class Arguments_main { String nom; static float taux_h=50; int nb_h;

float salaireh () { float s; s=(taux_h*nb_h); return s; }

Page 35: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

35

8- UTILISATION DES ARGUMENTS DE MAIN

public static void main(String[] arg) { float s1,s2; Arguments_main emp1,emp2; emp1=new Arguments_main(); emp2=new Arguments_main(); emp1.nom=arg[0]; emp2.nom=arg[1];

emp1.nb_h= 35; // le nombre d’heures de l’employé 1 emp2.nb_h=38 ; // le nombre d’heures de l’employé 2 s1=emp1.salaireh(); s2=emp2.salaireh();

System.out.println("Le salaire de "+ emp1.nom+" est "+s1+" dh"); System.out.println("Le salaire de "+ emp2.nom+" est "+s2+" dh"); } // fin de main } // fin de la classeAprès compilation du fichier Arguments_main.java , il faut l’exécuter en donnant 2 chaînes de caractères pour les noms des 2 employés.Exemple d’exécution : java Arguments_main Ali Sanae

Page 36: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

36

8- UTILISATION DES ARGUMENTS DE MAIN Exemple 2 : Utilisation d’un nombre entier comme argument

Il s’agit de considérer le nombre d’heures travaillées comme argument de main aussi pour pouvoir donner leurs valeurs à l’exécutionpublic class Arguments_entiers { String nom; static float taux_h=50; int nb_h; float salaireh () { float s; s=(taux_h*nb_h); return s; }

Page 37: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

37

8- UTILISATION DES ARGUMENTS DE MAIN

public static void main(String[] arg) { float s1,s2; Arguments_entiers emp1,emp2; emp1=new Arguments_entiers(); emp2=new Arguments_entiers(); emp1.nom=arg[0];

emp1.nb_h= Integer.parseInt(arg[1]); emp2.nom=arg[2];

emp2.nb_h= Integer.parseInt(arg[3]); s1=emp1.salaireh(); s2=emp2.salaireh(); System.out.println("Le salaire de "+ emp1.nom+" est "+s1+" dh"); System.out.println("Le salaire de "+ emp2.nom+" est "+s2+" dh"); } // fin de main } // fin de la classeil faut exécuter cette classe en donnant 2 chaînes de caractères pour les noms des 2 employés et leurs nombres d’heures travailléesExemple d’exécution : java Arguments_entier Ali 30 Sanae 28

Page 38: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

38

Chapitre 2 LES OUTILS ELEMENTAIRES POUR LA PROGRAMMATION JAVA

 

1- COMMENTAIRES EN JAVA

2- TYPES ELEMENTAIRES EN JAVA

3- LES PROPRIETES DES ATTRIBUTS

4- LES STRUCTURES DE CONTROLES

5- LES PROPRIETES DES METHODES

6- LES TABLEAUX

7- LA SAISIE AU CLAVIER

8- LES CHAINES DE CARACTERES

9– LES OPERATIONS SUR LES OBJETS

Page 39: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

39

Chapitre 2 TECHNIQUES DE BASE DE LA PROGRAMMATION JAVA 

11 - Commentaires en java 

En java, il existe deux types de commentaires : 

// commentaire simple sur une ligne 

/* */ commentaire de plusieurs lignes 

Page 40: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

40

Chapitre 2 TECHNIQUES DE BASE DE LA PROGRAMMATION JAVA 

2– Types élémentaires en java 

JAVA dispose des 8 types élémentaires suivants, ces types sont appelés primitives en java : 

boolean Destiné à une valeur logique (true, false)

byte Octet signé 8 bits (-128 et 127)

short Entier court signé 16 bits (-32768 – 32767)

char Caractère 16 bits

Page 41: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

41

Chapitre 2 TECHNIQUES DE BASE DE LA PROGRAMMATION JAVA 

2– Types élémentaires en java 

int Entier signé 32 bits

float Virgule flottante 32 bits

double Double précision 64 bits

long Entier long 64 bits

Page 42: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

42

Java dispose également des classes suivantes pour gérer ces primitives : 

Classe Primitive______________________________Character charByte byteShort shortInteger intLong longFloat floatDouble doubleBoolean boolean

Page 43: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

43

3- LES PROPRIETES DES ATTRIBUTS

3 - 1 Déclaration

Un attribut correspond à une variable ou une constante

pouvant prendre une valeur différente pour chaque objet instance de la

classe.

Tous les objets d’une même classe ont les mêmes attributs,

mais chaque objet associe à ces attributs des valeurs qui lui sont

propres.

Avant d’utiliser un attribut, il doit être déclarée comme suit :

<modificateur> type_elementaire identificateur

Page 44: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

44

3- LES PROPRIETES DES ATTRIBUTS

3 - 1 Déclaration

Modificateur Définition

final - Un attribut constant.

private - Un attribut privée ne peut être utilisée que dans les méthodes de la même classe

public - Attribut visible par toutes les autres méthodes

static - Attribut de classe indépendant des objets

Page 45: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

45

33-2 IdentificateursA Chaque objet , classe, programme ou variable est associé un identificateur. Les

identificateurs Java sont formés d'un nombre quelconque de caractères. Ils doivent

respecter les règles suivantes :

-        Les majuscules et les minuscules sont distinguées.

-         Le premier caractère ne doit pas être un chiffre

-         L’ identificateur ne doit pas être un mot clé de Java.

En plus des règles ci-dessus, il est conseillé de respecter les directives

suivantes :

_ - Evitez les caractères accentués dans les noms de classes.

- - Evitez de donner le même nom à des identificateurs d'éléments différents  

Page 46: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

46

3-3 Mots clé de java

Les mots suivants sont les mots clé de java :

abstract assert boolean break byte

case catch char class continue

default do double else enum

extends false final finally float

for if implements import instanceof

int interface long native new

null package private protected public

return short static super switch

synchronized this throw throws transient

true try void volatile while

Page 47: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

47

3 - 4 Les attributs statiques

Ce sont les attributs qui ont le modificateur static. Un attribut

statique ( ou de classe) appartient à une classe et non à ses instances.

Il est indépendant des objets

- Un attribut statique existe dès que sa classe est chargée en

mémoire alors qu’un attribut d’instance existe lors de l’instanciation de

la classe

Pour utiliser un attribut ou une méthode statique, on écrit :

NomClasse.nomAttributStatique

Cependant JAVA permet également d’utiliser :

nomObjet.nomAttributStatique où nomObjet est une

instanciation de la classe qui contient l’attribut ou la méthode statique

Page 48: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

48

Exemple1 : attribut statiqueclass Statique { int nons; static int s; } public class UtiliseStatic { public static void main (String[] arg) { Statique.s=10; Statique obj1= new Statique(); obj1.nons=20; Statique obj2= new Statique(); obj2.nons=30; obj2.s=15;//Pour tous ,les objets s=15 System.out.println(Statique.s); //15 System.out.println(obj1.s); //15 System.out.println(obj1.nons); //20 System.out.println(obj2.nons); //30 } }

Page 49: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

49

Exemple2 : Calcul des moyennes des élèves ainsi que la moyenne de la classe

class Moyenne { static int nb_eleves ; // nombre d’élèves float note1,note2,note3; // notes des élèves int num; // numéro de l'élève String nom; // nom de l'élève static float moyenne_classe;

Moyenne(int num,String nom) //constructeur { this.num=num; this.nom=nom ; }

float moyenne_eleve() { return ((note1+note2+note3) /3); } }

Page 50: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

50

Exemple2 : Calcul des moyennes des élèves ainsi que la moyenne de la classe

public class Utilise_Moyenne

{

public static void main(String[] arg)

{

Moyenne.nb_eleves=2;

Moyenne eleve1= new Moyenne(1,"Adnane");

Moyenne eleve2= new Moyenne(2,"Amal");

eleve1.note1=15;

eleve1.note2=11;

eleve1.note3=17;

float moy1=eleve1.moyenne_eleve();

eleve2.note1=12;

eleve2.note2=18;

eleve2.note3=16;

float moy2=eleve2.moyenne_eleve();

Page 51: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

51

System.out.println("Eleve : numéro : "+eleve1.num);

System.out.println("Nom : "+eleve1.nom+" Moyenne : "+moy1);

System.out.println("Eleve : numéro : "+eleve2.num);

System.out.println("Nom : "+eleve2.nom+" Moyenne : "+moy2);

Moyenne.moyenne_classe=(moy1+moy2)/ Moyenne.nb_eleves;

System.out.println("La moyenne de la classe est "+ Moyenne.moyenne_classe);

} }

A l'exécution on aura :Eleve 1 Nom : Adnane Moyenne : 14.3333Eleve 2 Nom : Amal Moyenne : 15.3333La moyenne de la classe est : 14.833

Page 52: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

52

-3-5 Les opérateurs de java

* Multiplication

/ division

% modulo

+ addition

- soustraction

= affectation

== identité

!= différent de

&& et logique

|| ou logique

++ incrémentation

+= - = *= /=

Page 53: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

53

3-6 – Les initialiseurs

Les initialiseurs d’attributs permettent d’affecter à

un attribut une valeur initiale. Si on déclare un attribut non

static dans une méthode, cet attribut n’a pas de valeur.

Toute tentative d’y faire référence produit une erreur de

compilation.

En revanche , s’il s’agit d’une variable globale, càd

si cette déclaration se trouve en dehors de toute méthode,

JAVA l’initialise automatiquement avec une valeur par

défaut .

Page 54: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

54

Exemple : class Initialiseur { int a1; static int a2; void m1() { int a3; System.out.println(a3) ; //erreur car a3 non initialisée } public static void main(String[] arg) { System.out.println("a2="+a2); Initialiseur obj= new Initialiseur(); System.out.println("obj.a1="+obj.a1); obj.m1(); } }

Page 55: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

55

Pour des initialisations plus complexes, on peut utiliser un

bloc placé à l’extérieur de toute méthode ou constructeur

Par exemple, float e

{

if (b != 0 )

{ e = (float) a /b ; }

}

Page 56: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

56

3-7 Les attributs constants

- Une constante est un attribut qui ne peut plus être

modifié une fois qu’il a été initialisé.

- Une constante est initialisée une seule fois soit au

moment de sa déclaration, soit dans le constructeur de la

classe

-Pour déclarer un attribut constant , on le muni du

modificateur final

Si on déclare un attribut par final static int MAX = 10

MAX est une constante de la classe qui vaut toujours 10 pour

toutes les instances de la classe.

Par contre si on déclare un attribut final dans le

constructeur . Il y en aura un exemplaire par instance créée.

Page 57: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

57

Exemple de définition et d’utilisation de constantes

class Constantes{ final int C ; /* déclare une constante d’instance qui peut être initialisée dans le constructeur */

final static int D= 100 ; /* déclare une constante de classe qui doit être initialisée au moment de sa définition */

Constantes (int i ) // Constructeur de la classe Constantes

{C = i ; // initialisation de la constante d’instance C// C= D ; interdit car C doit être définit une seule fois// D = 10 ; interdit car D est une constante de classe

}}

Page 58: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

58

public class EssaiConstantes{public static void main (String[] arg)

{ System.out.println ( ( new Constantes (2)).C ) ;

System.out.println (Constantes.D ) ; }

}

On obtient à l’exécution : 2

100

Page 59: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

59

4- Les structures de contrôle

Les structures de contrôle de java sont similaires à celles de C

Les instructions conditionnelles

a – L’instruction ifif (expression)

InstructionSiVrai ;else

InstructionSiFaux

b- L’opérateur ?condition ? siVrai : siFaux

Exemple : int a, b ;int min = a<b ? a : b

Page 60: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

60

c- L’instruction switch switch (variable){ case cas1 : instruc11 ;

instruc12 ;.

break ; case cas2 : instruc21 ;

instruc22 ;.

break ;.

default : instrDefault ;}

Page 61: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

61

Les instructions de répétitiona – L’instruction while

while (condition)instruction ;

b – L’instruction dodo

instr ;while (condition)

c – L’instruction forfor ( initialisation, ; test ; incrementation)

La boucle for en java autorise plusieurs expressions séparées par une virgule à apparaître dans la partie initialisation et incrémentation mais pas dans la partie test

Exemple : for (i=1, j=10; (k<15);i++,j--)

Page 62: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

62

5- Les propriétés des méthodes

5 - 1 Signature d’une méthode

les méthodes sont les fonctions qu’on peut appliquer aux objets.

Elles permettent de changer l’état des objets ou de calculer des valeurs

Plusieurs méthodes d’une même classe peuvent avoir le même

nom, mais des paramètres différents ( surcharge) .

Le nom et le type des paramètres constituent la signature de la

méthode. Une méthode peut elle aussi posséder des modificateurs.

Page 63: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

63

Modificateur

abstract

Définition

Prototype de méthode

final

Une méthode qui ne peut pas être redéfinie.

protected

Méthode ne peut être invoquée que par des sous classes.

private

une méthode privée ne peut être utilisée que dans les méthodes de la même classe

public

méthode visible par toutes les autres méthodes

static

Méthode de classe indépendant des objets

Page 64: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

64

5 -2 Les méthodes statiques

Comme pour les attributs statiques , les méthodes statiques ont le modificateur static et sont indépendantes des instances

- Une méthode statique ne peut pas être redéfinie. Elle est automatiquement finale

Pour utiliser une méthode statique, on écrit :

NomClasse.nomMethodeStatique(arguments)

Cependant JAVA permet également d’utiliser :

nomObjet.nomMethodeStatique(arguments)

nomObjet étant une instanciation de la classe qui contient l’attribut ou la méthode statique

Page 65: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

65

5-3 – La surcharge

Si plusieurs méthodes possèdent le même nom mais

différent par l’ensemble des types de leurs arguments, ou par

l’ordre des types de leurs arguments, on dit qu’il y a

surcharge. Lorsqu’une méthode surchargée est invoquée , la

bonne méthode est choisie pour qu’il y ait correspondance

sur les paramètres de l’appel et les arguments de la méthode

Page 66: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

66

EXEMPLE class Surcharge{ int n ;

double x ;Surcharge( ){

n = 1 ;x = 3.5 ;}

Surcharge(int n, double x){

this.n = n ;this.x = x ;

}int operation(int p){ return 10*p +n ; }double operation (double y , int p){ return x*p + y ; }

double operation(int p, double y ){ return (double) n/p + y ;}

}

Page 67: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

67

public class EssaiSurcharge{

public static void main (String[] arg){

Surcharge surcharge ;surcharge = new Surcharge( ) ;System.out.println (surcharge.operation (2)) ;System.out.println (surcharge.operation (1.5 , 4)) ;System.out.println (surcharge.operation (4 , 1.5)) ;surcharge = new Surcharge(7 , 2.0) ;System.out.println (surcharge.operation (2)) ;

}}

Page 68: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

68

remarque :

si on ajoute l’instruction : (surcharge.operation (4 , 5)) ; il

y’aura erreur de compilation car ambiguité .Par contre s’il

n’y avait pas de surcharge (une seule méthode double

operation (double y , int p) ) cette même instruction ne

génerera pas d’erreur car transtypage automatique

Page 69: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

69

6 – Les tableauxLes tableaux en java sont des structures pouvant contenir un nombre fixe d ’éléments de

même nature. Chaque élément est accessible grâce à un indice correspondant à sa position dans le tableau.

 6-1 Déclaration d ’un tableau

Les tableaux doivent être déclarés comme tous les objets. Java dispose de deux syntaxes équivalentes pour la déclaration des tableaux,

type_elements[ ] tableau;ou

type_elements tableau[ ] ; Exemple : int [] tab1

int tab2[] 6-2 Création d’un tableau Comme tout objet java un tableau doit être crée après sa déclaration. Les tableaux java sont

de taille fixe.La création doit indiquer leur taille. La syntaxe à utiliser est la suivante :

x = new type[ dimension];dimension est le nombre d'éléments que le tableau pourra contenir.

69

Page 70: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

70

Exemple : class TableauA{ public static void main(String[] arg){int[] tableau ; tableau = new int[2];tableau[0]=-5;tableau[1]= 8for(int i=0 ;i<2 ;i++) System.out.println(tableau[i]); }}Autre façon de définir un tableau : On peut définir un tableau avec un tableau littéral au moment de sa déclaration.

Exemple: boolean tableau[ ] = {true,false,true}; int t[ ]={0, 5, 9, -45}

Page 71: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

71

6- 3 Longueur d’un tableau

On peut connaître la longueur d ’un tableau en utilisant l ’attribut length.Tableau.length est la longueur du tableau Tableau.

class TableauB{public static void main(String[ ] argv) { int tableau[ ]=new int[3]; System.out.println(‘’Taille du tableau : ‘’+ tableau.length) ;

} // affichera 3}

Remarque : Pour parcourir un tableau, il ne faut pas dépasser sa longueur (Tableau.length) sinon il y’aura une erreur à l’exécution.

Exemple : for (int i= 0 ; i <= Tableau.length; i++)générera une erreur

Page 72: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

72

6- 4 Tableau d’objets

Avec java, on peut aussi manipuler des tableaux d’objets Exemple:

class TableauD{ public static void main(String[] argv)  { Integer tableau[] = new Integer[4] ; //un tableau de 4 objets int somme = 0 ; for (int i=0 ; i<tableau.length ; i++)

tableau[i]= new Integer(i) ; for (int i=0 ; i<tableau.length ; i++) somme+=tableau[i].intValue() ; //intValue retourne l’attribut i System.out.println(‘’ La somme des entiers est ‘’+somme) ; }

}

Page 73: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

73

6-5 Tableau multidimensionnel :

Les tableaux de java peuvent comporter plusieurs dimensions. Pour

déclarer un tableau multidimensionnel, on doit utiliser la syntaxe suivante :

type [ ] [ ] [ ] tableau

Exemple : int[ ] [ ] tableau; // 2 dimensionsLa création du tableau peut être effectuée à l'aide de -L'opérateur new : int [][] x = new int[2][4]; ou-de  tableaux littéraux : int [ ][ ] tableau = {{1, 2, 3, 4},{5, 6, 7, 8}}; Pour accéder à tous les éléments du tableau, on utilise des boucles

imbriquées  Exemple : int [ ][ ] x = new int[2][4]; for (int i = 0; i < x.length; i++) // x.length : longueur de la 1ère imension

for (int j = 0; j < x[i].length; j++) //x[i].length : longueur de la 2dimension

Page 74: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

74

7- La saisie au clavier

-En java, le clavier est un fichier représenté par un

objet particulier de La classe java.io.BufferedReader qui

admet le constructeur :

BufferedReader (InputStreamReader objet)

Pour représenter le clavier, on doit instancier la classe

BufferedReader comme suit :

BufferedReader (new InputStreamReader(System.in))

La méthode readLine de BufferedReader permet de

lire une ligne

Page 75: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

75

Exemple : Ecrire une application qui permet de lire 3 entiers à partir du clavier et d'en faire la somme.import java.io.*; public class SaisieClavier { static int somme = 0; static int a,b,c; static int lire_entier()throws IOException { BufferedReader entree = new BufferedReader (new InputStreamReader(System.in)); int i=0; i=Integer.parseInt(entree.readLine()); // conversion en entier return i; }

public static void main(String[] argv)throws IOException { System.out.println(« Entrer au clavier 3 entiers : ») ;

a=lire_entier(); b=lire_entier(); c=lire_entier();

somme=a+b+c;

System.out.println("La somme vaut : "+somme);} }

Page 76: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

76

8- LES CHAINES DE CARACTERESEn Java, les chaînes de caractères sont des objets

de la classe java.lang.String ou java.lang.StringBuffer

8-1 Les chaînes de caractères de type String

-La classe java.lang.String est une classes dont les objets sont immuables (ils ne peuvent pas changer de valeur)

-La JVM crée un objet de type String à la rencontre d’une série de caractères entre doubles apostrophes.

- Les chaînes de caractères (String) peuvent se

concaténer à l’aide de l’opérateur +.

Page 77: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

77

8- LES CHAINES DE CARACTERES

- Les Constructeurs de java.lang.StringString() Construit la chaîne vide String(byte[] bytes) Construit une chaîne de caractères à partir

d’un tableau d’octets String(byte[] bytes, int offset, int length)

Construit une chaîne de caractères à partir d’une partie de tableau d’octets

String(byte[] bytes, int offset, int length, String enc)

Construit une chaîne de caractères à partir d’une partie de tableau d’octets, et d’un encodage

String(byte[] bytes, String enc)

Construit une chaîne de caractères à partir d’un tableau d’octets, et d’un encodage

String(char[] value) Construit une chaîne de caractères à partir d’un tableau de caractères

String(char[] value, int offset, int count)

Construit une chaîne de caractères à partir d’une partie de tableau de caractères

String(String value) Construit une chaîne à partir d’une autre chaîne.

String(StringBuffer buffer)

Construit une chaîne à partir d’une autre chaîne de typr StringBuffer.

Page 78: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

78

int compareTo(Object o) Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0

int compareTo(String anotherString) Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0. La comparaison est une comparaison lexicographique.

int compareToIgnoreCase(String str) Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0. La comparaison est une comparaison lexicographique, ignorant la casse.

boolean equals(Object anObject) Compare la chaîne a un objet et retourne true en cas d’égalité et false sinon

boolean equalsIgnoreCase(Object anObject)

Compare la chaîne a un objet et retourne true en cas d’égalité et false sinon ( on ignore la casse)

boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)

Teste l’égalité de deux parties de chaînes

boolean regionMatches(int toffset, String other, int ooffset, int len)

Teste l’égalité de deux parties de chaînes

- Les Comparaisons de chaînes de caractères

Page 79: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

79

char charAt(int i) Retourne le caractère à l’indice spécifié en paramètre.

String substring(int d) Sous-chaîne depuis d jusqu’à la fin

String substring(int d, int f) Sous-chaîne depuis d jusqu’au caractère d’indice f non inclus.

boolean startsWith(String prefix) Renvoie true si prefix est un préfixe de la chaîne

boolean startsWith(String prefix, int i)

Renvoie true si prefix est un préfixe de la chaîne à partir de i.

boolean endsWith(String suffix)

Retourne true si suffix est un suffixe de la chaîne

- Les Caractères et sous-chaîne.

Page 80: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

80

String toLowerCase() Retourne une chaîne égale à la chaîne convertie en minuscules.

String toLowerCase(Locale locale)

Retourne une chaîne égale à la chaîne convertie en minuscules.

String toString() Retourne une chaîne égale à la chaîne

String toUpperCase() Retourne une chaîne égale à la chaîne convertie en majuscules.

String toUpperCase(Locale locale)

Retourne une chaîne égale à la chaîne convertie en majuscules.

String trim() Retourne une chaîne égale à la chaîne sans les espaces de début et de fin.

String replace(char ac, char nc)

Retourne une chaîne ou tous les ac ont été remplacé par des nc. S’il n’y a pas de remplacement, la chaîne elle-même est retournée.

- Les Conversions

Page 81: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

81

int indexOf(int ch) Retourne l’indice de la première occurrence du caractère

int indexOf(int ch, int fromIndex) Retourne l’indice de la première occurrence du caractère à partir de fromIndex

int indexOf(String str) Retourne l’indice de la première occurrence de la chaîne

int indexOf(String str, int fromIndex) Retourne l’indice de la première occurrence de la chaîne à partir de fromIndex

int lastIndexOf(int ch) Retourne l’indice de la dernière occurrence du caractère

int lastIndexOf(int ch, int fromIndex) Retourne l’indice de la dernière occurrence du caractère à partir de fromIndex

int lastIndexOf(String str) Retourne l’indice de la dernière occurrence de la chaîne

int lastIndexOf(String str, int fromIndex) Retourne l’indice de la dernière occurrence de la chaîne à partir de fromIndex

- La recherche dans une chaîne de caractère

Page 82: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

82

Exemple :public class Chaine1 { String ch1="langage" ; String ch2= " java" ; String ch3=ch1+ch2; void affiche_longueur() { System.out.println(ch1+" a pour longueur " + ch1.length()); System.out.println(ch2+" a pour longueur " + ch2.length()); System.out.println(ch3+" a pour longueur " + ch3.length()); } void affiche_caractere(String ch) { for(int i = 0;i<ch.length();i++) System.out.println(ch+" à l'indice "+i+" = "+ch.charAt(i)); } public static void main(String[] arg) { Chaine1 obj = new Chaine1(); obj.affiche_longueur(); obj.affiche_caractere(obj.ch3); }

}

Page 83: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

83

8-2 Les chaînes de caractères de type StringBuffer

Pour une utilisation plus évoluée d’une chaîne de caractères on peut utiliser des objets de la classe java.lang.StringBuffer qui contient des méthodes qui ne sont pas définies dans la classe String (append,.setLength,…)

Les objets de cette classe contiennent des chaînes de caractères variables, ce qui permet de les agrandir ou de les réduire.

La classe StringBuffer dispose de nombreuses méthodes qui permettent de modifier le contenu de la chaîne de caractère

Page 84: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

84

StringBuffer() Construit une chaîne vide de capacité initiale de 16 caractères.

StringBuffer (int l) Construit une chaîne vide de capacité initiale de l caractères.

StringBuffer (String s) Construit une chaîne de caractères à partir de la chaîne s

- Les Constructeurs de la classe StringBuffer

int capacity() la capacité de la chaîne de caractères : longueur maxint length() la longueur de la chaîne de caractèresvoid setLength (int n) la longueur de la chaîne est n ; les caractères éventuellement ajoutés ont une valeur indéterminée.

Page 85: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

85

StringBuffer append(boolean b) Concatène la représentation en chaîne du booléen.

StringBuffer append(char c) Concatène la représentation en chaîne du caractère.

StringBuffer append(char[] str) Concatène la représentation en chaîne du tableau de caractères.

StringBuffer append(char[] str, int offset, int len)

Concatène la représentation en chaîne du tableau de caractères.

StringBuffer append(double d) Concatène la représentation en chaîne du double.

StringBuffer append(float f) Concatène la représentation en chaîne du float.

StringBuffer append(int i) Concatène la représentation en chaîne du int.

- Concaténation

Page 86: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

86

- Caractère et sous-chaîne.

char charAt(int i) Retourne le caractère à l’indice spécifié en paramètre.

String substring(int i) Sous chaîne depuis i jusqu’à la fin

String substring(int i, int l)

Sous chaîne depuis i et de longueur l.

- Conversion

String toString() Retourne une chaîne égale à la chaîne

- Modifications

StringBuffer delete(int start, int end) Enlève tous les caractères compris entre start et end.

StringBuffer deleteCharAt(int index) Enlève le caractère à l’indice index

Page 87: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

87

8-2 Les chaînes de caractères de type StringBufferExemple : utilisation de la longueur et de la capacité

public class Chaine2 {static StringBuffer stb1,stb2; public static void main(String[ ] arg) { stb1=new StringBuffer(); stb2=new StringBuffer(10); System.out.println("stb1 a pour longueur "+stb1.length()); //0 System.out.println("stb1 a pour capacité "+stb1.capacity()); //16 System.out.println("stb2 a pour longueur "+stb2.length()); //0 System.out.println("stb2 a pour capacité "+stb2.capacity()); //10 stb1=new StringBuffer("Chaine"); System.out.println("stb1 a pour longueur "+stb1.length()); //6 System.out.println(stb1+ " pour capacité "+stb1.capacity()); //22=16+6 stb1.append(" StringBuffer"); System.out.println(stb1+" a pour longueur "+stb1.length());//19 System.out.println(stb1+" a pour capacité"+stb1.capacity()); //22 stb1.setLength(3); System.out.println(stb1+" a pour longueur "+stb1.length()); //3 System.out.println(stb1+" a pour capacité"+stb1.capacity());//22 } }

Page 88: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

88

9 – OPERATIONS SUR LES OBJETS

9 – 1 L’affectation = ObjetA = ObjetB ObjetA désigne le même objet que ObjetB, c’est

la copie de référenceToute modification effectué sur l’objet référencée par objetA sera répercuté sur l’objet référencée par objetB et vice versa.

Exemple : class Copie { public static void main(String[] argv){int[ ] tableau = {1,2};

int[ ] table ;

table = tableau;

table[0] =7; System.out.println(‘‘tableau contient :’’ + tableau[0] +tableau [1]);/* tableau[0]=7 et tableau[1]=2 */}}

Page 89: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

89

9 –2 Egalité entre objets

Si obj1 et obj2 sont deux références d’objets de la même classe.(obj1== obj2) est vraie si ces deux références obj1 et obj2 désignent

le même objetExemple : class C1 { } public class Egalite { public static void main( String[] arg) { C1 obj1,obj2,obj3; obj1=new C1(); obj2=new C1(); obj3=obj1; System.out.println(obj1==obj2); // false System.out.println(obj1==obj3); //true } }  

Page 90: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

90

 

  9– 3 L’objet null 

L’objet null n’appartient pas à une classe, mais il peut être utilisé en lieu et place d’un objet de toute classe,

public class Case{ int val ;

Case (int val ) // Constructeur de la classe Case{ this.val=val ; }boolean estEgal (Case c)/* Méthode estEgal avec un paramètre objet de type Case */{ return val = = c.val ; }

}public class DemoNull{ public static void main (String[] arg)

{Case c1 = new Case (10) ;Case c2 = new Case (15) ;Case c3 = null ;System.out.println (‘‘ c1 = =c2 :’’+c1.estEgal(c2)) ; System.out.println (‘‘ c1= =c3 :’’+ c1.estEgal(c3)) ; System.out.println (‘‘c1= =null:’’+c1.estEgal(null));

} }/* Le programme se compile correctement, en revanche son exécution est interrompue

à la ligne c1.estEgal(c3) puisque c3 = null et on ne peut pas accéder à c3.val (dans la méthode estEgal ) */

Page 91: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

91

Chapitre 3 HERITAGE ET INTERFACES EN JAVA  

1 – GENERALITES SUR L’HERITAGE EN JAVA 2 – LA CLASSE java.lang.Object 3 – MASQUAGE DES ATTRIBUTS ET

REDEFINITION DES METHODES4 – CASTING OU TRANSTYPAGE

5 – LES INTERFACES

6 – LES CLASSES ABSTRAITES

Page 92: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

92

Chapitre 3 HERITAGE ET INTERFACES EN JAVA  1 – GENERALITES SUR L’HERITAGE EN JAVA 

1 – 1 Définition de l’héritage

L’héritage est l’un des aspects les plus utiles de la

programmation orientée objet. Il permet à une classe de

transmettre ses attributs et ses méthodes à des sous classes.

Ainsi, si une classe B hérite d’une classe A, alors la classe B

contient implicitement l’ensemble des attributs non privés de A et

peut invoquer toutes les méthodes non privées de la classe A.

 

Page 93: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

93

1- 2 – Déclaration de l’héritage

  En java, pour déclarer l’héritage, on utilise le mot clé extends

Syntaxe : class B extends A :        

B hérite de A

        B est dérivée de A

        B est une sous classe de A

       A est la super classe de B

Page 94: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

94

 

1-3 – Propriétés de l’héritage  

-En java, l’héritage est simple, toute classe ne peut hériter que

d’une et une seule classe. Si une classe n’hérite d’aucune autre

classe, elle hérite par défaut de la super classe Object définie dans

la package java.lang

-Une référence à une classe de base peut être affectée d’une

référence à une classe dérivée, l’inverse doit faire l’objet d’une

opération de conversion de type ou  cast : class A {}class B extends A {}Soient les instructions : A a= new A();

B b= new B();a=b; // possibleb= a; // fauxb= (B) a; // peut être possible

Page 95: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

95

 1-3 – Propriétés de l’héritage -Exemple : class Pere{ final String nom_famille; // nom de famille est constant par objet Pere Pere (String nom_famille) // constructeur { this.nom_famille=nom_famille; } }class Fils extends Pere{String prenom; Fils(String nom) // Constructeur {super(nom);} // Appel du constructeur de la super classe (Pere) public static void main(String[] arg) { Pere sonPere= new Pere("SEDRATI"); Fils monFils = new Fils(sonPere.nom_famille); // monFils est de type Pere System.out.println(" Nom de famille de mon fils " + monFils.nom_famille); monFils.prenom="Anass"; System.out.println(" Prénom de mon fils "+monFils.prenom); // sonPere.prenom="Driss"; Faux sonPere= monFils; // est possible car monFils est de même type que son père monFils=sonPere; est faux ( la réciproque) }}

Page 96: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

96

 1-3 – Propriétés de l’héritage -Si la déclaration d’une classe est précédée de final, alors cette classe ne peut pas être une super classe

final class Mere{ }class Fille extends Mere { }// erreur de compilation car la classe Mere ne peut avoir d’enfants

- Si le constructeur par défaut d’une classe dérivée est défini mais ne commence pas par un appel de constructeur de la classe mère, Java insère un appel du constructeur par défaut de la classe mère.

Page 97: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

97

 1-4- Opérateurs : super et instanceof

- L’opérateur super : Pour faire référence à la classe parente (super

classe) , il suffit d’utiliser le mot clé super. Ce mot permet d’invoquer un attribut ou une méthode de la super classe

On utilise super(arguments) pour invoquer le constructeur de la super classe ayant les arguments correspondants

- L’opérateur instanceof : L’opérateur instanceof  permet de savoir à quelle

classe appartient une instance : 

Page 98: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

98

 1-4- Opérateurs : super et instanceof class A { } class B extends A { } public class C { public static void main(String[] arg) { A a= new A(); B b = new B(); C c = new C(); System.out.println( a instanceof A ); // true System.out.println( a instanceof B );//false System.out.println( b instanceof A );//true System.out.println( b instanceof B );//true a=b; System.out.println( a instanceof A );//true System.out.println( a instanceof B );//true //System.out.println( c instanceof A ); :erreur de compilation

//(c et A ne sont pas de même type) } }

Page 99: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

99

1-5- Un exemple de l’héritage

Prenons la hiérarchie suivante :

Les classes Fonctionnaire, Profession_liberale, Eleve et Chomeur sont dérivés de la classe Personne

Personne

Fonctionnaires Profession_liberale

MedecinPublic EnseiganttAvocat Commerçant Primaire

Chomeur

….

Eleve

Page 100: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

100

 1-5- Exemple

class Personne // la super classe { final String nom; final int annee_naissance; String adresse; // sauf pour les SDF!! Personne(String nom,int annee_naissance) {this.nom=nom; this.annee_naissance= annee_naissance;} String getNom() { return nom;} int getNaissance() { return annee_naissance;} public String toString() { return("Je suis "+getNom()+" et je suis +

getClass()).getNom();} }

Page 101: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

101

 1-5- Exemple

class Fonctionnaire extends Personne {int numeroSomme; double salaire; String fonction; Fonctionnaire(String nom,int annee_naissance,int numeroSomme) {super(nom,annee_naissance); this.numeroSomme=numeroSomme; } double getSalaire() { return salaire;} }

class MedecinPublic extends Fonctionnaire { String specialite; MedecinPublic(String nom,int annee_naissance,int numeroSomme, String specialite) { super(nom,annee_naissance,numeroSomme); this.specialite=specialite; } }

Page 102: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

102

 1-5- Exemple

class Profession_liberale extends Personne {int numeroCNSS; double salaire; String fonction; double patente; // impot Profession_liberale(String nom,int annee_naissance, int numeroCNSS) {super(nom,annee_naissance); this.numeroCNSS=numeroCNSS; } }class Chomeur extends Personne {String diplome; Chomeur(String nom,int annee_naissance) {super(nom,annee_naissance);} }

Page 103: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

103

 1-5- Exemple

class Eleve extends Personne {String classe; int numeroEleve; Eleve(String nom,int annee_naissance,String classe, int numeroEleve) {super(nom,annee_naissance); this.numeroEleve=numeroEleve; this.classe=classe; } }

public class Heritage { public static void main(String[] arg) { Personne[] desPersonnes= new Personne[4]; desPersonnes[0]= new Fonctionnaire("F",1980,10); desPersonnes[1]= new MedecinPublic("M",1970,100," cardiologue"); desPersonnes[2]= new Eleve("E",1990,"INE1",20); desPersonnes[3]= new Chomeur("C",1980);

Page 104: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

104

 1-5- Exemple

for(int i=0;i<desPersonnes.length;i++) System.out.println(desPersonnes[i]); } }

- A l’exécution :Je suis F et je suis FonctionnaireJe suis M et je suis MedecinPublicJe suis E et je suis EleveJe suis C et je suis Chomeur

Page 105: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

105

 2- LA CLASSE java.lang.Object

La classe d’entête public class Object est la super classe de

toutes les classes Java : toutes ses méthodes sont donc héritées par

toutes les classes.

Voici quelques méthodes élémentaires de la classe Object

2.1. La méthode public final Class getClass()

La méthode getClass() renvoie un objet de la classe Class qui représente

la classe de l'objet.

Le code suivant permet de connaitre le nom de la classe de l'objet

Exemple : String nomClasse = monObject.getClass().getName();

Page 106: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

106

 2- LA CLASSE java.lang.Object

2-2 La méthode public String toString()

La méthode toString() permet d'obtenir la représentation d'un

objet quelconque par une chaîne de caractères. Ainsi lorsque une

référence r vers un objet de classe quelconque est dans une expression

en lieu et place d'une chaîne de caractères c'est en fait la chaîne

retournée par le message r.toString() qui est utilisée dans l'expression.

La méthode toString de la classe Object retourne une chaîne

correspondant au nom de la classe de l'objet suivi de @ suivi de

l'adresse mémoire de la structure de données définissant les

caractéristiques de l'objet (cette adresse est la valeur contenue dans la

variable référencant l'objet).

La méthode toString() est souvent redéfinie

Page 107: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

107

 2- LA CLASSE java.lang.Object Soit la classe Livre définie comme suit public class Livre { double prix; String titre; String auteur; public Livre(double p, String t, String a) { prix=p; titre = t; auteur = a; } public static void main(String[] arg) { Livre monLivre= new Livre(50.00,"Programmation en langage Java","Mme A. BENOMAR"); System.out.println(monLivre); // La classe Livre ne redéfinissant pas la méthode toSTring // c'est celle héritée de la classe Object qui est invoquée. }}// A l'exécution, on aura : Livre@ba34f2

Page 108: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

108

 2- LA CLASSE java.lang.Object

Exemple 2 : Utilisation de la méthode toString() redéfinie

public class Livre2 { String titre; String auteur; public Livre2(double p, String t, String a) { prix=p; titre = t; auteur = a; }

public String toString() { return ("Titre : " +titre +"\n"+"Auteur : " + auteur + "\n" + "Prix : " + prix); }

Page 109: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

109

 2- LA CLASSE java.lang.Object

Exemple 2 : Utilisation de la méthode toString() redéfinie

public static void main(String[] arg)

{ Livre2 monLivre= new Livre2(50.00,"Programmation en langage Java","Mme A. BENOMAR");

System.out.println(monLivre);

// La classe Livre redéfinit la méthode toSTring

// c'est celle redéfinie qui est invoquée.

}

}

- A l'exécution, on aura :

Titre : Programmation en langage Java

Auteur : Mme A. BENOMAR

Prix : 50.0

Page 110: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

110

 2- LA CLASSE java.lang.Object

2-3. La méthode public boolean equals(Object obj)

La méthode equals() implémente une comparaison par défaut.

Sa définition dans Object compare les références : donc

obj1.equals(obj2) ne renverra true que si obj1 et obj2 désignent le

même objet. Dans une sous classe de Object, pour laquelle on a

besoin de pouvoir dire que deux objets distincts peuvent être égaux,

il faut redéfinir la méthode equals héritée de Object.

- Dans la classe Object cette méthode est définie comme suit :

public boolean equals(Object obj)

{ return (this == obj); }

Page 111: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

111

 2- LA CLASSE java.lang.Object

2-3. La méthode public boolean equals(Object obj)

Exemple 1 : Utilisation de la méthode equals héritée

public class LivreCompare

{ double prix;

String titre;

String auteur;

public LivreCompare(double p, String t, String a)

{ prix=p;

titre = t;

auteur = a;

}

Page 112: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

112

 2- LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj) Exemple 1 : Utilisation de la méthode equals héritée

public static void main(String[] arg) { LivreCompare l1 = new LivreCompare(50.00,"Programmation en langage Java","Mme A. BENOMAR"); LivreCompare l2 = new LivreCompare(50.00,"Programmation en langage Java","Mme A. BENOMAR"); System.out.print("Les livres référencés par l1 et l2 sont "); if (l1.equals(l2)) /* ici équivalent à l1 == l2 puisque la méthode equals n'est pas redéfinie. On compare le contenu des deux références l1 et l2 (c'est à dire les adresses mémoire des deux Livres */ System.out.println("identiques"); else System.out.println("différents"); }

}- A l’exécution : les livres référencés par l1 et l2 sont différentsRemarque : Pour avoir un comportement plus conforme à ce que l'on attend pour la méthode equals il faudrait redéfinir celle-ci

Page 113: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

113

 2- LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)

Exemple 2 : Utilisation de la méthode equals redéfinie

public class LivreCompare2

{

double prix;

String titre;

String auteur;

public LivreCompare2(double p, String t, String a)

{ prix=p;

titre = t;

auteur = a; }

public boolean equals(LivreCompare2 l)

{ return (this.titre.equals(l.titre) && this.auteur.equals(l.auteur) && this.prix == l.prix); }

Page 114: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

114

 2- LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)

Exemple 2 : Utilisation de la méthode equals redéfinie

public static void main(String[] arg)

{ LivreCompare2 l1 = new LivreCompare2 (50.00, "Programmation en langage Java","Mme A. BENOMAR");

LivreCompare2 l2 = new LivreCompare2 (50.00, "Programmation en langage Java","Mme A. BENOMAR");

System.out.print("Les livres référencés par l1 et l2 sont ");

if (l1.equals(l2)) // ici on compare les attributs de l1 et l2

System.out.println("identiques");

else

System.out.println("différents");

}

- A l’exécution : les livres référencés par l1 et l2 sont identiques

Page 115: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

115

 2- LA CLASSE java.lang.Object

2-4. La méthode protected void finalize()

A l'inverse de nombreux langages orientés objet tel que le C++ ou Delphi, le programmeur Java n'a pas à se préoccuper de la destruction des objets qu'il instancie. Ceux-ci sont détruits et leur emplacement mémoire est récupéré par le ramasse miette de la machine virtuelle dès qu'il n'y a plus de référence sur l'objet.

La machine virtuelle garantit que toutes les ressources Java sont correctement libérées mais, quand un objet encapsule une ressource indépendante de Java (comme un fichier par exemple), il peut être préférable de s'assurer que la ressource sera libérée quand l'objet sera détruit. Pour cela, la classe Object définit la méthode protected finalize, qui est appelée quand le ramasse miettes doit récupérer l'emplacement de l'objet ou quand la machine virtuelle termine son exécution

Page 116: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

116

3- Masquage des attributs et redéfinition des méthodes

- On dit qu’un attribut d’une classe masque un attribut

d’une super classe s’il a le même nom qu’un attribut de la super

classe

- On dit qu’une classe redéfinit une méthode d’une super

classe si elle définie une méthode ayant même nom, même suite

de types d’arguments et même valeur de retour qu’une méthode

de la super classe

 

Il y’a une différence dans la façon dont le masquage d’attributs et

la redéfinition des méthodes sont traitées en java

Page 117: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

117

3- Masquage des attributs et redéfinition des méthodes

Supposons qu’une classe A possède un attribut attr et une méthode

meth et qu’une classe B étendant A définisse un attribut de même nom attr et

redéfinisse la méthode meth.

Considérons alors les déclarations suivantes :

A a // déclaration d’ un objet a de la classe A

B b = new B() ; // declaration et creation d’un objet b de la classe B

a = b ; // Tout objet de B est objet de A

Alors :

b.attr est l’attribut attr de la classe B

a.attr est l’attribut attr de la classe A

Par contre :

b.meth est la méthode redéfinie dans B

a.meth est la méthode redéfinie dans B

 

Page 118: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

118

class A { int attr=10; void meth() { System.out.println("Je suis la méthode de A"); } }  class B extends A { int attr=20; void meth() { System.out.println("Je suis la méthode de B"); } }  public class Masque { public static void main(String[] argv) { A a ; B b = new B(); a=b;// car b est aussi un objet de la classe A (héritage) System.out.println("b.attr= "+b.attr); System.out.println("a.attr= "+a.attr); b.meth(); a.meth(); } }

Page 119: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

119

A l'exécution , on aura : b.attr= 20 a.attr= 10 Je suis la méthode de B Je suis la méthode de B */

Page 120: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

120

4- casting ou transtypage

Le casting (mot anglais qui signifie moulage ), également appelé transtypage, consiste à effectuer une conversion d’un type vers un autre type. Le casting peut être effectué dans deux conditions différentes :

 

·        Vers un type plus général. On parle alors de sur-casting.

 

·        Vers un type plus particulier. On parle alors de sous- casting.

 

- Dans le cas des primitives, le sur-casting consiste à convertir vers un type dont la précision est supérieure. C'est le cas, par exemple, de la conversion d'un byte en short, d'un int en long ou d'un float en double. On parlera en revanche de sous-casting lors de la conversion d'un type vers un autre de précision inférieure, par exemple de double en float, de long en int ou de short en byte.

 

Page 121: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

121

4- casting ou transtypage

A l'inverse du sur-casting, le sous-casting présente un risque

de perte d'informations. C'est pourquoi Java est autorisé à effectuer

de façon implicite un sur-casting, alors qu'un sous-casting doit être

demandé explicitement par le programmeur.

 

-Un casting explicite peut être effectué simplement en faisant

précéder la valeur par l'indication du nouveau type entre parenthèses

Page 122: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

122

Exemple : class Casting{ static float f1,f2; static double d1,d2; public static void main (String[] arg) { f1=(float)10.5; // sous casting 10.5 est considérée double d1=f1; // pas de problème sur casting implicite : float en double //Java est autorisé à effectuer de façon implicite un sur-casting System.out.println("d1 est égal à :"+d1);  d2=12.5; // f2=d2 est interdit sous-casting doit être demandé explicitement. f2= (float) d2;// conversion d'un double en float : sous casting explicite System.out.println("f2 est égal à :"+f2); } } d1 est égal à :10.5f2 est égal à :12.5

Page 123: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

123

Casting des objets

Il est possible d’utiliser le casting d’objets. Cela nécessite une conversion de classe.

Exemple :

class Animal{ }

class Chien extends Animal{ int taille = 80; }

class Conversion{ public static void main (String[] argv) { Chien chien; // déclaration d’un objet de type Chien Animal animal = new Chien (); chien = (Chien)animal; System.out.println(" Ce chien mesure : "+ chien.taille +" cm");

Page 124: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

124

Casting des objets

animal = new Animal(); // création d’un objet de type Animal

// chien = (Chien)animal; //erreur d’execution

System.out.println(" Tout animal ne peut pas être converti en chien");

}

}

A l’exécution :

Ce chien mesure : 80 cm

Tout animal ne peut pas être converti en chien

Page 125: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

125

5 - LES INTERFACES 5-1 – Définition d’une interface  

Une interface est un type purement abstrait au sens où il ne définit aucune implémentation et ne comporte pas de constructeur : une interface déclare uniquement des méthodes publiques

Une interface ne contient que des prototypes de méthodes et des constantes ayant les modificateurs static et final

Une interface sert à regrouper des constantes et à traiter des objets qui ne sont pas tous nécessairement de la même classe mais qui ont en commun une partie . Cette partie sera gérée par l’interface

Les interfaces portent souvent des noms se terminant en able. Par exemple (Comparable ,Runnable, …)

Page 126: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

126

5-2- Présentation d’une interface

 Une interface se compose de deux parties : - l’en-tête- le corps

Entête d’une interface  [modificateur] interface <Nom> [extends interface>] 

[ ] : optionnel

< > : obligatoire

gras : mot clé

Page 127: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

127

Remarques : - Une interface peut avoir le modificateur public . - Une interface est toujours abstract sans qu’il soit nécessaire de l’indiquer  - Elle peut être attribuée à un package . Si elle ne l’est pas, elle fera partie du package par défaut - Une interface peut dériver de plusieurs autres interfaces ( héritage multiple pour les interfaces et non pas pour les classes)  interface I1 { } abstract interface I2 //abstract n’est âs nécessaire {}

public interface I3 extends I1,I2 //héritage multiple {} 

Page 128: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

128

Corps d’une interface

Le corps d’une interface contient une liste de constantes et de

prototypes de méthodes.

La syntaxe d’une déclaration d’une interface est la suivante :

entête

{

déclarations des constantes et des prototypes de méthodes

}

Exemple : interface Ecriture

{ static final int LIGNE_MAX = 50 ;

void ecrire() ;

}

Page 129: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

129

5- 3 Utilisation d’une interface

- Pour utiliser une interface , on doit utiliser le mot clé implements

suivi de la liste des interfaces dont la classe dérive ,séparées par

des virgules. exemple : class A implemets I1, I2

 

- Une interface I peut être implémentée par une classe A signifie :

* La classe A déclare implémenter l’interface I

* Toutes les méthodes figurant dans l’interface I doivent être

définie par la classe A

  * Une classe qui implémente une interface devra déclarer publiques

toute les méthodes définies de l’interface

 

- Si une classe A implémente une interface I, les sous classes de A

implémentent aussi automatiquement I

Page 130: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

130

Utilisation d’une interface

Une interface peut être utilisée comme une classe.

Si I est une interface, on pourra référencer par objI de

type I n’importe quel objet d’une classe implémentant

l’interface I et on pourra appliquer à cet objet une

méthode déclarée dans l’interface ( qui est

nécessairement redéfinie dans la classe de l’objet

référencée par i)

Page 131: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

131

interface I { ………………………. }

class A Implements I { ……………………………… }

class B implements I { ……………………………………. }

public class C implements I { public static void main(String[] arg) {

I objI; objI= new A();objI = new B(); } }

Page 132: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

132

5- 4 Exemple d’utilisation d’une interfaceinterface Demeure { void affiche_commentaire(); }

class Appartement implements Demeure { public void affiche_commentaire() { System.out.println("La demeure est un joli appartement") ;} }

class Villa implements Demeure { public void affiche_commentaire() { System.out.println("La demeure est une villa splendide") ;} }

class Baraque implements Demeure { public void affiche_commentaire() { System.out.println("La demeure est une baraque : seul abri des pauvres") ;} }

Page 133: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

133

public class UtiliseInterface { public static void main(String[] argv) {

Demeure[] table_demeures= new Demeure[3];

table_demeures[0] = new Appartement();

table_demeures[1] = new Villa();

table_demeures[2] =new Baraque();

for(int i=0;i<table_demeures.length;i++)

table_demeures[i].affiche_commentaire();

}

}

Page 134: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

134

6 – DEFINITION D’UNE CLASSE ABSTRAITE  

- Une classe abstraite est une classe qui contient au

moins une méthode abstraite, elle doit être déclarée avec le

modificateur abstract

 

- Dans une classe, une méthode est dite abstraite si

seul son prototype figure. Elle n’a pas de définition explicite

  

- Une classe abstraite ne peut pas être instanciée , il

faut l’étendre pour pouvoir l’utiliser

Page 135: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

135

EXEMPLE : UNE CLASSE ABSTRAITE POUR MODELISER DES FORMES GEOMETRIQUES

 La classe Forme modélise des formes géométriques planes. Elle contient deux

méthodes abstraites (perimetre et surface) et deux méthodes non abstraites (estPlutotRond et description)

abstract class Forme{ abstract float perimetre(); abstract float surface(); boolean estPlutotRond()

{ float lePerimetre=perimetre(); return surface() <= lePerimetre*lePerimetre/16;}void description()

{ if(estPlutotRond())

System.out.println(this + "s'etale au moins comme uncarre");else

System.out.println(this + "s'etale moins q'un carre"); }}  

Page 136: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

136

 

La classe Disque étend la classe Forme et définit les deux méthodes abstraites

de celle ci . Elle définit aussi la méthode toString de java.lang.Object class Disque extends Forme { private int rayon; Disque( int rayon) { this.rayon=rayon ; } float perimetre(){ return (float)(2*Math.PI*rayon);}  float surface() { return (float)Math.PI*rayon*rayon; }  public String toString() // redéfinition de la méthode toString {return ("Le disque de rayon "+ rayon); }} //fin de la classe

Page 137: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

137

La classe Rectangle étend la classe Forme et définit les deux méthodes

abstraites de celle ci . Elle définit aussi la méthode toString de java.lang.Object

class Rectangle extends Forme { private int longueur,largeur; Rectangle (int longueur, int largeur) { this.longueur=longueur; this.largeur=largeur; }  float perimetre() { return 2* (longueur+largeur) ; }  float surface() { return longueur*largeur; }  public String toString() { return ("Le rectangle de longueur "+longueur+ "et de largeur "+largeur); }}

Page 138: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

138

La class EssaiForme montre qu’on peut référencer avec une variable de type Forme un objet Disque ou bien un objet Rectangle puisque ces deux dernières classes héritent de la classe Forme

class EssaiFormes{ public static void main(String[] argv ) { Forme[] desFormes = new Forme[5];

desFormes[0]=new Disque(1); desFormes[1]=new Disque(2); desFormes[2]=new Disque(3); desFormes[3]=new Rectangle(1,1); desFormes[4]=new Rectangle(2,1);  for (int i = 0 ; i < desFormes.length ; i++)

desFormes[i].description(); }}

Page 139: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

139

Chapitre 4 LES COLLECTIONS DE DONNEES

INTRODUCTION

1- GENERALITES SUR LES COLLECTIONS EN JAVA

2- L’INTERFACE java.util.Collection

3- LES LISTES

4- LES ENSEMBLES

5- LES MAP

6- LES CLASSES UTILITAIRES

Page 140: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

140

Chapitre 4 LES COLLECTIONS DE DONNEES

IntroductionLes collections permettent de stocker un nombre variable d'éléments de

types identiques ou différents. Les collections se démarquent des

tableaux dans la mesure ou elles ont la capacité de s'étendre et de

diminuer au gré, respectivement, des ajouts et des suppressions

d'éléments. Cela permet d'éviter de consommer des ressources

mémoires inutilement en initialisant un tableau à une taille prédéfinie en

sachant que celui-ci risque de ne pas être totalement rempli lors des

différentes étapes d'exécution d'un programme. Dans ce cas, une

collection possèdera la faculté d'adapter sa taille à tous changements.

Le principe de collections de données repose sur un ensemble d’outils

permettant de regrouper sous forme d'un objet unique différents

éléments (par exemple un ensemble de données constituant un répertoire

d’abonnés au téléphone).

Page 141: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

141

Chapitre 4 LES COLLECTIONS DE DONNEES

IntroductionLes collections permettent de stocker un nombre variable d'éléments de

types identiques ou différents. Les collections se démarquent des

tableaux dans la mesure ou elles ont la capacité de s'étendre et de

diminuer au gré, respectivement, des ajouts et des suppressions

d'éléments. Cela permet d'éviter de consommer des ressources

mémoires inutilement en initialisant un tableau à une taille prédéfinie en

sachant que celui-ci risque de ne pas être totalement rempli lors des

différentes étapes d'exécution d'un programme. Dans ce cas, une

collection possèdera la faculté d'adapter sa taille à tous changements.

Le principe de collections de données repose sur un ensemble d’outils

permettant de regrouper sous forme d'un objet unique différents

éléments (par exemple un ensemble de données constituant un répertoire

d’abonnés au téléphone).

Page 142: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

142

1- GENERALITES SUR LES COLLECTIONS JAVA1-1 Définition d’une collectionUne collection représente un groupe d'objets, connu par ses

éléments et utilisé pour stocker, rechercher et manipuler ces éléments

Les collections peuvent permettre des éléments en double (ou

doublons) à l'image des listes, ou parfois les interdisent telles que les

ensembles.

Le langage Java dispose de plusieurs outils destinés à gérer des

collections d’une façon unifiée qui met en oeuvre :

- des interfaces qui permettent la manipulation des collections

indépendamment de leurs représentations (l’interface Collection,

l’interface List, …)

- des classes qui implémentent les interfaces précédentes (la

classe Vector, ArrayList,…)

- des méthodes qui réalisent des opérations utiles (add(…),

contains(…),..)

Page 143: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

143

1- GENERALITES SUR LES COLLECTIONS JAVA1-2 Organisation des collectionsL’ensemble de ces outils java (interfaces, classes,

méthodes) qui permettent la mise en œuvre des collections est organisé dans le package java.util selon deux hiérarchies :

L’interface java.util.Collection et l’interface java.util.Map

Page 144: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

144

1- GENERALITES SUR LES COLLECTIONS JAVA

1 - 3 Le type Collection

*L’interface Collection représente les collections où tous les

éléments sont des structures capables de contenir des objets de

différents types accessibles séquentiellement Elle possède 3 sous

interfaces List, Set et SortedSet

* L’interface List représente une collection d’éléments dans

laquelle chaque élément peut être inséré (en début, fin ou à une

certaine position). Les éléments peuvent être dupliqués.

* L’interface Set représente une collection d’éléments dans

laquelle les éléments ne peuvent pas, être dupliqués . L’interface Set

met en oeuvre le concept d'ensemble.

* L’interface SortedSet représente un ensemble trié

Page 145: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

145

1- GENERALITES SUR LES COLLECTIONS JAVA

1 - 4 Le type Map

*L’interface Map permet de gérer des tableaux associatifs

qui permettent de lier un objet clé à un autre objet valeur.

L’interface Map représente une collection de couples (clé,

valeur); un Map ne peut contenir de doublon; à une clé

correspond une et une seule valeur; on accède aux valeurs

par leur clé.

* L’interface SortedMap représente un ensemble trié de

couples (clé,valeur).

Page 146: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

146

2- L'INTERFACE java.util.Collection

1 - 2 Architecture et organisation de l’interface Collection

L’interface Collection est utilisée pour transmettre des collections et les manipuler avec le maximum de généralités. Des sous-interfaces particulières sont fournies par ailleurs (Set, SortedSet ou List).

voici un aperçu de la hiérarchie L’interface java.util.Collection:

Page 147: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

147

2- L'INTERFACE java.util.Collection

2-2 Les méthodes de l'interface CollectionMéthode Description

boolean add(Object o) Ajoute l’élément donné

boolean addAll(Collection c) Ajoute tous les éléments de la collection donnée

void clear() Supprime tous les éléments de cette collection

boolean contains(Object o) Retourne true si cette collection contient l’élément donné

boolean containsAll(Collection c) Retourne true si cette collection contient tous les éléments de la collection

boolean equals(Object o) Vérifie l’égalité entre l’objet donné et la collection

int hashCode() Retourne la valeur de code de hashage de la collection

boolean isEmpty() Retourne true si cette collection ne contient aucun élément

Iterator iterator() Retourne un itérateur sur les éléments de cette collection

boolean remove(Object o) Supprime l’objet o de la collection

boolean removeAll(Collection c) Supprime tous les éléments de la collection

boolean retainAll(Collection c) Ne conserve que les éléments contenus dans la collection c

int size() Retourne le nombre d’éléments de la collection

Object[] toArray() Retourne un tableau contenant tous les éléments de cette collection

Object[] toArray(Object[] t) Retourne un tableau contenant tous les éléments de cette collection dont le type correspond à celui du tableau donné

Page 148: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

148

2-3 Les classes implémentant l'interface Collection

Les implémentations de l'interface Collection sont

AbstractCollection, AbstractList, AbstractSet, ArrayList,

HashSet, LinkedHashSet, LinkedList, TreeSet et Vector.

Toute classe implémentant l’une de ces interfaces

Collection devrait contenir un constructeur sans paramètre

créant une collection vide et un constructeur avec un

argument construisant une collection contenant les mêmes

éléments que son argument.

Page 149: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

149

3- LES LISTES

Une liste en java contient une séquence ordonnée d'éléments avec possibilité de doublons. Une liste en java est représentée par l’interface List.

Les éléments d’une liste sont accessibles soient par :- leur position ou indice (comme un tableau)- un itérateur

3 – 1 L’interface java.util.List

L’interface java.util.List est définie sous la forme : public interface List extends Collection

L'interface List étend l’interface Collection et ajoute les possibilités suivantes :

- Accès aux éléments par leur position; - Recherche de la position d'éléments;

L'interface List est implémentée par les classes AbstractList, ArrayList, LinkedList, et Vector.

Page 150: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

150

3-2 Méthodes ajoutées dans l'interface ListMéthode Description

void add(int index, Object element) insère un objet à l'index spécifié, au sein de la liste courante.

boolean addAll(int index, Collection c)insère tous les éléments de la collection spécifiée, à l'index donné au sein de la liste.

Object get(int index) retourne l'élément à la position spécifiée dans la liste.

int hashCode() retourne le code de hachage de la liste.

int indexOf(Object o)retourne la position de la première occurrence de l'objet au sein de la liste courante, ou -1 s'il n'a pu être trouvé.

int lastIndexOf(Object o)retourne la position de la dernière occurrence de l'objet spécifié au sein de la liste, ou -1 s'il n'a pu être trouvé.

ListIterator listIterator(int index)retourne un itérateur de liste sur les éléments de l'objet List à partir de la position spécifiée.

Object remove(int index. supprime l'élément positionné à l'index spécifié au sein de la liste.

Object set(int index, Object elementremplace l'élément à la position spécifiée dans la liste, par l'objet passé en argument.

List subList(int fromIndex, int toIndex.retourne une partie de la liste, délimitée par les index fromIndex inclus et toIndex exclus.

Object remove(int index). supprime l'élément positionné à l'index spécifié au sein de la liste.

Object set(int index, Object element)remplace l'élément à la position spécifiée dans la liste, par l'objet passé en argument.

List subList(int fromIndex, int toInindex. retourne une partie de la liste, délimitée par les index fromIndex inclus et toIndex exclus.

Page 151: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

151

3-3 La classe java.util.Vector

Son entête : public class Vector extends AbstractList implements

ListLa classe Vector permet de créer une collection

d'objets qui fonctionne de la même manière qu'un tableau, à l'exception que sa capacité peut varier en fonction des besoins.

Une allocation de mémoire dynamique est utilisée par les objets Vector, si bien qu'il est possible d'ajouter, de supprimer aisément leurs éléments, soit de faire varier leur taille dynamiquement.

De cette manière, un vecteur peut stocker un nombre quelconque d'objets de type Object, soit n'importe quel genre d'objets (String, Integer, URL, Date, etc.). Par contre, un vecteur n'accepte pas les valeurs de types primitifs qui doivent être converties en objet par l'intermédiaire de leur classe s (double -> Double, char -> Character, etc.). .

Page 152: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

152

3-3-1 Les attributs ( les champs) de la classe Vector-

-protected Object[]elementData un tableau de données interne du

vecteur

-protected int elementCount : le nombre d'éléments effectif contenu

dans le vecteur

-protected int capacityIncrement : le pas d’incrémentation lorsque la

capacité d’un vecteur est dépassé. Lorsque ce pas égale ou < à 0. La

capacité du vecteur double à chaque accroissement

Remarque : Ces trois champs elementData, elementCount et

capacityIncrement sont en mode ‘protected’, c’est à dire que seuls les

classes du même package que la classe Vector y ont accès

Page 153: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

153

3-3-2 Les constructeurs de la classe Vector

Un vecteur comporte quatre constructeurs permettant d'initialiser les instances de cette classe.

1* public Vector() : Ce premier constructeur permet de créer

un vecteur initialement vide auquel il sera possible d'ajouter des

éléments via une méthode spécifique. La capacité par défaut de ce

vecteur est 10 et le pas d’incrémentation contenu dans le champ

capacityIncrement est 0

Page 154: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

154

Exemple import java.util.*; class Vecteur1 { public static void main(String args[]) { Vector v = new Vector(); System.out.println ("Nombre d'éléments : " + v.size()); //0 System.out.println ("Capacité du vecteur "+ .capacity()); //10 v.add(new Integer(1));// un entier v.add("Mon premier vecteur");// une chaîne v.add(new Double(0.5)); System.out.println ("Nombre d'éléments : " + v.size()); //3 System.out.println ("Capacité du vecteur "+ .capacity());//10 for(int i = 0; i < v.size(); i++) System.out.println ("Element " +i+" : "+ v.elementAt(i)); for(int i = 0; i < 10; i++) v.add(new Integer(i)); System.out.println ("Nombre d'éléments : " + v.size());//13 System.out.println ("Capacité du vecteur "+ .capacity());}//20 }

Page 155: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

155

2* public Vector(int initialCapacity) : Ce second constructeur permet d'initialiser le vecteur à une certaine capacité fournie en argument. Dans ce cas, la valeur contenu par chacun des éléments est null.

Exemple : On reprend le même exemple que pour la classe Vecteur1 et on crée le vecteur v comme suit : Vector v = new Vector(5);

/*Nombre d'éléments : 0Taille du vecteur : 5Nombre d'éléments : 3Capacité du vecteur : 5Element 0 : 1Element 1 : Mon premier vecteurElement 2 : 0.5Nombre d'éléments : 13Capacité du vecteur : 20 */

Page 156: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

156

3* public Vector(int initialCapacity,int capacityIncrement) : Ce troisième constructeur permet d'initialiser le vecteur à une certaine capacité tout en veillant également à définir un pas d'incrémentation de sa capacité suite à un dépassement, palliant ainsi à la contrainte du constructeur précédent.

Exemple : On reprend le même exemple que pour la classe Vecteur1 et on crée le vecteur v comme suit : Vector v = new Vector(5,1);

/* A l’exécution, on aura :Nombre d'éléments : 0Capacité du vecteur : 5Nombre d'éléments : 3Capacité du vecteur : 5Element 0 : 1Element 1 : Mon premier vecteurElement 2 : 0.5Nombre d'éléments : 13Capacité du vecteur : 13*/

Page 157: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

157

4* public Vector(Collection c)Ce quatrième constructeur permet de construire un

vecteur à partir d'une collection passée en argument. Cette collection doit implémenter l'interface Collection, à l'image de ArrayList, HashSet, LinkedHashSet, LinkedList, TreeSet et même Vector.

Page 158: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

158

Exemple : import java.util.*; class Vecteur4 { public static void main(String args[]) { ArrayList collection = new ArrayList(); collection.add("lundi"); collection.add("mardi"); collection.add("mercredi"); collection.add("jeudi"); collection.add("vendredi"); collection.add("samedi"); collection.add("dimanche"); collection.add(new Integer(4)); Vector vecteur = new Vector(collection); for(int i = 0; i < vecteur.size(); i++) System.out.println (vecteur.elementAt(i)); System.out.println ("Taille du vecteur : " + vecteur.size());//8 System.out.println ("Capacité du vecteur : " +

vecteur.capacity()); //8 } }

Page 159: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

159

3-3-3 Quelques méthodes de la classe Vector

Méthodes de gestion de taille d’un vecteur

- La méthode public int capacity() : Cette méthode permet récupérer la capacité du vecteur. La capacité correspond à la longueur du tableau de données interne conservé dans le champ elementData d'un vecteur, par contre la méthode public int size() retourne la taille du vecteur qui correspond au nombre d'éléments effectif contenu dans le champ elementCount du vecteur.

- La méthode public void setSize(int taille) détermine une nouvelle taille pour le vecteur,

Page 160: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

160

- La méthode public void ensureCapacity(int capacite) augmente la capacité du vecteur si nécessaire

La méthode public void trimToSize() adapte la capacité à la taille courante du vecteur.

- Les méthodes d’ajout d’éléments dans un vecteurL'ajout d'objets dans un vecteur s'accompli par l'intermédiaire de plusieurs

méthodes dont la plupart sont préfixées par add.La méthode void add(int index, Object element) insère un élément à la

position spécifiée. La méthode boolean add(Object obj) ajoute un élément à la fin du vecteur. La méthode boolean addAll(Collection col) ajoute une collection d'éléments

à la fin du vecteur. La méthode boolean addAll(int index, Collection col) ajoute une collection

d'éléments à l'index spécifié dans le vecteur. La méthode void addElement(Object obj) ajoute un objet à la fin du vecteur.

La méthode void insertElementAt(Object obj, int index) insère un objet à l'index spécifié du vecteur.

Page 161: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

161

- Les méthodes de suppression d’éléments dans un vecteurLa suppression est prise en charge par plusieurs méthodes de la classe Vector commençant en général par remove. La suppression d'un ou plusieurs éléments entraîne une réorganisation du vecteur, c'est-à-dire que l'emplacement d'un élément effacé et immédiatement remplacé par l'élément suivant et cela en cascade jusqu'au dernier élément du vecteur.la méthode Object remove(int index) supprime l'objet à l'index spécifié et le retourne. La méthode boolean remove(Object obj) supprime la première occurrence de l'objet trouvée dans le vecteur. La méthode boolean removeAll(Collection col) supprime tous les éléments de la collection qui sont contenus dans le vecteur. La méthode void removeAllElements() supprime tous les éléments et remet à zéro la taille du vecteur. La méthode boolean removeElement(Object obj) supprime la première occurrence de l'élément du vecteur. La méthode void removeElementAt(int index) efface l'élément à l'index spécifié. La méthode protected void removeRange(int debut, int fin) supprime les éléments situés dans un intervalle spécifié par les arguments. La méthode void clear() supprime tous les éléments dans le vecteur. La méthode boolean retainAll(Collection col) retient les éléments de la collection et supprime tous les autres du vecteur.

Page 162: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

162

Exemple : ajout et suppression d’éléments dans un vecteurimport java.util.*; public class VecteurSupprim { public static void main(String[] args) { Vector vecteur = new Vector(); vecteur.add("lundi"); vecteur.add("mardi"); vecteur.add("mercredi"); vecteur.add("jeudi"); vecteur.add("Vendredi"); Vector v1 = new Vector(vecteur); Vector v2 = new Vector(vecteur); v1.removeAllElements(); v2.clear(); System.out.println ("La taille du vecteur (1, 2) : " + v1.size() + ", " + v2.size() ); // 0,0 System.out.println ("La capacité du vecteur (1, 2) : " + v1.capacity() + ", " + v2.capacity());// 5,5 } }

Page 163: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

163

- Les méthodes de consultation des éléments La consultation des éléments présents dans une collection Vector s'effectue par l'intermédiaire de diverses méthodes permettant de récupérer un élément précis ou plusieurs.- La méthode Object elementAt(int index) retourne l'élément trouvé à l'index spécifié.- La méthode Enumeration elements() retourne la liste de tous les éléments du vecteur dans un objet Enumeration.- Les méthodes Object firstElement() et Object lastElement() retournent respectivement le premier et le dernier élément du vecteur.- Les méthodes Object[] toArray() et Object[] toArray(Object[] obj) retournent un tableau d'objets contenant les éléments du vecteur. La seconde méthode remplit le tableau passé en argument et retourne également un tableau de même contenu que le premier. Ainsi dans ce cas, il est inutile d'utiliser la valeur de retour de cette méthode.

Page 164: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

164

Exempleimport java.util.*; public class VecteurTableau { public static void main(String[] args) { Vector vecteur = new Vector(); vecteur.add("lundi"); vecteur.add("mardi"); vecteur.add("mercredi"); vecteur.add("jeudi"); vecteur.add("vendredi"); Object[] tabCh2 = new Object[10]; Object[] tabCh = vecteur.toArray(tabCh2); for(int i = 0; i < tabCh.length; i++) System.out.println (tabCh[i]); for(int i = 0; i < tabCh2.length; i++) System.out.println (tabCh2[i]); } }

Page 165: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

165

A l’exécution lundimardimercredijeudivendredinullnullnullnullnulllundimardimercredijeudivendredinullnullnullnullNullRemarque : tabchar et tabchar2 ont la même taille (10) et contiennent les mêmes éléments

Page 166: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

166

3- 4 La classe java.util.ArrayListUn objet de la classe ArrayList est un tableau qui se redimensionne

automatiquement. Il accepte tout type d'objets, null y compris. Chaque instance d'ArrayList a une capacité, qui définit le nombre

d'éléments qu'on peut y stocker. Au fur et à mesure qu'on ajoute des éléments et qu'on " dépasse " la capacité, la taille augmente en conséquence.

La classe ArrayList est très similaire à la classe Vector.car elle utilise un tableau en interne pour ranger les données et fournit un accès aux éléments par leur indice

Le principal intérêt d'une ArrayList est de pouvoir facilement ajouter un élément à la liste. En effet, le tableau utilisé en interne est surdimensionné par rapport au besoin.

Ainsi une ArrayList initialisé à une taille de 5 éléments pourra en contenir beaucoup plus (jusqu’à 20 millions d’entrées).

Lorsque que l'on ajoutera un nouvel élément, il sera placé dans la 1ère case libre du tableau interne ; on ne sera pas amené à instancier un nouveau tableau. Evidement, à force d'ajouter des éléments, le tableau interne peut se trouver saturé, dans ce cas un nouveau tableau est créé automatiquement et les anciennes valeurs y sont recopiées. Toutes ces opérations sont transparentes.

Page 167: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

167

3.4.1.Les constructeurs de ArrayListIl existe 3 types de constructeurs pour la classe ArrayList :ArrayList maAList = ArrayList(); // On construit un tableau vide d’une

taille par défaut de 10.ArrayList maAList = ArrayList(int initialCapacity); // On initialise la taille

du tableau à initialCapacityArrayList maAList = ArrayList(Collection c); // On construit un tableau à partir d’une Collection passée en argument.

3-4 -2 Les opérations principales sur un ArrayList sont : add(Object o) : ajoute l'objet o à la fin du ArrayList clear() : vide le ArrayList get(int index) : renvoie l'Object à l'index spécifié. Renvoie une exception

si vous dépassez le tableau (IndexOutOfBoundsException) size() : renvoie la taille du ArrayList

Page 168: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

168

// Les méthodes de la classe ArrayList //Informations

size(); trimToSize(); hashCode(); minCapacity); // Positional Access Object get( index); Object set( index, Object element); add(Object element); index, Object element); index, Collection c); addAll(Collection c); clear(); Object remove( index); remove(Object element); removeAll(Collection c); toIndex); Object retainAll(Collection c); // Search indexOf(Object o); lastIndexOf(Object o); containsAll(Collection c); contains(Object element); isEmpty(); // Comparator equals (Object element); // Iteration Iterator iterator(); ListIterator listIterator(); ListIterator listIterator(int debut); // Range-view List subList( to); Object clone(); Object[] toArray();

Object[] toArray(Object[] element);

Page 169: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

169

Exemple d’utilisation d’un ArrayList :List maListe = ArrayList(12);for( i = 0; i < 12; i++){ maListe.add("élément" + i); } Iterator it = maListe.iterator();(it.hasNext()) { System.out.println(it.next().toString()); }

Affichage : élément0 Élément1 élément2 élément3 élément4 Élément5 élément6 élément7 élément8 élément9élément10 élément11

Page 170: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

170

4 – LES ENSEMBLES

4-1 L’interface java.util.Set

Les objets de java.util.Set sont des ensembles d'éléments

uniques. En effet, contrairement à l’interface List, un objet Set ne

contient pas de doublons ; si un nouvel objet inséré existe déjà, il ne

sera pas ajouté à la collection.

La classe HashSet, qui implémente l’interface Set est la plus

utilisée. Ce type de collection garantit des performances constantes

selon ce que l’on ajoute, efface ou recherche.

Page 171: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

171

Quelques méthodes de l’interface Set size();add(Object element); addAll(Collection c); clear(); remove(Object element); removeAll(Collection c); Object retainAll(Collection c); containsAll(Collection c); contains(Object element); isEmpty(); equals(Object element); Iterator iterator(); Object[] toArray(); Object[] toArray(Object[] element);

- Les principales implémentations de Set sont : HashSet, TreeSet,SortedSet

Page 172: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

172

4-2 La classe .HashSet

Les collections HashSet organisent des éléments uniques dont

l’ordre d’itération est aléatoire.

Aussi, la classe HashSet n’accepte qu’un seul élément null.

Disposant d’une fonction de hachage, les objets HashSet ne

garantissent pas l'ordre des éléments durant une itération de

l'ensemble, contrairement aux collections TreeSet.

En effet, la fonction de hachage disperse les éléments au sein

de la collection Set.

Cette classe garantit des performances constantes en ce qui

concerne les opérations de base, telles que l'ajout (add(Object

element)), la suppression (remove(Object element)), la vérification de

présence (contains(Object element)) et l'obtention de la taille(size()).

Page 173: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

173

.Les constructeurs de la HashSet HashSet ensemble = HashSet();

Ce constructeur par défaut initialise l'instance avec des valeurs par défaut, soit une capacité initiale et un facteur de charge par défaut égaux respectivement à 16 et à 0.75.

HashSet ensemble = HashSet(capacite); // initialise l’instance avec une capacité initiale de valeur capacite 

HashSet ensemble = HashSet(float factch); // initialise l’instance avec une capacité de valeur ‘capacite ‘et un facteur

de charge de valeur ‘factch’

HashSet ensemble = HashSet(Collection collection); //initialise l'instance en la remplissant d’une collection Ce dernier constructeur accepte comme argument une collection destinée

à initialiser la nouvelle instance. Chaque élément de la collection spécifiée sera copié au sein de l'objet HashSet créé.

Page 174: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

174

Les méthodes principalement utilisées sont les méthodes :d’ajout : add(Object elt) et addAll(Collection c).

de suppression : remove(Object elt), removeAll(Collection c), retainsAll(Collection c) et clear().

de vérification de présence : isEmpty(), contains(Object elt) et containsAll(Collection c).

Les méthodes toArray() et toArray(Object[] element) héritées de l'interface Set permettent de renvoyer l'ensemble des éléments contenus dans la collection Set, dans un tableau.

La méthode iterator() retourne un Iterator sur les éléments de l'ensemble. Cet objet Iterator fournira d’ailleurs le seul moyen de parcourir l'ensemble sous-jacent. Iterator valeurs = ensemble.iterator(); if (valeurs.hasNext()) { System.out.println("Elements : " + valeurs.next());}

Page 175: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

175

4-3 La classe.TreeSetLa classe TreeSet organise un ensemble d’éléments uniques

triés selon un ordre croissant (ordre naturel des éléments ou ordre

précisé par l’utilisateur grâce à un Comparateur).

Les objets TreeSet assurent aussi de très bonnes

performances pour des opérations de base, telles que les ajouts, les

suppressions ou vérifications de présence.

4-3-1 Les constructeurs de la TreeSet

TreeSet ensemble = TreeSet();//constructeur par défaut

Le constructeur par défaut initialise l'objet en fondant son mode

de tri sur l'ordre naturel des éléments.

Page 176: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

176

TreeSet ensemble = TreeSet(Collection maCollection);

Ce constructeur accepte comme argument un objet Collection.

Chaque élément de la collection spécifiée sera copié dans l’objet TreeSet

instancié. La collection sera par ailleurs triée selon l’ordre naturel de ses

éléments (ordre alphabétique, numérique…).

TreeSet ensemble = TreeSet(SortedSet collection);

Ce constructeur accepte comme argument un objet SortedSet.

Chaque élément de la collection spécifiée sera copié dans l’objet TreeSet

instancié. La collection sera par ailleurs triée selon l’ordonnancement de

l’objet SortedSet fourni.

TreeSet ensemble = TreeSet(Comparator comparateur);

Pour ce dernier constructeur, on spécifie un comparateur pour

effectuer le tri des éléments comparables de l'objet TreeSet.

Page 177: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

177

4-3-2 Les méthodes de la classe TreeSetUn objet TreeSet, défini sans comparateur, utilise les méthodes

compareTo() et equals() des objets contenus dans cet ensemble.Le comparateur de la collection TreeSet est accessible via la méthode comparator() : Comparator comparateur = ensemble.comparator();

Les méthodes principalement utilisées sont les méthodes :d’ajout (add(Object elt) et addAll(Collection c))de suppression (remove(Object elt, removeAll(Collection c), retainsAll(Collection c) et clear()) de vérification de présence (isEmpty(), contains(Object elt) et containsAll(Collection c)).L’Iterator est le seul moyen de parcourir l'ensemble. TreeSet(collection); Iterator valeurs = ensemble.iterator(); if(valeurs.hasNext()) { System.out.println("Elements : " + valeurs.next()); }

Page 178: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

178

La classe TreeSet implémente deux méthodes first() et last(), chargées respectivement de récupérer dans un ensemble le premier élément (c’est à dire le plus petit) et le dernier élément (le plus grand).La comparaison entre les éléments est assurée par l'ordre naturel ou par le comparateur spécifié. Object premier = ensemble.fisrt(); Object dernier = ensemble.last(); Les méthodes toArray() et toArray(Object o) héritées de l'interface Set permettent de renvoyer l'ensemble des éléments contenus dans la collection Set, dans un tableau.La méthode SortedSet headSet(Object toKey) retourne seulement les éléments de l'objet TreeSet, qui sont strictement inférieurs à l'objet passé en argument. Ce dernier est exclu de l'objet SortedSet retourné.La méthode tailSet(Object fromKey) retourne seulement les entrées de l'objet TreeMap, dont les clés sont strictement supérieures ou égales à l'objet passé en argument. La méthode subSet(Object fromKey, Object toKey) extrait un intervalle d'entrées, dont les clés sont comprises entre la valeur du premier argument incluse et la valeur du second argument exclu.La méthode values() retourne toutes les valeurs dans une collection. SortedSet partie = ensemble.headSet(valeur);

Page 179: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

179

5- LES COLLECTIONS DE TYPE Map

Un objet de type map est une collection qui associe une clé à une valeur. La clé est unique, contrairement à la valeur qui peut être associée à plusieurs clés.

La majorité des collections de type Map ont deux constructeurs : un constructeur sans paramètre créant une Map vide, et un constructeur prenant en paramètre une Map qui crée une nouvelle Map en fonction de la Map passée en paramètre.

Page 180: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

180

5-1- L’interface java.util.MapLes java.util.Map (associations) mémorisent une collection de couples clé/valeur. Si on a une clé, l'association retrouvera la valeur associée à cette clé. Les clés sont uniques, mais la même valeur peut-être associée à plusieurs clés.

Les méthodes de Map: size(); clear(); Object get(Object key); Object TUputUT(Object key, Object value); TUputAllUT(Map t); Object remove (Object element); containsKey (Object key); containsValue(Object value); isEmpty(); hashcode(); equals (Object element); Set entrySet(); Set keySet(); Collection values();

Remarque : Un seul exemplaire d’une clé doit exister dans un objet implémentant l'interface Map ;elle ne peut donc correspondre qu’à une seule valeur, elle est unique.

Page 181: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

181

Les objets Map dépendent de deux méthodes particulièrement

importantes pour le fonctionnement des collections :

hashCode() // calcule le code de hachage des clés

equals(Object o) // teste l’égalité entre 2 clés

Ces méthodes sont indispensables puisqu’elles assurent la cohérence de

la collection lors de l’utilisation des méthodes :

get(Object key) // récupère la valeur correspondante à la clé key

put(Object key,Objet value) // ajoute un ensemble clé/valeur

remove(Object o) // supprime l’ensemble clé/valeur correspondant à la clé

key spécifiée

Ainsi, si un nouveau couple clé/valeur est ajouté à une collection et que la

clé y est déjà présente, la valeur de cette clé remplacera l’ancienne et ne

rajoutera pas une nouvelle paire clé/valeur.

Page 182: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

182

5-2 La classe HashMap

La classe HashMap est une implémentation de l’interface Map,

et comme on pourra le constater elle ressemble énormément à la classe

HashSet .

I l ne peut y avoir qu’une seule clé null dans une instance de

classe HashMap. Cependant, plusieurs valeurs peuvent être null,

l'unicité des entrées étant assurées par les clés

Les objets HashMap ne garantissent pas l'ordre des éléments

durant une itération de la collection, contrairement aux TreeMap.

En effet, la fonction de hachage disperse les éléments au sein d'une

collection Map.

Page 183: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

183

5-5-1.Les constructeurs de la classe HashMap

HashMap maHashMap = new HashMap(); Ce constructeur est le constructeur par défaut. Il initialise l'instance avec

des valeurs par défaut, soit une capacité initiale et un facteur de charge par défaut égaux respectivement à 16 et à 0,75.

HashMap maHashMap= new HashMap(int initcapacite) ;Ce constructeur permet d'indiquer la capacité initiale seule

HashMap maHashMap= new HashMap(int initcapacite,float factch);Ce constructeur permet d’indiquer la capacité initiale et le facteur de

charge.

Page 184: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

184

Définitions :- La capacité initiale définit la taille initiale de la collection.

- Le facteur de charge détermine à quel moment l'ensemble doit

recalculer la capacité de la collection afin d'accueillir éventuellement

plus d'éléments.

Dans le cas d'une collection de capacité initiale de 100 et d’un facteur

de charge de 0.70, sa capacité sera recalculée dès qu’elle aura atteint

un taux de remplissage de 70%. Le facteur de charge influant sur les

performances de l'objet, il faut bien sûr l’initialiser en fonction de ses

besoins.

HashMap maHashMap = new HashMap(collection);

Ce dernier constructeur accepte comme argument une collection qui va

initialiser la nouvelle instance. Chaque entrée de la collection spécifiée

sera copiée au sein de l'objet HashMap créé.

Page 185: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

185

Quelques méthodes de la classe HashMap

Les méthodes put(Object key,Object value)

et putAll(Map m) permettent respectivement

d'ajouter une paire clé/valeur et toutes les entrées

d'une collection Map.

Les méthodes d'ajout vérifient au préalable

si les clés spécifiées ne sont pas déjà présentes

dans la collection. Si c’est le cas, les valeurs

correspondantes aux clés existantes sont

remplacées par les nouvelles valeurs spécifiées.

Page 186: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

186

Exemple d’utilisation de la classe HashMap:import java.util.*; class TestHashMap { public static void main(String[]args) { HashMap maHashMap =new HashMap(); String eleve = "Anass "; float[] notes = {12,14,10,17}; maHashMap.put(eleve, notes); // la méthode put() float[] resultat = (float[]) maHashMap.get(eleve);// la méthode

get() System.out.println(eleve +" a eu les notes : "); for(int i=0;i<resultat.length;i++) System.out.println( resultat[i]); maHashMap.clear(); //on efface tout

HashMap maHashMap2 =new HashMap(); maHashMap2.put("Marwane", "classe prépa"); maHashMap2.put("Oussama", "INPT"); maHashMap.putAll(maHashMap2); // on remplit maHashMap

System.out.println("Marwane est en " + (String) maHashMap.get("Marwane"));

System.out.println("Oussama est à " + (String) maHashMap.get("Oussama")); }

}

Page 187: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

187

La suppression d'une entrée spécifique par rapport à sa clé ou de la totalité des paires clé/valeur s'effectue respectivement par les méthodes remove(Object key) ou clear().Exemple : //suppression de l'entrée correspondant à la clé passé en argument float[] lesNotes = maHashMap.remove("Anass"); //suppression de toutes les entrées de la collection HashMap maHashMap.clear();

La vérification de présence d'entrées, d'une clé ou d'une valeur est possible par l'intermédiaire des méthodes isEmpty(), containsKey(Object key) et containsValue(Object value).Exemple :if (maHashMap.isEmpty()) { System.out.println("La collection est vide !"); } if (maHashMap.containsKey("Marwane")) { System.out.println("La clé de Marwane a été trouvée !"); } if (maHashMap.containsValue("INPT")) { System.out.println("La valeur 'valeur' a été trouvée !");} Affichage : La clé de Marwane a été trouvée ! La valeur INPT a été trouvée !

Page 188: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

188

5-3 La classe HashTable

Un objet HashTable est une implémentation de Map qui associe une clé à une valeur. N'importe quel objet, mis à part null peut y être ajouté. Voici un exemple d'utilisation de HashTable, où on associe un numéro de mois à son nom :

Map monHashtable = new Hashtable() ;monHashtable.put(new Integer(1),"Janvier")monHashtable.put(new Integer(2),"Fevrier");monHashtable.put(new Integer(3),"Mars");monHashtable.put(new Integer(4),"Avril");monHashtable.put(new Integer(5),"Mai");monHashtable.put(new Integer(6),"Juin");monHashtable.put(new Integer(7),"Juillet");monHashtable.put(new Integer(8),"Aout");monHashtable.put(new Integer(9),"Septembre");monHashtable.put(new Integer(10),"Octobre");monHashtable.put(new nteger(11),"Novembre");monHashtable.put(new Integer(12),"Décembre");

Page 189: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

189

La complexité d'accès à une valeur par sa clé dépend d'une

fonction appelée hashCode définie dans la clé.

Cette fonction est déjà définie dans Object, mais pour optimiser la

recherche, la surcharger dans vos propres classes (si la clé est une

instance d'une classe de votre création) permet un gain de temps non

négligeable.

Le principe de cette fonction est simple : elle renvoie un entier. Si

les deux objets sont égaux, les valeurs renvoyées par leur fonction

respectives sont égales, mais l'inverse n'est pas vrai, ce qui veut dire que

si deux objets sont inégaux, leurs hashCode ne sont pas forcément

inégaux.

Généralement, on fait renvoyer à la fonction hashCode() d'un

objet la somme des hashCode() des éléments le composant.

Page 190: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

190

6 LES CLASSES UTILITAIRES

6-1 L'interface java.util.EnumerationL'interface Enumeration définit deux méthodes permettant de

balayer une séquence d'éléments :

public boolean hasMoreElements () :Cette méthode doit renvoyer

true

s'il reste encore un ou plusieurs éléments à énumérer.

public Object nextElement () throws NoSuchElementException

Cette méthode doit retourner l'élément suivant à énumérer ou

déclencher une exception de classe NoSuchElementException si le

dernier élément a déjà été énuméré.

Les méthodes de cette interface sont généralement utilisées dans

une boucle while, comme dans l'exemple suivant

Page 191: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

191

Les méthodes de cette interface sont généralement

utilisées dans une boucle wile, comme dans l'exemple suivant

import java.util.*;

// Classe mémorisant des chaînes de caractères

class CollectionChaines

{ String [ ] tabChaines;

int nbreChaines = 0;

CollectionChaines (int max)

{ tabChaines = new String [max]; }

public void ajouterChaine (String chaine)

{ tabChaines [nbreChaines++] = chaine; }

public Enumeration chaînes ()

{ return new EnumerationChaines (this); }

}

Page 192: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

192

// Classe permettant d'énumérer les chaînes de CollectionChaines

class EnumerationChaines implements Enumeration

{ CollectionChaines collection;

int indice = 0;

public EnumerationChaines (CollectionChaines collection)

{ this.collection = collection; }

public boolean hasMoreElements ()

{ return indice < collection.nbreChaines; }

public Object nextElement ()

{ if (indice < collection.nbreChaines)

return collection.tabChaines [indice++];

else

throw new NoSuchElementException (); }

}

Page 193: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

193

public class EssaiEnumeration { public static void main (String [ ] args) { // Création d'une collection de chaînes et ajout de 3 chaînes CollectionChaines donnees = new CollectionChaines (10); donnees.ajouterChaine ("INE1"); donnees.ajouterChaine ("INE2"); donnees.ajouterChaine ("INE3"); // Enumération des éléments de la collection Enumeration enumeration = donnees.chaînes (); while (enumeration.hasMoreElements ()) System.out.println (enumeration.nextElement ()); } }/*A l’exécution INE1INE2INE3*/

Page 194: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

194

4-2 L’interface Iterator

L’interface java.util.Iterator permet le parcours séquentiel des

éléments de n’importe quelle collection

L’interface java.util.Iterator facilite le parcours de collections

ainsi que le retrait d’élément dont on ne connaît pas la position.

Un itérateur est un objet qui implémente l’interface Iterator, et

qui a pour but de permettre le parcours des éléments d’un conteneur,

sans avoir besoin de savoir de quelle nature est ce conteneur.

L’interface Iterator contient les méthodes suivantes :

Page 195: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

195

boolean hasNext()

elle permet de tester l'existence d'un élément après le curseur Retourne true si l’itérateur n’est pas arrivé en fin de l’ensemble et false sinon.

Object next()

Elle permet d’avancer l’itérateur, en déplaçant le curseur après l’élément) Elle retourne un objet de la classe Object qui correspond à l’élément suivant, c’est pourquoi on doit faire du transtypage pour récupérer la valeur de la collection; en précisant le type de l’objet.Elle Lève une exception NoSuchElementException si l'itérateur n'a pas d'objet qui le suit.

void remove()Elle supprime l’objet qui vient d’être retournée par next (c'est-à-dire l'élément avant le curseur)..

- La méthode iterator()La méthode Iterator iterator().de l'interface Collection, vise à construire un itérateur pour

une collection. Elle retourne un objet Iterator.Toutes les collections disposent d'une méthode Iterator iterator(), qui permet d'initialiser

un itérateur, (de façon analogue au int i=0 qui initialise un indice de boucle entier).

Page 196: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

196

* Création d’un Iterator à partir d’une collection : Iterator it = maCollection.iterator();

On peut donc parcourir une collection grâce aux méthodes de l’interface Iterator 

Quelque soit la collection c, on peut parcourir tous ses éléments de la façon suivante : 

Collection c ;// c est de type EIterator it = c.iterator() ; while(it.hasNext()){ E o = (E)it.next(); // o a pour valeur un objet de la collection

Page 197: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

197

-L’interface ListIteratorListIterator est une sous-interface adaptée aux listes. La sous-interface ListIterator permet : le parcours d'une liste dans les deux sens la modification de la liste pendant le parcours ; d'obtenir une position courante (située entre l'élément qui serait retournée par previous et celui retourné par next). Dans une liste de longueur n, les index valides sont 0, 1, ..., n. Les méthodes ajoutées dans cette interface sont les suivantes : boolean hasPrevious() qui teste s'il existe un élément avant le curseur ; Object previous() qui renvoie, s'il existe, l'élément avant le curseur ; void add(Object o) qui permet l'insertion d'un élément avant le curseur (c'est-à-dire entre les éléments qui seraient retournés par appel de Object previous() et Object next()) ; int nextIndex() qui renvoie l'index de l'élément avant le curseur ; int previous qui renvoie l'index de l'élément après le curseur ; void set(Object o) qui remplace le dernier élément retourné par previous ou next (si la dernière opération a modifié la liste, c'est-à-dire si la dernière opération a été add ou remove, l'exception IllegalStateException est levée).

Page 198: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

198

Exemple d’utilisation d’itérateur import java.util.*; public class UtiliseIterator { public static void main(String args[]){ Vector vect = new Vector(5); vect.addElement(new Integer(3)); vect.addElement(new String("Bonjour")); vect.addElement(new Float(3.14)); System.out.println("vecteur : " + vect); //vecteur : [3, Bonjour, 3.14] Object o; Iterator iter = vect.listIterator(); while (iter.hasNext()){ o = iter.next(); System.out.println(" " + o); }

Page 199: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

199

for(Enumeration enum = vect.elements(); enum.hasMoreElements();) // pas d’incrémentation System.out.println(" " + enum.nextElement()); ListIterator listIter = (ListIterator) iter; while (listIter.hasPrevious()){ o = listIter.previous(); System.out.println(" " + o); } } } /* vecteur : [3, Bonjour, 3.14] 3 Bonjour 3.14 3 Bonjour 3.14 3.14 Bonjour 3*/

Page 200: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

200

6-3.L’interface java.lang.ComparableLes objets manipulés dans une TreeMap ou une TreeSet

doivent être comparables entre eux, c’est à dire qu’ils doivent

implémenter l’interface Comparable

En effet, L’interface java.lang.Comparable contient une seule

méthode :

int compareTo(Object o);

La méthode compareTo(), appliquée à un objet x, avec pour

argument un objet y, compare les objets x et y et retourne un entier

<0, ou 0 ou un entier >0, selon que x est plus petit que y, lui est égal

ou lui est supérieur

Page 201: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

201

En ce qui concerne les objets tels que les String ou les

Integer, cette implémentation existe déjà, ils peuvent donc être

utilisés tels quels ( sans passer par l’interface Comparable)

Cependant, les objets créés par l’utilisateur ne

l’implémentent pas automatiquement ; Il convient donc de

l’ajouter.

Page 202: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

202

Chapitre4 LES APPLETS

INTRODUCTION

1 – LE LANGAGE HTML

2 – LES PRINCIPALES METHODES DE LA CLASSE APPLET

3 – CREATION D’UNE APPLET

4 – EXEMPLE D’UNE APPLET

5- TRANSMISSION DE PARAMETRES A UNE APPLET

Page 203: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

203

Page 204: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

204

Chapitre4 LES APPLETS

INTRODUCTION

Une applet est une application écrite en java et qui tourne à

travers le web dans un logiciel de navigation (les logiciels de

navigation les plus utilisés sont Internet Explorer et Netscape

Navigator).

Pour publier une applet sur Internet , il faut d’abord créer une

page HTML. L’applet est référencée dans la page HTML et exécutée

par le logiciel de navigation.

Page 205: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

205

Chapitre4 LES APPLETS

1 – LE LANGAGE HTML

Le langage HTML (Hyper Text Markup Language) est un langage universel de structuration de documents hypertextuels indépendants des plates – formes

Il est basé sur les balises ou les tags qui permettent de formater le texte. Les balises servent aussi à appeler des contenus externes (image, animation, son, …)

- Pour afficher une image dans une page HTML, on écrit :

<img scr = « URL + Nom du fichier »- Les fichiers de sons et les fichiers vidéo sont intégrés au

moyen du tag <embed> . La syntaxe est la suivante :

<embed scr = «  URL + Nom du fichier »

Page 206: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

206

Chapitre4 LES APPLETSLes liens dans une page HTML

Dans une page HTML , on peut définir des liens qui représentent des sauts vers d’ autres endroits. Pour identifier la cible vers la quelle doit pointer le lien., on utilise la balise a (ancre), cette balise a un attribut href (hypertext reference) ; celui ci doit contenir une URL qui pointe sur un document ou sur une partie du document

Il existe deux types de liens, des liens internes qui renvoient à un emplacement situé dans le même document et des liens externes qui appellent un autre document figurant dans le même ordinateur serveur ou sur un autre géographiquement éloigné.

Lien interne : <a href= «#nom de l’ancrage» texte1 ou image1</a>

<a name= «nom de l’ancrag » texte2 ou image2 </a>

- Si on clique sur texte1 ou image1 , on va directement au texte2 ou à l’image2 spécifiée dans le tag <a name…>

Lien externe : <a href= «adresse URL» texte ou image </a>

- Si on clique sur le texte ou l’image, on va se déplacer vers l’URL spécifiée

Page 207: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

207

Chapitre4 LES APPLETS

2 – LES PRINCIPALES METHODES DE LA CLASSE Applet

Pour écrire une applet en java, il faut étendre (hériter) de la classe Applet du package java.applet

La hiérarchie d’héritage de la classe Applet est la suivante :

java.lang.Object java.awt.Component

java.awt.Container java.awt.Panel

java.applet.Applet

Page 208: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

208

Chapitre4 LES APPLETS

2 – LES PRINCIPALES METHODES DE LA CLASSE Applet

Les principales méthodes de la classes Applet :-La méthode init() : appelé automatiquement par le browser pour initialiser tous les objets et variables de l’applet.

-- La méthode start() : appelé automatiquement par le browser pour démarrer l’applet. Elle exécutée à chaque démarrage de l’applet

-la méthode stop() : appelé automatiquement par le browser pour interrompre l’exécution d’une applet

-La méthode destroy() : appelé automatiquement par le browser pour fermer et finir l’exécution d’une applet

- La méthode paint() : pour afficher la fenêtre de l’applet.

Page 209: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

209

Chapitre4 LES APPLETS

3 – CREATION D’UNE APPLET

Une applet est incluse dans une page HTML sous la forme d’une

référence qui indique l’endroit où le logiciel de navigation doit aller la

chercher

La balise APPLET s’utilise comme n’importe quelle commande HTML.

Sa syntaxe est la suivante :

<APPLET CODE= ‘’Nomclass.class’’ widht = w height=h

>

</APPLET>

NomClasse : indique le nom de la classe définissant l’applet

w et h désignent la largeur et la hauteur (en pixels) de la zone

de la page html destinée à représenter l’applet

Page 210: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

210

Chapitre4 LES APPLETS

3 – CREATION D’UNE APPLET

La balise APPLET peut comporter quelques attributs facultatifs :codebase : dans le cas où l’applet ne se trouve pas dans le même dossier que le fichier HTML, il faut indiquer l’adresse de la classe définissant l’applet par rapport à l’URL de la page HTML (en partant du dossier de la page HTML). Le paramètre codebase est placé à la suite du paramètre code

CODE = nom de l’applet codebase = chemin (nom du dossier)Hspace/vspace : les paramètres hspace (espacement horizontal) et vspace (espacement vertical) servent à fixer la distance en pixels entre l’applet et le texte

align : Ce paramètre détermine la position relative de l’applet dans la fenêtre. Les valeurs possibles sont : left, top, texttop,middle, absmiddle, bottom, absbottom

Page 211: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

211

Chapitre4 LES APPLETS

3 – CREATION D’UNE APPLET

Pour créer et exécuter une applet , il faut suivre ces étapes :

1 – Ecrire le code source de la classe qui définit l’applet et l’enregistrer sous le nom de la classe .java

2 – Compilation et création du fichier .class

3 -Création du fichier HTML faisant référence à l’applet

4 - Le test de l’applet

Page 212: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

212

Chapitre4 LES APPLETS

Fonctionnement d’une applet

Une applet contient des méthodes qui sont appelées

automatiquement lorsque certains événements se produisent.

La méthode init() est appelée au chargement de l’applet.

init() n’est pas une méthode statique . Une instance de la

classe chargée doit être crée

Page 213: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

213

Chapitre4 LES APPLETS

Fonctionnement d’une applet

La liste ci dessous décrit les différents événements qui se produisent lorsqu’une applet est chargée :

La classe est chargée

La classe est instanciée

La méthode init() de l’instance crée est invoquée

La méthode strart() est invoquée

- Si la page contenant l’applet est quitée :

La méthode stop() est invoquée

Si la page est de nouveau affichée :

La méthode start() est invoquée de nouveau

- Lorsque le navigateur est quitté :

La méthode destroy() est invoquée

Page 214: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

214

Chapitre4 LES APPLETS

4 – EXEMPLE D’UNE APPLET1 ère étape le code source

import java.applet.Applet ; import java.awt.Graphics ; // l’applet est une fenêtre graphique public class Helloworld extends Applet { public void paint (Graphics g) {

g.drawString(‘’ Hello World ‘’ , 20, 25)/* affiche la chaine aux coordonnées spécifiées */

} } Ce code sera contenu dans un fichier de nom Helloworld.java

Page 215: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

215

Chapitre4 LES APPLETS

4 – EXEMPLE D’UNE APPLE

2ème étape la compilation

Une fois le code enregistré dans le fichier Helloworld.java. On

le compile pour obtenir le fichier Helloword.class

3ème étape Création du fichier HTML

<HTML>

<applet code = ‘’ Helloworld.class’’ width=100 height=50>

</applet>

</HTML>

On enregistre ce code dans un fichier .html (dans le même

dossier que le fichier Helloworld.class )

Page 216: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

216

Chapitre4 LES APPLETS

4 – EXEMPLE D’UNE APPLE

4 ème étape : Le test de l’applet

On peut tester l’applet soit :

- En invoquant l’appletviewer :

c:\chemin> appletviewer Helloworld.html

- Soit en lançant l’applet dans un navigateur

Page 217: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

217

Chapitre4 LES APPLETS

5 – TRANSMISSION DE PARAMETRES A UNE APPLET

Les applets java peuvent lire des paramètres issus

d’une page HTML. Cette technique constitue un outil efficace

pour personnaliser l’exécution d’une applet dans un document

HTML et l’adapter sans être obligé de retoucher le code

source, ce qui demanderait une recompilation

Page 218: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

218

Chapitre4 LES APPLETS

5 – TRANSMISSION DE PARAMETRES A UNE APPLET

5-1 Passage des paramètres depuis une page HTML

Les paramètres sont stockés comme éléments constitutifs de la page

Web qui contient une applet. Ils sont crées à l’aide de la balise HTML

<PARAM> et de ses deux attributs : NAME et VALUE.

On peut avoir plusieurs balises <PARAM> avec une applet, mais

elles doivent toutes être placées entre la balise d’ouverture <APPLET> et

celle de fermeture </APPLET>

<APPLET code=Nom_applet.class» width=w height=h >

<PARAM name = nom1 value=valeur1 >

<PARAM name = nom2 value=valeur2 >

</APPLET>

Page 219: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

219

Chapitre4 LES APPLETS

5 – TRANSMISSION DE PARAMETRES A UNE APPLET

5-1 Passage des paramètres depuis une page HTML

Les paramètres sont stockés comme éléments constitutifs de la page

Web qui contient une applet. Ils sont crées à l’aide de la balise HTML

<PARAM> et de ses deux attributs : NAME et VALUE.

On peut avoir plusieurs balises <PARAM> avec une applet, mais

elles doivent toutes être placées entre la balise d’ouverture <APPLET> et

celle de fermeture </APPLET>

<APPLET code=Nom_applet.class» width=w height=h >

<PARAM name = nom1 value=valeur1 >

<PARAM name = nom2 value=valeur2 >

</APPLET>

Page 220: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

220

Chapitre4 LES APPLETS

5 – TRANSMISSION DE PARAMETRES A UNE APPLET

5-2 Lecture des paramètres depuis une applet

Java dispose de la méthode getParameter() pour récupérer les

paramètres décrits sur la page HTML

La méthode getParameter() de la classe java.awt.Applet

récupère un paramètre d’une balise <PARAM> sur une page Web. Le

nom de ce dernier qui est précisé avec l’attribut Name, est utlisé

comme argument passé à la méthode getParameter(). Cette méthode

renvoie comme résultat une chaîne de caractères de type String

La syntaxe de la lecture est la suivante :

String ParametreHTML ;

ParametreHTML = getParameter(nom_du_parametre) ;

Page 221: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

221

Chapitre4 LES APPLETS

5 – TRANSMISSION DE PARAMETRES A UNE APPLET

5-3 Exemple d’utilisation de paramètres dans une applet

/* Lecture de paramètres dans un fichier HTML */ import java.awt.* ;

import java.applet.Applet ;

public class ParametresHTML extends Applet

{ String p1,p2 ; // variables recevant les paramètres

public void paint (Graphics g)

{ p1= getParameter("param1") ;

p2= getParameter("param2");

g.drawString("Valeur du premier paramètre = "+p1,10,40) ;

g.drawString("Valeur du deuxième paramètre = "+p2,10,70) ; }

}

Page 222: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

222

Chapitre4 LES APPLETS

5 – TRANSMISSION DE PARAMETRES A UNE APPLET

5-3 Exemple d’utilisation de paramètres dans une applet

/* fichier HTML coprrespondant à l’applet */<HTML>

<APPLET code = "ParametresHTML.class" width=400 height=200>

<PARAM Name="param1" value=" Je suis le premier paramètre ! ">

<PARAM Name="param2" value=" et moi le deuxième ! " >

</APPLET></HTML>

A l’exécution , on aura : Valeur du premier paramètre = Je suis le premier paramètre !Valeur du deuxième paramètre = et moi le deuxième !

Page 223: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

223

Chapitre 5 LES INTERFACES GRAPHIQUES

INTRODUCTION

 A - LE PACKAGE java.awt

  1– LES POSSIBILITES de java.awt

2 -LES PRINCIPALES CLASSES DE java.awt

3 – LES COMPOSANTS DE L’INTERFACE

GRAPHIQUE

4 – LES GESTIONNAIRES DE MISE EN PAGE

5- LES CONTENEURS

6- LES EVENEMENTS ET LES ACTIONS

Page 224: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

224

Chapitre 5 LES INTERFACES GRAPHIQUES

INTRODUCTION

  Il existe en java plusieurs packages dédiés au graphisme,

les plus utilisés sont :

- Le paquetage java.awt (Abstract Windowing Toolkit) fournit au

programmeur toutes les classes nécessaires à la gestion du

graphisme . Cette librairie de classes est destinée à fonctionner

sur toute plate forme ( Windows, MacOs, X- Window)

- Le paquetage javax.swing disponible depuis la version jdk1.2

offre beaucoup plus de composants graphiques que le package

java.awt et l’apparence des composants dans javax.swing est

totalement différente. javax.swing permet de réaliser de véritables

interfaces homme-machine.

Page 225: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

225

Chapitre 5 LES INTERFACES GRAPHIQUES

INTRODUCTION

  Principes de base de java.awt et javax.swing

awt et Swing permettent de créer et gérer une interface graphique

en utilisant les mêmes principes :

- Créer un cadre ( un objet de la classe conteneur),

- Créer des composants (objets de la classe Component)

-Utiliser une mise en page pour ces composants,

- Insérer les composants dans le cadre

- Utiliser des méthodes en réponse aux actions de l’utilisateur.

Page 226: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

226

Chapitre 5 LES INTERFACES GRAPHIQUES

A - LE PACKAGE java.awt

1 – LES POSSIBILITES de java.awt

Avec java.awt, on peut par exemple :

  - Tracer différentes formes (polygones,, ovales, …)

  - Définir des polices de caractères, des couleurs, …

  - Créer des composants simples (boutons, cases à cocher, )

   - Créer des composants complexes ( menus déroulants, …

   - Gérer des événements utilisateurs (clique sur un bouton, coche

sur une case, …)

Page 227: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

227

Chapitre 5 LES INTERFACES GRAPHIQUES

 2 – LES PRINCIPALES CLASSES DE java.awt

2-1 La classe Graphics

La classe java.awt.Graphics comporte un nombre important de méthodes

permettant de tracer des formes géométriques vides ou pleines. Voici un échantillon

des méthodes de Graphics :

* drawLine(int x1,int y1,int x2 ,int y2) : affiche le segment de (x1,y1) à (x2,y2).

Remarque : Les segments tracés en java ont une largeur égale à un point d’écran. Pour

tracer un segment plus épais , on doit tracer plusieurs segments parallèles

Le système de coordonnées x et y dans une fenêtre graphique ou une applet est

déterminé par son origine (0,0) qui est l’angle supérieur gauche de la fenêtre.(0,0) 50

20 (50,20)

Page 228: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

228

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

 Exemple d’application de traçage de segment

import java.awt.*;

class TraceLigne extends Frame{ TraceLigne( String titre) // Constructeur { super (titre); /* appel au constructeur de la super classe de Traceligne (Frame) qui dessine une fenêtre invisible et appelle automatiquement la méthode paint */ } public void paint(Graphics g) // méthode redéfinie { g.setColor(Color.blue); // dessin d’une ligne épaisse (2 pixels d’épaisseur g.drawLine(50,65,150,100); g.drawLine(50,66,150,101); }

Page 229: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

229

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

  public static void main(String[] argv) { TraceLigne monDessin = new TraceLigne("Une ligne");

monDessin.setSize(400, 400); // taille de la fenêtre

monDessin.setVisible(true); /* la méthode setVisible(boolean) de la classe java.awt.component rend visible ou cache le

composant en fonction de l’état du boolean */ } // fin de main } // fin de la classe

Page 230: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

230

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

* drawString (String texte, int x, int y) : affiche la chaîne de caractèrestexte aux coordonnées (x,y) dans une fenêtre graphique ou une applety

* drawRect(int x1, int y1, int larg , int haut) affiche un rectangle vide à partir du point (x1,y1) de largeur larg et de hauteur haut

* fillRect(int x1, int y1, int larg , int haut) affiche un rectangle plein à partir du point (x1,y1) de largeur larg et de hauteur haut. La couleur de remplissage du rectangle plein est la couleur courante

(x1,y1)

hauteur

larg : largeur

Page 231: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

231

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

 Exemple d’application de traçage de rectangle’

import java.awt.*;

class TraceRect extends Frame { int x=50, y=60, largeur=150 , hauteur=100; Color couleur=Color.red ; // déclaration d'un objet couleur TraceRect (String titre) { super (titre); } public void paint(Graphics g) { g.setColor(couleur); g.drawRect(x,y,largeur,hauteur); g.fillRect(x,y+150,largeur,hauteur); // rectangle plein }

Page 232: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

232

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

 Exemple d’application de traçage de rectangle

public static void main(String[ ] argv) { TraceRect monDessin = new TraceRect ("Des Rectangles"); monDessin.setSize(400, 400); monDessin.setVisible(true); } // fin de main

} // fin de la classe

Page 233: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

233

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

* drawOval (int x, int y, int largeur, int hauteur) affiche un ovale vide de coin supérieur gauche de coordonnées (x,y) et de largeur et hauteur définis

Dans le cas d’un cercle largeur = hauteur = diamètre

* fillOval (int x, int y, int largeur, int hauteur) affiche un ovale plein

Largeur

(x,y)

Largeur

Hauteur

Page 234: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

234

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

 * drawPolygon (xpoints, ypoints, points) , trace un polygone vide fermé en joignant les points un à un et en joignant le dernier point au premier. xpoints est un tableau d’entiers réservés aux abscisses, et ypoints est un tableau d’entiers réservés aux ordonnés et points est le nombre de points à, relier

* fillPolygon (xpoints, ypoints, points) trace un polygone plein Exemple de traçage de polygone (un triangle)import java.awt.*;

class TracePoly extends Frame{ int[ ] xPoints ={150,40,300}; // les abscisses des points int[ ] yPoints ={40,240,240}; // les ordonnées des points int points=3; // le nombre de points (3 c’est un triangle) Color couleur ; TracePoly(String titre) // Constructeur { super (titre); }

Page 235: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

235

Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

  public void paint(Graphics g)

{ couleur= Color.red;

g.setColor(couleur);

g.fillPolygon(xPoints,yPoints,points);

}

public static void main(String[] argv)

{ TracePoly monDessin = new TracePoly("Un triangle");

monDessin.setSize(400, 400);

monDessin.setVisible(true); }

}

Page 236: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

236

Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Color

La classe java.awt.Color permet la gestion des couleurs en

java. Les couleurs peuvent être spécifiées de plusieurs manières

différentes car la classe Color offre plusieurs constructeurs :

- On peut utiliser des noms standards prédéfinis avec la

syntaxe :

Color.nom_de_la_couleur

Les noms de couleurs prédéfinis sont les suivants : black,

blue, cyan, darkGray, gray, green, lightGray, magneta, orange, pink,

red, white, yellow.

Page 237: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

237

Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Color

- On peut aussi spécifier une couleur à l’aide de trois nombres entiers compris entre 0 et 255. Ces trois nombres représentent les 3 valeurs RGB (Red, Green, Blue) de la couleur

Exemple : Color bleu = new Color (0,0,255) ;Color blanc = new Color (255, 255, 255) ;Color noir = new Color (0,0,0) ;Color maCouleur = new Color (150,200,250) ;

-On peut aussi spécifier une couleur à l’aide de trois nombres floats compris entre 0.0 et 1.0 -Ces trois nombres représentent les 3 valeurs RGB

Color rouge = new Color(1.0f, 0.0f, 0.0f) ;Color blanc = new Color(1.0f, 1.0f, 1.0f) ;

Page 238: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

238

Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Color

* Pour afficher un texte ou un graphique dans une couleur

spécifique, on utilise la méthode setColor(couleur) de la classe

java.awt.Graphics

* Pour attribuer une couleur d’arrière plan à une fenêtre, on

utilise la méthode setBackground(couleur)

Page 239: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

239

Chapitre 5 LES INTERFACES GRAPHIQUES

2-3 La classe java.awt.FontL’affichage des caractères est définie par trois éléments :

- Le nom de la police : Helvetica, Courier, Dialog, Times ,…- Le style de la police : gras, italique ou normal- La taille de la police en points

Pour afficher un texte dans une police définie, avec un style défini et une taille précise, on doit créer un objet Font qui contient ces informations. Le constructeur de la classe Font est :

Font(String nom, int style, int taille)nom : nom de la police de la JVM ;style : style de la police qui peut être l’une des constantes :

Font.PLAIN : texte normalFont.BOLD : texte grasFont.ITALIC : texte italique

taille : précise la taille de la police en pixels

Page 240: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

240

Chapitre 5 LES INTERFACES GRAPHIQUES

• La liste des polices de la JVM est retournée par la méthode getFontList() de la classe java.awt.Toolkit.

Exemple d’affichage des polices disponibles import java.awt.*;

public class ListePolices extends Frame{ ListePolices (String titre) { super(titre); } public void paint (Graphics g) { int x=20; int y=20; String polices[ ] = getToolkit().getFontList(); for (int i=0 ; i<polices.length; i++) { g.drawString(polices[i], x, y) ; y+=20 ; } } // fin de paint

Page 241: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

241

Chapitre 5 LES INTERFACES GRAPHIQUES

2-3 La classe java.awt.Font

Exemple d’affichage des polices disponibles

public static void main (String[ ] argv) { ListePolice maListe= new ListePolice("polices"); maListe.setSize(400,400); maListe.setVisible(true); } // fin de main} // fin de la classe ListePolices

Page 242: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

242

Chapitre 5 LES INTERFACES GRAPHIQUES

* Pour attribuer un font à un texte on utilise la méthode : public void setFont(Font  font) de la classe java.awt.Graphics

Exemple d’utilisation de la classe Font

import java.awt.*;

public class UtiliseFont extends Frame { UtiliseFont(String titre) { super(titre); } public void paint (Graphics g) { Font ft= new Font("Serif",Font.BOLD,20); g.setFont(ft); g.setColor(Color.red); g.drawString("ATTENTION DANGER",100,100); }

Page 243: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

243

Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Font

public static void main (String[] argv) { UtiliseFont monTexte= new UtiliseFont("Les Fonts"); monTexte.setSize(400,400); monTexte.setVisible(true); } // fin de main } // fin de la classe

Page 244: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

244

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

En java, les éléments de l’interface utilisateur sont des

composants. Ce sont des objets dérivant de la classe

java.awt.Component.

Chaque type d'objet de l'interface graphique (bouton, case à

cocher, liste, menu…) est une classe dérivée de Component.

La classe java.awt.Container , qui hérite de Component est un

espace capable de contenir plusieurs objets de la classe Component .

Par exemple une fenêtre (Frame) ou une applet

Page 245: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

245

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Voici une partie de la hiérarchie de la classe java.awt.Compenentjava.awt.Compenent

Button (bouton)

Canvas(surface de dessin)

Checkbox (case à cocher)

Container

Panel (conteneur simple)

Applet

Window (fenêtre sans cadre ni titre)

Dialog (fenêtre de dialogue)

Frame (fenêtre avec cadre et titre)

Label (étiquette)

Ce diagramme définie les relations d’héritage des classes

Page 246: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

246

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Pour utiliser des composants , il faut

- Créer un espace conteneur (Frame, Panel, Window, ..),

- Créer des composants (Bouton, CheckBox, …)

- Utiliser une mise en page pour ces composants,

- Insérer les composants dans l’espace

Pour insérer des composants dans un conteneur on utilise la méthode add() de la classe java.awt.Component

Page 247: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

247

Chapitre 5 LES INTERFACES GRAPHIQUES

3-1 Les boutons

Les boutons sont les contrôles de tout écran d’interface, ils

permettent de déclencher des événements. En java.awt un bouton est représenté par un objet de la classe java.awt.Button

Exemple d’utilisation de boutons dans une applet:

// Fichier DemoBouton.java

import java.awt.*;

public class DemoBouton extends java.applet.Applet

{

Button monBouton1;

Button monBouton2;

Page 248: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

248

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

3-1 Les boutons

public void init () { monBouton1 = new Button(); monBouton2 = new Button(); monBouton1.setLabel("bouton 1 "); monBouton2.setLabel("bouton 2"); add(monBouton1) ; // pour insérer le bouton dans l’applet add(monBouton2) ; } }

Page 249: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

249

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

3-1 Les boutons

<! Fichier DemoBouton.htm><HTML> <applet code = " DemoBouton.class" width=200 height=200> </applet> </HTML>

Page 250: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

250

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

3-2 Les étiquettes

Une étiquette (label) est une chaîne de caractères qui ne

dépasse pas une ligne et qui permet d’afficher un texte qui n’est pas

interactif. Son rôle consiste à donner des informations sur les autres

contrôles , notamment les zones de saisie.

Pour accéder à une étiquette, il faut d’abord déclarer un objet

de la classe java.awt.Label

Label l = new Label (« Je suis une étiquette ») ;

add(l) ; // Affichage de l’étiquette sur la fenêtre

On peut modifier le texte d’un label en appelant sa méthode setText()

l.setText(« le nouveau texte ») ;

Page 251: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

251

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE 3-3 les boîtes de dialogues

Les cases à cocher

Un composant. Checkbox est une case placée à côté d’une ligne de texte et qui peut être cochée par l’utilisateur.

Les cases à cocher sont très utilisées dans les programmes d’installation, les fenêtres de configuration ou d’une manière générale dans les boîtes de dialogue

Chaque case à cocher ( Checkbox )représente un état booléen, vrai ou faux selon qu’elle est cochée ou non.

Pour gérer les cases à cocher, on utilise la classe java.awt.Checkbox

Checkbox cb= new Checkbox() ; // crée une case à cocher

Checkbox cb= new Checkbox(String) ; // crée une case à cocher affiche le texte en argument à côté de la case à cocher

Page 252: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

252

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

3-3 les boîtes de dialogues

Les cases à cocher

L’état d’une case à cocher

cb.setState(boolean) ; // true pour cocher, false pour décocher

boolean etat=cb.getState() ; //retourne true si activée, false sinon

cb.getLabel() retourne la chaîne de caractères correspondant à

l’étiquette de la case à cocher

Page 253: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

253

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Pour savoir si une action a été déclenchée par

l’utilisateur( pression d’un bouton, coche d’une case,….), il faut

appeler une méthode écouteur (Listener) par exemple la méthode

action :

public boolean action(Event e , Object arg) de la classe

java.awt.Component est appelée automatiquement lorsqu’une action

est déclenchée par l’utilisateur et traite les événements survenus

pendant l’exécution de l’application ou de l’applet.

Page 254: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

254

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Exemple: L’application suivante permet d’afficher une case à cocher

de nom Test . Si l’utilisateur active cette case le message Case activée

sera affichée, sinon le message Case désactivée sera affichée

import java.awt.*;

class DemoCheckbox extends Frame{ static boolean etat = false; Checkbox test; DemoCheckBox(String titre) { super (titre); FlowLayout fl=new FlowLayout(); // gestionnaire de mise en page setLayout(fl); test=new Checkbox("TEST"); add(test); }

Page 255: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

255

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE public boolean action(Event e,Object arg){ if (test.getState()) etat=true; else etat=false; repaint(); // force la méthode paint() return (true); }

public void paint(Graphics g) { g.setColor(Color.red); g.setFont(new Font("Helevetica",Font.BOLD,20)); if (etat==true) g.drawString("Case activée",50,300); else g.drawString("Case désactivée",50,300); }

Page 256: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

256

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

public static void main(String[] argv) { DemoCheckBox maCase = new DemoCheckBox("Case à cocher"); maCase.setSize(400, 400); maCase.setVisible(true); } // fin de main} // fin de la classe

A l’exécution, on aura

Page 257: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

257

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE Les Boutons radio

Une case à cocher peut être affichée individuellement ou dans un groupe.

Les boutons radio sont des cases à cocher rassemblées dans un groupe. A

l’intérieur du groupe, on ne peut activer qu’une seule case à la fois. La classe

java.awt.CheckboxGroup permet de créer des groupes de boutons radio

CheckboxGroup br ; // déclaration d’un groupe de boutons radioCheckbox b1= new Checkbox(« étiquette1 », état1, br) ;Checkbox b2= new Checkbox(« étiquette2 », état2, br) ;::Checkbox bn= new Checkbox(« étiquetten », étatn, br) ;

- étiquetten est l’étiquette du bouton radio- etatn est l’état du bouton : true ou false- br est le nom du groupe des boutons radio

Page 258: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

258

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les Boutons radio

Exemple : Ecrire une application en java qui permet d’afficher cinq

boutons radio correspondant au statut possible d’une personne

(célibataire, marié, divorcé, veuf, autre)

import java.awt.*;

class DemoCheckboxGroup extends Frame

{

CheckboxGroup status;

Checkbox celibataire,marie,divorce,veuf,autre;

Page 259: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

259

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les Boutons radio DemoCheckboxGroup(String titre) { super (titre); FlowLayout fl=new FlowLayout(); setLayout(fl); status = new CheckboxGroup(); celibataire=new Checkbox("Célibataire",true,status); add(celibataire); marie =new Checkbox("Marié(e)",false,status); add(marie); divorce=new Checkbox("Divorcé(e)",false,status); add(divorce); veuf=new Checkbox("Veuf(ve)",false,status); add(veuf); autre=new Checkbox("Autre",false,status); add(autre); }

Page 260: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

260

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE public static void main(String[] argv) { DemoCheckboxGroup monStatus = new DemoCheckboxGroup("Status"); monStatus.setSize(400, 400); monStatus.setVisible(true); }} cette application crée cinq boutons radio . Le bouton célibataire est coché initialement , mais si l’utilisateur coche une autre bouton du groupe status, la coche de célibataire sera automatiquement supprimé (dans un CheckboxGroup un seul bouton doit être coché la à la fois)

- La méthode getCurrent() de la classe CheckboxGroup retourne l’objet Checkbox correspondant à la réponse seléctionnée

Page 261: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

261

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE 3-4 Les listes déroulantes

Les listes déroulantes sont des composants qui permettent de sélectionner des éléments dans une liste

Les listes à choix uniqueJava permet de créer une liste déroulante à choix unique par

l’intermédiaire de la classe java.awt.Choice

L’objet Choice permet à l’utilisateur de choisir une valeur unique parmi une liste. La syntaxe est la suivante :

Choice maListe = new Choice() ;maListe.addItem(«choix 1») ;maListe.addItem(«choix 2») ;::maListe.addItem(« choix n ») ;

Page 262: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

262

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix unique

Gestion des sélectionsmaListe.select(indice) ;// sélectionne un élément par son indice l’indice est un entier correspondant à l’ordre de l’élément dans la liste. 0 est l’indice du premier élément

maListe.select(élement) ;// sélectionne un élément par son contenu

maListe.countItems() // retourne le nombre d’éléments de la liste

maListe.getItem(n) // retourne le contenu de l’élément n

maListe.getSelectedItem() //retourne le contenu de l’élément sélectionné

maListe.getSelectedIndex() // retourne l’indice de l’élément sélectionné

Page 263: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

263

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE Exemple : Une application java qui crée une liste déroulante de trois éléments (JAUNE, ROSE, BLEU). La couleur sélectionnée est appliquée à l’arrière plan de la fenêtre

import java.awt.*;public class DemoChoice extends Frame{ String str; // str contiendra la couleur choisit Choice choix= new Choice(); // création d'une liste de choix DemoChoice(String titre) // constructeur { super (titre); choix.addItem("JAUNE"); choix.addItem("ROSE"); choix.addItem("BLEU"); add(choix); }

Page 264: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

264

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE public boolean action(Event e,Object arg) { str= choix.getSelectedItem(); repaint(); return (true); }

public void paint(Graphics g){if (str=="JAUNE")setBackground(Color.yellow); else if (str=="ROSE")setBackground(Color.pink); else if (str=="BLEU")setBackground(Color.blue);}

Page 265: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

265

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

public static void main(String[] argv) { DemoChoice monChoix = new DemoChoice("Couleur de l'arrière plan"); monChoix.setSize(400, 400);

monChoix.setVisible(true); } }

Page 266: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

266

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple

Une liste à choix multiple permet d’afficher une liste de choix dans un cadre. Elle permet d’afficher plusieurs lignes et la sélection de plusieurs éléments.

Pour gérer une liste à choix multiple, on doit faire appel à la classe java.awt.List

La classe List contient plusieurs constructeurs, le constructeur le plus intéressant est List ( int i, boolean valeur). Le premier paramètre i définit le nombre de lignes qui seront affichées, et la valeur indique si l’on autorise la sélection multiple (true) ou non.

Page 267: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

267

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple

Une fois l’instance crée, on ajoute des propositions avec

addItem(String)

La classe List dispose d’un grand nombre de fonctions pour gérer

et consulter les informations mémorisées

List li = new List(nbligne, multiSelect) ; // Déclare et initialise une liste

li.addItem(String s) ; // ajoute l’élément s à la fin de la liste li

li.addItem(String s, int indice) ; // insère l’élément s à la position

indice, le premier élément de la liste a pour indice 0

Page 268: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

268

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple

li.delItem(int indice) ; // supprime l’élément qui est à la position indice

li.delItems(int indice1, int indice2) ; // supprime les éléments qui sont entre les positions indice1 et //indice2

li.clear() ; // efface complètement le contenu de la liste

li.countItems() ; // retourne un entier correspondant au nombre

d’éléments de la liste

li.getItem(indice) ; // retourne une chaîne de caractères qui est le

//contenu de l’élément d’indice indice

Page 269: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

269

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple

li.select(indice) ; // sélectionne l’élément d’indice indice

li.setMultipleSelections() ; // est un booléen qui retourne true si la

sélection multiple est autorisée, false sinon

li.deselect(indice) ; // désélectionne l’élément d’indice indice

li.getSelectedIndex();//renvoie l’indice de l’élément sélectionné en

cas de sélection simple. En absence de sélection, le résultat est -1

li.getSelectedIndexes () ; // renvoie un tableau de type int qui

contient les indices de tous les éléments sélectionnés en cas de

sélection multiple

Page 270: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

270

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multipleli.getSelectedItem () ;// s’utilise dans le cas d’une sélection simple,

renvoie une chaîne de caractères qui contient le texte de l’élément sélectionné , ou null en absence de sélection

li.getSelectedItems () ;// s’utilise dans le cas d’une sélection

multiple, renvoie un tableau de strings qui contient les textes de tous les éléments sélectionnés , ou null en absence de sélection

li.isSelected(int indice) ; // retourne true si l’élément d’indice

indice est sélectionné, false sinon.

Exemple : Il s’agit d’écrire un programme qui écrit une liste de 10 lignes qui autorise la sélection multiple. Il installe deux boutons pour ajouter et supprimer des éléments

Page 271: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

271

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple import java.awt.*;

class DemoList extends Frame { List li = new List(10,true); Button b1 = new Button("Ajouter"); Button b2 = new Button("Supprimer");

DemoList(String titre) { super (titre); FlowLayout fl=new FlowLayout(); setLayout(fl); add(b1); add(b2); li.addItem("Element 1"); li.addItem("Element 2"); li.addItem("Element 3"); li.addItem("Element 4"); add(li); }

Page 272: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

272

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple

public boolean action (Event e,Object o) { if (e.target==b1) // si le bouton b est pressé ("ajouter") li.addItem("autre élément ajouté"); else if (e.target==b2)// si le bouton b2 est pressé ("supprimer") { int indice[]=li.getSelectedIndexes(); for (int i=0;i<indice.length-1;i++) { li.delItem(indice[i]); indice[i+1]--; } li.delItem(indice[indice.length-1]); } return true; }

Page 273: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

273

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple

(autre algorithme)

public boolean action (Event e,Object o) { if (e.target==b1) // si le bouton b est pressé ("ajouter") li.addItem("autre élément ajouté"); else if (e.target==b2)// si le bouton b2 est pressé ("supprimer") { int indice[ ]=li.getSelectedIndexes(); for (int i=indice.length-1;i>=0;i--) li.delItem(indice[i]); } return true; }

Page 274: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

274

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Les listes à choix multiple

public static void main(String[] argv) { DemoList maListe = new DemoList("Liste d'éléments"); maListe.setSize(400, 400); maListe.setVisible(true); } }

Page 275: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

275

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

3-5 Les zones de saisiePour recueillir les saisies de l’utilisateur dans une fenêtre

graphique, le package awt propose la classe TextField. Par définition, le champ de texte se limite à une seule ligne. Il est généralement associé à un bouton qui sert à confirmer la saisie et à transmettre au programme les caractères tapés

Les quatre constructeurs disponibles sont :

TextField() : déclare un objet de la classe TextField

TextField(int) : déclare un objet TextField et fixe le nombre maximum de caractères à saisir

TextField(String) : déclare un objet TextField et fixe un texte par défaut

TextField(String, int) :déclare un objet TextField et fixe un texte par défaut et le nombre max de caractères à saisir

Page 276: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

276

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

3-5 Les zones de saisie

Lecture d’un champ de texteLa méthode getText() appliquée à un objet TextField retourne

une chaîne de caractères qui est la chaîne saisie

Pour lire le nombre de caractères prédéfinie, on applique a

méthode getColumns()à un objet TextField.

Un champ de texte peut servir entre autres à entrer une information confidentielle (mot de passe par exemple). Cette information ne doit pas apparaître directement sur l’écran pendant qu’elle est tapée. A la place, on affiche un caractère symbolique ou caractère d’écho. La méthode utilisée est setEchoChar(char)

TextField tF= new TextField (n) ;

TF.setEchoChar(‘*’) ;

Page 277: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

277

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

3-5 Les zones de saisie

Exemple : Une applet qui permet de saisir un nom et un mot de passe

import java.awt.* ;import java.applet.* ;

public class DemoTextField extends Applet{TextField nom , motPasse ;public void init(){ add(new Label(« Nom : »)) ;

nom=new TextField (10) ;add(nom); add(new Label(« Mot de passe : »)) ;motPasse=new TextField (10) ;motPasse.setEchoChar(‘*’) ;add(motPasse); }

}

Page 278: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

278

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Zones de textes pour saisie multiligneLa classe TextField est limitée à la saisie d’une seule

ligne. Pour permettre la saisie de plusieurs lignes, il faut recourir à la classe java.awt.TextArea Les quatre constructeurs disponibles sont :TextArea() : déclare un objet de la classe TextAreaTextArea(int nbLignes, int nbColonnes) : déclare un objet TextArea et initialise le nombre de lignes et de colonnesTextArea(String) : déclare un objet TextField et initialise le contenuTextArea(String, nbLignes, nbColonnes) :déclare un objet TextArea et initialise le contenu, le nombre de lignes et le nombre de colonnes

Page 279: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

279

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Lecture et modification du contenu d’une zone texte

* La méthode getText() appliquée à un objet TextArea retourne une chaîne de caractères qui est le contenu intégral de la zone de texte

* Pour lire une partie du texte sélectionnée, on applique la méthode getSelectedText() à un objet TextArea

* Pour déterminer le nombre de colonnes, on utilise la méthode getColumns() à un objet TextArea

* Pour déterminer le nombre de lignes, on utilise la méthode getRows()à un objet TextArea

* Pour insérer une chaîne de caractères à partir d’une position donnée, on utilise la méthode insertText(Text, n). Cette méthode insère la chaîne Text à partir du nème caractère.

Page 280: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

280

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Exemple d’utilisation de TextArea pour recueillir des commentaires

import java.awt.* ;

import java.applet.* ;

public class DemoTextArea extends Applet {

TextArea texte ;

public void init()

{ add(new Label(" Tapez vos commentaires : ")) ;

texte = new TextArea ("Pas de commentaires",5,10) ;

add(texte);

} }

Page 281: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

281

Chapitre 5 LES INTERFACES GRAPHIQUES

3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE

Exemple d’utilisation de TextArea pour recueillir des commentaires

import java.awt.* ;

import java.applet.* ;

public class DemoTextArea extends Applet { TextArea texte ;

public void init()

{ add(new Label(" Tapez vos commentaires : ")) ;

texte = new TextArea ("Pas de commentaires",5,10) ;

add(texte);

} }

Page 282: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

282

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

Lorsqu’on place des composants dans une applet ou dans

une fenêtre graphique, leur emplacement à l’écran se fait de

manière automatique et d’une façon variable

La disposition des différents composants dépend de:

La taille de la fenêtre ;

La taille des autres composants à ajouter

On peut changer la disposition des différents composants en

utilisant un gestionnaire de mise en page spécifié

Il existe plusieurs gestionnaires de mise en page, chacun

positionnant différemment les éléments graphiques, selon un

algorithme qui leur est propre.

Page 283: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

283

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

Tous les gestionnaires de mise en page implémentent l’interface java.awt.LayoutManager. Pour sélectionner un gestionnaire de mise en page, on utilise la méthode setLayout(LayoutManager) de la classe Container. Les gestionnaires de mise en page les plus utilisés sont :

4-1 FlowLayout : La classe FlowLayout (mise en page flot) place les

composants ligne par ligne de gauche à droite.

Page 284: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

284

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

Tous les gestionnaires de mise en page implémentent l’interface java.awt.LayoutManager. Pour sélectionner un gestionnaire de mise en page, on utilise la méthode setLayout(LayoutManager) de la classe Container. Les gestionnaires de mise en page les plus utilisés sont :

4-1 FlowLayout : La classe FlowLayout (mise en page flot) place les

composants ligne par ligne de gauche à droite.C’est la disposition par défaut, celle qui sera utilisée si l’on

ne choisit pas un autre gestionnaire. Le principe est très simple : tous les éléments sont mis côte à côte, de gauche à droite. Lorsqu’il n’y a plus assez de place pour ajouter un élément, on passe à la ligne suivante. Chaque ligne est centrée par défaut

Page 285: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

285

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-1 FlowLayout :

- Déclaration d’un objet de la classe FlowLayoutFlowLayout fl1 = new FlowLayout();

FlowLayout fl2 = new FlowLayout( int ); /* l’entier définit l’orientation des éléments . On utilise à cet effet les variables prédéfinies CENTER, LEFT et RIGHT*/

FlowLayout fl2 = new FlowLayout(int, int, int);/* le premier argument définit l’orientation, le deuxième argument définit l’espacement horizontal et le troisième définit l’espacement vertical entre les composants */

Page 286: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

286

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-1 FlowLayout :

* Pour qu’une nouvelle mise en page soit effective, il faut

l’installer avec la méthode setLayout() de la classe Container

Exemple de mise en page avec FlowLayout // Fichier DemoFlowLayout.java import java.awt.*;

import java.applet.*;

public class DemoFlowLayout extends Applet

{

Button monBouton1;

Button monBouton2;

Page 287: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

287

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-1 FlowLayout :

public void init () { FlowLayout fl = new FlowLayout(FlowLayout.CENTER,60,0);

setLayout(fl);

monBouton1 = new Button();

monBouton2 = new Button();

monBouton1.setLabel("bouton 1");

monBouton2.setLabel("bouton 2");

add(monBouton1) ;

add(monBouton2) ; } }

Page 288: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

288

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-1 FlowLayout :

<! Fichier DemoFlowLayout.htm>

<HTML>

<applet code = " DemoFlowLayout.class" width=300 height=80>

</applet>

</HTML>

A l’exécution de l’applet :

L’espacement horizontal entre les 2 boutons est de 60 pixels, et l’espacement vertical est de 0

Page 289: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

289

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-2 BorderLayout :

Lorsqu’on utilise BorderLayout, on peut placer les éléments dans 5 zones différentes : « North », « South », « East », « West » et « Center » (nord, sud, est, ouest et center)

Déclaration d’un objet de la classe BorderLayout

BordreLayout bl1 = new BorderLayout();

BorderLayout bl2 = new BorderLayout(int, int);

/* le premier argument définit l’espacement horizontal et le deuxième définit l’espacement vertical entre les composants

Page 290: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

290

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-2 BorderLayout :

Remarque : Contrairement à ce qui se passe pour la mise en page flot, l’espacement n’a pas d’influence sur la distance qui sépare les composants du bord de l’applet */

Exemple de mise en page avec BorderLayout // Fichier DemoBorderLayout.java import java.awt.*; import java.applet.*;

public class DemoBorderLayout extends Applet {

public void init () { BorderLayout bl = new BorderLayout(25,25); setLayout(bl);

Page 291: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

291

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-2 BorderLayout :

add("North",new Button("Bouton nord")) ; add("South",new Button("Bouton sud")) ;

add("Center",new Button("Bouton Centre")) ;

add("East",new Button("Bouton est")) ;

add("West",new Button("Bouton ouest")) ; } }

<HTML><applet code = " DemoBorderLayout.class" width=400 height=120></applet></HTML>A l’exécution, on aura :

Page 292: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

292

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-3 GridLayout : La classe GridLayout organise tous les composants d’un

conteneur en grille (lignes et colonnes). Le même espace est affecté à tous les composants. Lorsqu’on instancie GridLayout, on doit spécifier le nombre de lignes et de colonnes. Les éléments sont ajoutés dans la grille de gauche à droite, de haut en bas.

Déclaration d’un objet de la classe GridLayout

GridLayout gl = new GridLayout (int nb_lignes, int nb_colonnes);

/* On spécifie le nombre de lignes ou le nombre de colonnes souhaité. L'une des deux valeurs doit être nulle sinon seul le nombre de lignes est pris en compte. Par exemple GridLayout(5,4) est identique à GridLayout(5,0) */

Page 293: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

293

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-3 GridLayout :

GridLayout gl = new GridLayout (int ligne, int colonne ,int h, int v);/* les deux derniers arguments spécifient l'espacement horizontal et vertical des composants */

Exemple : Affichage de l'applet suivante qui est composée de 4 boutons et une liste de 5 éléments . Ces composants sont disposés en trois colonnes comme suit :

Page 294: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

294

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-3 GridLayout :

public class DemoGridLayout extends Applet { List l=new List(1,false); // création d'une liste déroulante public void init() { l.addItem("Premier"); l.addItem("Deuxième"); l.addItem("Troisième"); l.addItem("Quatrième"); l.addItem("Cinquième");

setLayout(new GridLayout(0,3,20,20)); /* mise en page grille de 3 colonnes, l'espacement horizontal et vertical des composants et fixé à 20 pixels */ add(new Button(" Bouton 1 ")) ; //(1ère ligne et 1ère colonne)

Page 295: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

295

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-3 GridLayout :

add(new Button(" Bouton 2 ")) ;// (1ère ligne et 2ème colonne) add(l); // insértion de la liste (1ère ligne et 3ème colonne)

add(new Button(" Bouton 3 ")) ; //(2ème ligne et 1ère colonne)

add(new Button(" Bouton 4 ")) ; //(2ème ligne et 2ème colonne) } }<HTML><applet code = "DemoGridLayout.class" width=280 height=120></applet></HTML>

Page 296: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

296

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

4-4 GridBagLayout :

Le dernier gestionnaire de mise en page présenté

correspond à la classe GridBagLayout (grille étendue). Cette classe

est la plus puissante des gestionnaires de mise en page, mais elle

est également la plus difficile à utiliser . la grille est divisée en

cellules égales. Mais pour faciliter les ajustements, un composant

peut occuper plusieurs cellules de la grille. On introduit par ailleurs

un objet de la classe GridBagConstraints qui donne des indications

de positionnement et de dimension à l'objet GridBagLayout

Page 297: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

297

Chapitre 5 LES INTERFACES GRAPHIQUES

4 – LES GESTIONNAIRES DE MISE EN PAGE

Variables d'instance pour manipuler un objet GridBagLayout

gridx et gridy : ces variables contiennent les coordonnées del'origine de la grille (0,0)

gridwidth, gridheight : ces variables définissent combien de cellules (en hauteur et largeur) va occuper un composant. Par défaut leur valeur est 1

GridBagConstraints.REMAINDER spécifie que le prochain composant inséré va être le dernier de la ligne ou de la colonne courante

GridBagConstraints.RELATIVE est utilisé pour placer un composant après le dernier composant d'une ligne ou d'une colonne

Page 298: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

298

Chapitre 5 LES INTERFACES GRAPHIQUES

5 – LES CONTENEURS

Pour mettre en service les différents composants déjà vus

(boutons, listes, cases à cocher, …) , il faut toujours les incorporer

dans un objet d'une classe dérivée de la classe abstraite Container

(conteneur). Les conteneurs les plus utilisés sont :

Panel : Conteneur qui n'a pas de fenêtre propre sert surtout à

ordonner les contrôles. La classe java.applet.Applet est dérivée de

la classe Panel

Window : crée une fenêtre principale sans cadre ni menu

Frame (dérivant de Window) : il s'agit d'une classe de fenêtre avec

barre de titre

Page 299: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

299

Chapitre 5 LES INTERFACES GRAPHIQUES

5 – LES CONTENEURS

5-1 Le conteneur Panel

Le conteneur Panel est un panneau qui sert essentiellement à

ranger les composants. La classe Panel est très simple, elle ne

contient qu'un seul constructeur et une seule méthode add()

Panel p = new Panel() ; // définit un nouveau panneau

add(p); : intègre le panneau p dans un autre conteneur (une

applet par exemple)

Un panneau peut lui même contenir d'autres conteneurs. Ainsi des

panneaux peuvent être emboîtés

 

Page 300: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

300

Chapitre 5 LES INTERFACES GRAPHIQUES

5 – LES CONTENEURSExemple : Utiliser dans une applet deux panneaux  

import java.awt.* ; import java.applet.* ; public class DemoPanel extends Applet { public void init() { FlowLayout fl=new FlowLayout(); setLayout(fl); Panel p1= new Panel(); Button b1=new Button("Premier"); Button b2=new Button("Deuxième"); p1.add(b1); p1.add(b2); add(p1); FlowLayout fl2=new FlowLayout(FlowLayout.LEFT,40,20); setLayout(fl2); Panel p2= new Panel(); Button b3=new Button("Troisième"); Button b4=new Button("Quatrième"); p2.add(b3); p2.add(b4); add(p2); } }

Page 301: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

301

Chapitre 5 LES INTERFACES GRAPHIQUES

5 – LES CONTENEURS5-2 Le conteneur Frame

Une frame ou encadrement permet de créer une fenêtre à l'extérieur de l'applet qui s'exécute comme une application indépendante

La classe Frame contient deux constructeurs :

Frame f = new Frame(); // création d'une fenêtre d'encadrement invisible 

Frame f = new Frame(String); // création d'une fenêtre d'encadrement invisible avec un nom de la fenêtre.

 

Page 302: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

302

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Les interactions de l'utilisateur avec l'interface (par

exemple cliquer sur la souris, taper sur une touche du

clavier, presser un bouton , …) sont appelés événements.

On dit que l'on "traite un événement" lorsqu'on prend en

compte celui ci et que l'on exécute des actions en

conséquence . La méthode qui traite l'événement est

également appelée gestionnaire d'événement

La classe java.awt.Event est capable de mémoriser

tous les paramètres relatifs à un événement

Page 303: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

303

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Des programmes à l'écoute

Les réactions aux événements utilisateur dans un

programme java sont gérés par des programme à l'écoute

(listener). Ces programmes doivent implémenter l'interface

EventListener (auditeurs d'événements) ou des interfaces qui

héritent de EventListener ( par exemple ActionListener). On

appellera "adaptateur" toute instance d'une classe implémentant

une interface héritée de EventListener.

L'interface ActionListener déclare une seule méthode :

public void actionPerformed(ActionEvent)

Page 304: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

304

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

L'ajout d'un programme à l'écoute impose deux instructions :

- La classe doit importer le package java.awt.event qui

contient les classes d'écoute

import java.awt.event.*;

- La classe doit utiliser l'instruction implements pour

déclarer qu'elle utilisera une ou plusieurs interfaces d'écoute. Par

exemple :

public class Evenement extends java.applet.Applet implements

ActionListener

Page 305: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

305

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONSLes interfaces EventListener permettent à un composant

d'interface graphique utilisateur de générer des événements

utilisateur. Aucun composant ne pourra être entendu par les

autres éléments d'un programme sans la présence d'au moins un

des auditeurs. Un programme doit contenir une interface

d'auditeur pour chaque type de composant

Un objet peut déléguer la gestion de ses événements à

plusieurs Listeners. Chacun des Listener réagira aux événements

de l’objet.

Un Listener peut écouter plusieurs objets .

Pour qu’un objet puisse déléguer la gestion on doit spécifier qui s’en

chargera par une méthode du type : add<Typed’événement>Listener.

Page 306: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

306

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Tableau synthétique des événements et des « listeners »

Le tableau ci-dessous indique :

-En première colonne : un type d’événement

-En deuxième colonne, les types de composants graphiques pouvant

recevoir l’événement indiqué

-En troisième colonne, l’interface « Listener » qu’on peut

implémenter pour traiter l’événement indiqué, et la classe que l’on

peut étendre pour servir d’adptateur, lorsqu’une telle classe existe

-En dernière colonne , les méthodes déclarées par le « listener »

Page 307: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

307

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Page 308: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

308

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

ComponentEvent Dialog Frame

ComponentListener ComponentMoved(ComponentEvent) ComponentHidden(ComponentEvent) ComponentResized(ComponentEvent) ComponentShown(ComponentEvent)

AdjustementEvent Scrollbar AdjustementListener AdjustementValueChanged (AdjustementEvent)

MouseEvent Canvas Dialog Frame Panel Window

MouseListener MouseAdapter

MousePressed(MouseEvent) MouseReleased(MouseEvent)

KeyEvent Component KeyListener KeyAdapter

KeyPressed(KeyEvent) KeyReleased(KeyEvent) KeyTyped(KeyEvent)

ContainerEvent Container ContainerListener ComponentAdded(ContainerEvent) ComponentRemoved(ContainerEvent)

TextEvent TextComponent TextListener TextValueChanged(TextEvent)

Page 309: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

309

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Exemple : Il s’agit de construire une interface graphique qui

permet de tracer un cercle rouge si on clique sur le bouton trace et

d’effacer ce cercle si on clique sur le bouton efface

import java.awt.*;import java.awt.event.*;class EssaiBouton extends Frame implements ActionListener{ Button trace = new Button("trace"); Button efface = new Button("efface"); EssaiBouton() { setLayout(new FlowLayout(FlowLayout.CENTER,5,5));

Page 310: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

310

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONSExemple :

add(trace); add(efface);

trace.addActionListener(this);

efface.addActionListener(this);

}

public void actionPerformed(ActionEvent e) { Graphics g=getGraphics();

if (e.getSource()==trace)

{ g.setColor(Color.red);

g.drawOval(50,50,100,100); }

else if (e.getSource()==efface)

{ g.setColor(getBackground()); g.drawOval(50,50,100,100); } }

Page 311: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

311

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Exemple :

public static void main(String[] argv)

{

EssaiBouton monCadre=new EssaiBouton();

monCadre.setSize(300,300);

monCadre.setVisible(true);

}

}

Page 312: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

312

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

* L’interface MouseListener

Les prototypes de méthodes définies dans MouseListener

void mouseClicked(MouseEvent e) la souris a été ciqué

(pressée et relachée)

void mouseEntered(MouseEvent e) : la souris entre dans le

composant

void mouseExited(MouseEvent e) : La souris sort du

composant

void mousePressed(MouseEvent e) : La souris est pressé

void mouseReleased(MouseEvent e) : la souris relachée. */

Page 313: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

313

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

* Exemple : utilisation des événements de la souris

public class Souris extends Frame implements MouseListener

{ TextField text1;

Souris(String titre)

{ super(titre);

text1 = new TextField(30);

FlowLayout fl=new FlowLayout();

setLayout(fl);

add(text1);

addMouseListener(this);

}

Page 314: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

314

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

* Exemple : utilisation des événements de la souris

public void mouseClicked(MouseEvent e)

{

text1.setText("Vous avez cliqué sur la souris à " + e.getX()

+","+e.getY()); }

public void mouseEntered(MouseEvent e)

{text1.setText("La souris est entrée.");}

public void mouseExited(MouseEvent e)

{text1.setText("La souris est sortie.");}

public void mousePressed(MouseEvent e)

{text1.setText("La souris est enfoncée ");}

public void mouseReleased(MouseEvent e)

{text1.setText("La souris est relachée ");}

Page 315: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

315

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

* Exemple : utilisation des événements de la souris

public void mousePressed(MouseEvent e) { text1.setText("La souris est enfoncée "); }

public void mouseReleased(MouseEvent e) {text1.setText("La souris est relachée ");}

public static void main(String[] arg)

{Souris maSouris = new Souris("Gestion de la souris");

maSouris.setSize(300,300);

maSouris.setVisible(true);

}

}

Page 316: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

316

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

* Exemple : utilisation des événements du clavier

* Les méthodes de l'interface KeyListener

void keyPressed(KeyEvent e) : touche pressée

void keyReleased(KeyEvent e) : touche relachée

void keyTyped(KeyEvent e) :touche tapée

Page 317: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

317

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

* Exemple : utilisation des événements du clavier

public class Touche extends Frame implements KeyListener { String text=""; Touche(String titre) { super(titre); addKeyListener(this); }

public void paint(Graphics g) { g.drawString(text,10, 100); }

Page 318: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

318

Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

* Exemple : utilisation des événements du clavierpublic void keyTyped(KeyEvent e) { text = text + e.getKeyChar(); //getKeyChar() retourne le caractère pressée repaint(); } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { }

public static void main(String[] arg) {Touche maTouche = new Touche("Gestion du clavier"); maTouche.setSize(300,300); maTouche.setVisible(true); } }

Page 319: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

319

Chapitre 5 LES INTERFACES GRAPHIQUES

-Exemples de javax.swingExemple 1

import javax.swing.*;

import java.awt.*;

class TestJFrame extends JFrame

{ TestJFrame()

{ super("une application");

Container cp = getContentPane();

// public Container getContentPane() de la classe JFrame

// Retourne un objet de type Container de cette fenêtre

JLabel label = new JLabel("Hello",SwingConstants.CENTER);

cp.add(label, BorderLayout.CENTER);

}

Page 320: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

320

Chapitre 5 LES INTERFACES GRAPHIQUES

-Exemples de javax.swing

Exemple 1

public static void main(String args[])

{ JFrame f = new TestJFrame();

f.setBounds(200,200, 150, 100);

f.setVisible(true);

}

}

Page 321: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

321

Chapitre 5 LES INTERFACES GRAPHIQUES

-Exemples de javax.swing

Exemple2

import javax.swing.*;

import java.awt.event.*;

public class SwingDemo extends JFrame

{ Icon image = new ImageIcon("smallbabies.jpeg");

//JLabel label = new JLabel(image);

JButton SwingButton = new JButton(image);

public SwingDemo(String WindowTitle)

{super(WindowTitle);

getContentPane().add(SwingButton);

// getContentPane().add(label); }

Page 322: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

322

Chapitre 5 LES INTERFACES GRAPHIQUES

-Exemples de javax.swing

Exemple2

public static void main(String args[])

{ JFrame frame = new SwingDemo("Swing Demo Window");

frame.setSize(400, 400);

frame.setVisible(true);

}

}

Page 323: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

323

Chapitre 6 LES EXCEPTIONS

1- INTRODUCTION

2- DEFINITION D'UNE EXCEPTION

3- UN PREMIER EXEMPLE D'UNE EXCEPTION

4- ATTRAPER UNE EXCEPTION4-1 Les blocs try et catch4-2 Le mot clé throws4-3 Le bloc finally4-4 Quelques classes d'exceptions

5- DEFINIR SA PROPRE EXCEPTION

Page 324: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

324

LES EXCEPTIONS

1- Introduction

Un programme ne se déroule pas toujours comme prévu. Plusieurs cas d'erreurs peuvent venir perturber son bon déroulement : division par zéro, dépassement des bornes d'un tableau, fichier inexistant,…

Dans tout programme, le traitement des erreurs représente une tâche importante, souvent négligée par les programmeurs.

Java dispose d'un mécanisme très efficace appelé le mécanisme d'exceptions pour obliger les programmeurs à prendre en compte les erreurs. Ce mécanisme admet deux principes fondamentaux :

Page 325: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

325

LES EXCEPTIONS

1- Introduction

- La plus grande partie des erreurs qui pourraient

survenir doit être détectée par le compilateur, de façon à

limiter autant que possible les occasions de les voir se

produire pendant l'utilisation des programmes

- Le traitement des erreurs doit être séparé du reste

du code, de façon que celui-ci reste lisible.

Page 326: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

326

LES EXCEPTIONS

2- Définition d’une exception

Une exception est une interruption de l'exécution d'un programme suite à une erreur. Par exemple, une division par zéro provoque une exception de type ArithmeticException

Les exceptions en java sont des instances de sous-classes des classes :

java.lang.Error (pour des erreurs graves, qui devront généralement conduire à l'arrêt du programme)

ou

java.lang.Exception (pour des événements inattendus, qui seront souvent traités de sorte qu'elle ne provoquent pas l'arrêt du programme).

Page 327: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

327

LES EXCEPTIONS

3- Un premier exemple d' une exception

Avant de voir comment traiter les exceptions , regardons à quoi elles correspondent en prenant un exemple très simple de division par zéro :

class DivParZero{ public static void main(String[] argv) {

int zero = 0 ; zero = 2000 / zero ; }}

Page 328: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

328

LES EXCEPTIONS

3- Un premier exemple d' une exception

A l'exécution du programme, on obtient l'affichage suivant :

Exception in thread "main" java.lang.ArithmeticException: / by zero at DivParZero.main(DivParZero.java:6)

On distingue :

- Le nom complet de l'exception qui a été levée : java.lang.ArithmeticException

- Un message précisant la cause de cette erreur : / by zero

- L'indication de la classe, de la méthode et du numéro de ligne où s'est

produite cette exception : at DivParZero.main(DivParZero.java:6)

Page 329: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

329

LES EXCEPTIONS

3- Un premier exemple d' une exception

Si on désire ne pas avoir d'interruptions dans notre programme, on gérer l'erreur en utilisant les blocs try et catch de la façon suivante :

class DivParZero{public static void main(String[] argv){ int zero = 0 ; try { zero = 2000/zero ; } catch (ArithmeticException e) { System.out.println("Une exception arithmétique a été levée"); System.out.println("Message : "+e.getMessage()); } }A l'exécution, on obtient :Une exception arithmétique a été levée Message : / by zero

Page 330: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

330

LES EXCEPTIONS

4- Attraper une exception

Pour pouvoir attraper une exception ( ne pas la laisser

arrêter le programme), il faut entourer le code susceptible de la

lancer dans un bloc précédé de l'instruction try. L'exception

lancée dans le bloc peut être attrapée par une sorte de méthode

d'un type particulier désignée par le mot clé catch et prenant

pour paramètre un objet du type de l'exception lancée ou du

type d'une classe parente.

Page 331: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

331

LES EXCEPTIONS

4-1 Les blocs try et catchSi on décide de traiter une exception, on dit qu'on attrape

l'exception et il faut utiliser dans ce cas les mots clé try et catch

Le mot clé try permet de spécifier un bloc de code sur le quel on s'attend qu'une exception soit levée ( c à d possibilité d'avoir une erreur)

Le bloc de l'instruction try doit être suivi d'une instructions catch

Le mot clé catch sert à spécifier le code à exécuter pour une exception donnée. Il faut faire suivre le mot catch d'une parenthèse ouvrante, d'un type exception (une classe), du nom qu'on lui donne , d'une parenthèse fermante et du code associé placé entre accolade

Page 332: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

332

LES EXCEPTIONS

4-1 Les blocs try et catch

Donc les blocs try et catch sont utilisés comme suit :try{// zone contenant des instructions pouvant générer des

erreurs (lever des exceptions)}catch (NomException e){// Traitement à faire dans le cas de l'exception e ( erreur e a été rencontré dans le bloc try)}

Page 333: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

333

LES EXCEPTIONS

4-1 Les blocs try et catchUn bloc try peut être suivi de plusieurs blocs catch chacun

spécifiant un type d'exception différent :try{

opération _dangereuse1;opération_dangeureuse2;opération_dangeureuse3;

catch (Exception1 e1){}catch (Exception2 e2){}catch (Exception3 e3){}

Page 334: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

334

LES EXCEPTIONS

4-2 Mécanisme de lancement d'une exceptionOn suppose qu'une instruction i d'une méthode de nom

uneMethode génère une erreur (ou lance une une exception) :

* Si l'instruction i se trouve dans un bloc de uneMethode précédé

du mot réservé try, et suivi d'un bloc précédé du mot réservé catch

assorti d'un argument de la classe ou d'une super-classe de l'exception

lancée. Alors :

** les instructions qui suivent le lancement de l'exception et

intérieures au bloc try sont ignorées

** les instructions du bloc catch sont effectuées

** Le programme reprend normalement avec l'instruction qui suit

le bloc catch.

Page 335: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

335

LES EXCEPTIONS

4-2 Mécanisme de lancement d'une exception* Si l'instruction i n'est pas située dans un bloc try ,

Alors :

** Si uneMethode est la méthode main, le programme se termine et

l'exception n'a pas été attrapée.

** Sinon, on se retrouve dans la méthode qui a appelée

uneMethode, au niveau de l'instruction j qui a fait appel à uneMethode.

L'instruction j lance à son tour l'exception.

Si une exception est lancée et pas attrapée, et donc qu'elle

provoque la terminaison du programme, la pile des méthodes

traversées par l'exception est indiquée à l'utilisateur. On dit qu'il y’a

propagation de l'exception

Page 336: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

336

LES EXCEPTIONSExemple : Calcul d'une moyenne (entière) de notes entières envoyées en

arguments par la ligne de commande .Les arguments non entiers doivent être ignorés et signalés à l'utilisateur

class ExceptionCatch{ static int moyenne(String[] liste) { int somme = 0,entier, nbNotes = 0; for (int i = 0; i < liste.length; i++) { try { entier = Integer.parseInt(liste[i]); somme += entier; nbNotes++; } catch (NumberFormatException e) {System.out.println("la "+ (i+1) +"ème note n'est pas entière");} } return (somme/nbNotes); }

Page 337: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

337

LES EXCEPTIONS

public static void main(String[] argv) { System.out.println("La moyenne

est"+moyenne(argv)); }}A l'exécution : java ExceptionCatch 12 a 15La 2 ème note n'est pas entière La moyenne est 13

Si on donne en exécution : java ExceptionCatch 12.5 dLa 1 ème note n'est pas entière La 2 ème note n'est pas entière Exception in thread "main" java.lang.ArithmeticException: / by zero)at ExceptionCatch.moyenne(Compiled Code)at

ExceptionCatch.main(ExceptionCatch.java:23La division par zéro n'est pas attrapée

Page 338: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

338

LES EXCEPTIONS

4-3 Le mot clé throws

Une méthode susceptible de lancer une exception sans l'attraper

(c'est-à-dire contenant une instruction susceptible de générer une erreur

sans que celle-ci soit traitée à l'intérieur de la méthode) doit l'indiquer dans

son en-tête par le mot clé throws.

Ce mot clé permet d'avertir le système qu'une certaine catégorie

d'exceptions ne seront pas traitées.

Dans la déclaration d'une méthode, throws permet de déclarer la

liste des classes d'exceptions que la méthode est susceptible de

déclencher :

Syntaxe :

Entête méthode throws ClasseException

Page 339: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

339

LES EXCEPTIONS

4-3 Le mot clé throwsExemple :

void fonction() throws IOException

La méthode fonction est susceptible de lancer des exceptions de type entrée/sortie

Remarque : Il est obligatoire d'indiquer par le mot clé throws les

exceptions susceptibles d'être lancées et non attrapées (sauf pour les

exceptions les plus courantes de l'API). Sinon il y 'aura erreur de

compilation

Page 340: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

340

LES EXCEPTIONS

4-4 Bloc FinallyUn bloc finally est un bloc d'instructions précédé du mot clé

finally. Ce bloc sera toujours exécuté après le traitement d'exception. Il est en général utilisé pour fermer des fichiers, libérer des ressources,

Un bloc finally suit Un bloc try ou un bloc catchExemple d'utilisation d'un bloc finally

class UtiliseFinally{ static int moyenne(String[] liste) { int somme=0, entier, nbNotes=0, i=0; for ( i=0;i<liste.length;i++) { try { entier=Integer.parseInt(liste[i]); somme +=entier; nbNotes++; }

Page 341: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

341

LES EXCEPTIONS

4-4 Bloc Finally finally { System.out.println("donnée traitée :"+liste[i]); } } return somme/nbNotes; } public static void main(String[] argv) { try { System.out.println("La moyenne est "+moyenne(argv)); } catch (NumberFormatException e) { System.out.println("Erreur sur vos entiers"); } }}A l'exécution de : java UtiliseFinally 20 xy On aura : donnée traitée : 20

donnée traitée : xyErreur sur vos entiers

Page 342: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

342

LES EXCEPTIONS

4-5 Quelques classes d'exceptions

Exception Type d'exception

IOException Entrée SortieExemples : lecture sur un fichier inexistant

ArithméticException ArithmétiqueExemple : Division par zéro

ArrayIndexOutOfBoundsException

Dépassement des bornes d'un tableau

NumberFormatException Format du nombre n'est pas respectée Exemple : un int représentée en float

OutOfMemoryException Dépassement de mémoire

Page 343: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

343

LES EXCEPTIONS

5- Définir sa propre exception

Si on veut pouvoir signaler un événement exceptionnel d'un

type non prévu par l'API, il faut étendre la classe java.lang.Exception.

En général la classe étendue ne contient qu'un ou plusieurs

constructeurs et éventuellement une redéfinition de la méthode

toString

Lors du lancement de l'exception, (à l'aide du mot réservé throw) ,

on crée une instance de la classe définie

Page 344: 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires

_____________________________________________________________________________________________________Mme A. BENOMAR

344

LES EXCEPTIONS

5- Définir sa propre exceptionExemple :

class ExceptionRien extends Exception{ public String toString()

{ return "Aucune note n'est valide " ; }}//Cette classe peut être utilisée comme exception dans une autre classe :class ExceptionThrow{static int moyenne(String[] liste) throws ExceptionRien { int somme = 0,entier, nbNotes = 0; for (int i = 0; i < liste.length;i++) { try {entier = Integer.parseInt(liste[i]); somme += entier; nbNotes++; }