Telechargé par Jack Statham

cours JAVA

publicité
Cours JAVA
Prof: S.KRIT
______________________________________________________________________________
Filières: SMI, IGE, GL
SOMMAIRE
Chapitre 1
GENERALITES SUR LE LANGAGE
JAVA
Chapitre 2
OUTILS ELEMENTAIRES POUR LA
PROGRAMMATION JAVA
Chapitre 3
HERITAGE ET INTERFACES EN JAVA
Chapitre 4
LES APPLETS
Chapitre 5
LES INTERFACES GRAPHIQUES
Chapitre 6
LES EXCEPTIONS
GL_IGE_SMI
1
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
GL_IGE_SMI
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, adresse
Méthodes : changeAdresse(), calculSalaire(),dateRetraite()..
Objets : Mohammed, Nadia, …
GL_IGE_SMI
2
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
GL_IGE_SMI
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)-
GL_IGE_SMI
3
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
GL_IGE_SMI
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
GL_IGE_SMI
4
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)
GL_IGE_SMI
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.
GL_IGE_SMI
5
3- ENVIRONNEMENT DE JAVA
3- 2 Versions de Java
Java é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
GL_IGE_SMI
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.
Compatibilité de version
Java assure une compatibilité binaire ascendante (les programmes
compilés avec une ancienne version peuvent s'exécuter avec une
plate-forme plus récente).
GL_IGE_SMI
6
3- ENVIRONNEMENT DE JAVA
3-3 Editions de la plate-forme Java
La 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 produits
d’é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) pour
développer des applications et un environnement d’exécution Java 2 (JRE)
pour les exécuter.
GL_IGE_SMI
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 bytecode Java indépendant de toute plate forme
- La commande qui permet la compilation est la suivante :
Javac nom_fich.java
Création d’un ou plusieurs fichiers .class.
GL_IGE_SMI
7
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
-….
GL_IGE_SMI
-
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
GL_IGE_SMI
8
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 paquetage
On 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 liste
import liste.A ; // importer la classe A du package liste
GL_IGE_SMI
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.Graphics
java.awt.Color
GL_IGE_SMI
9
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, ...)
GL_IGE_SMI
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
GL_IGE_SMI
10
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.
GL_IGE_SMI
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
GL_IGE_SMI
11
5 - 3 Conventions d’écriture en JAVA
Type
Convention
Nom d’une
classe
Débute par une majuscule
Exemple
class Polygone
Nom d’un
objet
Débute par une minuscule
Peut s’étaler sur plusieurs mots Chaque
mot commence par une majuscule sauf le
premier
premierObjet
Nom de
méthode
Débute par une minuscule
Sauf pour le constructeur
void
Constante
S’écrit en majuscules
A_CONSTANT
ecrire()
GL_IGE_SMI
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
GL_IGE_SMI
12
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
GL_IGE_SMI
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
GL_IGE_SMI
13
6- 3 Exemple d’utilisation d’objet
Il 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;
static float taux_h=50;
int nb_h;
// le nom de l'employé
// le taux horaire en dirhams
float salaireh () // nb_h : nombre d’heures
{ float s;
s=(taux_h*nb_h);
return s;
}
GL_IGE_SMI
public 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 dh
Le salaire de Nadia est 1900.0 dh
GL_IGE_SMI
14
7- LES CONSTRUCTEURS
29
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) ;
GL_IGE_SMI
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;
}
GL_IGE_SMI
15
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
GL_IGE_SMI
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
}
GL_IGE_SMI
16
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
GL_IGE_SMI
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
GL_IGE_SMI
17
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
GL_IGE_SMI
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
byte
short
char
Destiné à une valeur logique (true, false)
Octet signé 8 bits (-128 et 127)
Entier court signé 16 bits (-32768 – 32767)
Caractère 16 bits
GL_IGE_SMI
18
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
GL_IGE_SMI
Java dispose également des classes suivantes pour gérer ces primitives :
Classe
Primitive
______________________________
Character
Byte
Short
Integer
Long
Float
Double
Boolean
char
byte
short
int
long
float
double
boolean
GL_IGE_SMI
19
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
GL_IGE_SMI
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
GL_IGE_SMI
20
33-2 Identificateurs
A 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
GL_IGE_SMI
3-3 Mots clé de java
Les mots suivants sont les mots clé de java :
abstract
case
default
extends
for
int
null
return
synchronized
true
assert
catch
do
false
if
interface
package
short
this
try
boolean
char
double
final
implements
long
private
static
throw
void
break
class
else
finally
import
native
protected
super
throws
volatile
byte
continue
enum
float
instanceof
new
public
switch
transient
while
enum Jours{Lun, Mardi, Mer, Jeudi, Vend, Sam, Dim};
GL_IGE_SMI
21
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
GL_IGE_SMI
Exemple1 : attribut statique
class 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);
System.out.println(obj1.s);
//15
System.out.println(obj1.nons);
System.out.println(obj2.nons);
}
}
//15
//20
//30
GL_IGE_SMI
22
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 n, String nam) //constructeur
{ num=n;
nom=nam ;
}
float moyenne_eleve()
{
float som;
Som= (note1+note2+note3) /3;
return (som); } }
GL_IGE_SMI
Exemple2 :Calcul des moyennes des élèves ainsi que la moyenne de la classe
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();
GL_IGE_SMI
23
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.3333
Eleve 2 Nom : Amal Moyenne : 15.3333
La moyenne de la classe est : 14.833
GL_IGE_SMI
-3-5 Les opérateurs de java
*
Multiplication
/
division
%
modulo
+
addition
soustraction
=
affectation
==
identité
!=
différent de
&&
et logique
||
ou logique
++
incrémentation
+= - = *= /=
GL_IGE_SMI
24
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 .
GL_IGE_SMI
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();
}
}
GL_IGE_SMI
25
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 ; }
}
GL_IGE_SMI
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.
GL_IGE_SMI
26
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
}
}
GL_IGE_SMI
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
GL_IGE_SMI
27
4- Les structures de contrôle
Les structures de contrôle de java sont similaires à celles de C
Les instructions conditionnelles
a – L’instruction if
if
(expression)
InstructionSiVrai ;
else
InstructionSiFaux
b- L’opérateur ?
condition
Exemple :
int min = a<b ?
?
siVrai
:
siFaux
int a, b ;
a
:
b
GL_IGE_SMI
c- L’instruction switch
switch (variable)
{ case cas1 : instruc11 ;
instruc12 ;
.
break ;
case cas2 : instruc21 ;
instruc22 ;
.
break ;
.
default : instrDefault ;
}
GL_IGE_SMI
28
Les instructions de répétition
a – L’instruction while
while
(condition)
instruction ;
b – L’instruction do
do
instr ;
while (condition)
c – L’instruction for
for ( 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--)
GL_IGE_SMI
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.
GL_IGE_SMI
29
Modificateur
abstract
Définition
Prototype de méthode
Une méthode qui ne peut pas être redéfinie.
final
protected
private
public
Méthode ne peut être invoquée que par des
sous classes.
une méthode privée ne peut être utilisée que
dans les méthodes de la même classe
méthode visible
méthodes
par
toutes
les
autres
Méthode de classe indépendant des objets
static
GL_IGE_SMI
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
GL_IGE_SMI
30
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
GL_IGE_SMI
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 ; }
}
GL_IGE_SMI
31
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)) ;
}
}
GL_IGE_SMI
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
GL_IGE_SMI
32
6 – Les tableaux
65
Les 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
Exemple :
tableau[ ] ;
int
int
[] tab1
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.
GL_IGE_SMI
Exemple :
class TableauA
{ public static void main(String[] arg)
{
int[] tableau ;
tableau = new int[2];
tableau[0]=-5;
tableau[1]= 8
for(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}
GL_IGE_SMI
33
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
GL_IGE_SMI
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) ;
}
}
GL_IGE_SMI
34
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 dimensions
La 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
GL_IGE_SMI
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) ou
Scanner sc=new Scanner(System.in);
Int a,
a = sc.nextInt();
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
GL_IGE_SMI
35
Exemple : Ecrire une fonction de prototype int puissance(int a, int b) qui
calcule ab, a et b sont des entiers.
import java.util.Scanner;
public class apuissanceb {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a, b;
double res;
System.out.println("donner la valeur de a: ");
a = sc.nextInt();
System.out.println("donner la valeur de b: ");
b = sc.nextInt();
res = Math.pow(a,b); // Math.pow: calcul de a puissance b
System.out.println("\n A Puiss B = "+res);
}
GL_IGE_SMI
}
8- LES CHAINES DE CARACTERES
En 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 +.
GL_IGE_SMI
36
- Les Conversions
String toLowerCase()
Retourne une chaîne égale à la chaîne
convertie en minuscules.
String toLowerCase(Locale Retourne une chaîne égale à la chaîne
locale)
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 Retourne une chaîne égale à la chaîne
locale)
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 Retourne une chaîne ou tous les ac ont été
nc)
remplacé par des nc. S’il n’y a pas de
remplacement, la chaîne elle-même est
retournée.
GL_IGE_SMI
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);
}
}
GL_IGE_SMI
37
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
GL_IGE_SMI
- Les Constructeurs de la classe StringBuffer
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
int capacity() la capacité de la chaîne de caractères : longueur max
int length()
la longueur de la chaîne de caractères
void setLength (int n) la longueur de la chaîne est n ; les caractères
éventuellement ajoutés ont une valeur indéterminée.
GL_IGE_SMI
38
- 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
GL_IGE_SMI
8-2 Les chaînes de caractères de type StringBuffer
Exemple : 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
} }
GL_IGE_SMI
39
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érence
Toute 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
}
}
*/
GL_IGE_SMI
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 objet
Exemple :
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
}
}
GL_IGE_SMI
40
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 ) */
GL_IGE_SMI
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 METHODES
4 – CASTING OU TRANSTYPAGE
5 – LES INTERFACES
6 – LES CLASSES ABSTRAITES
GL_IGE_SMI
41
HERITAGE ET INTERFACES EN JAVA
Chapitre 3
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.
GL_IGE_SMI
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
GL_IGE_SMI
42
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; // possible
b= a; // faux
b= (B) a; // peut être possible
GL_IGE_SMI
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)
}
}
GL_IGE_SMI
43
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.
GL_IGE_SMI
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 :
GL_IGE_SMI
44
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)
} }
GL_IGE_SMI
1-5- Un exemple de l’héritage
Prenons la hiérarchie suivante :
Personne
Fonctionnaires
Profession_liberale
Eleve
Chomeur
….
MedecinPublic
Enseigantt
Avocat
Commerçant
Primaire
Les classes Fonctionnaire, Profession_liberale, Eleve et
Chomeur sont dérivés de la classe Personne
GL_IGE_SMI
45
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().getNam());}
}
GL_IGE_SMI
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;
}
}
GL_IGE_SMI
46
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);}
}
GL_IGE_SMI
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);
GL_IGE_SMI
47
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 Fonctionnaire
Je suis M et je suis MedecinPublic
Je suis E et je suis Eleve
Je suis C et je suis Chomeur
GL_IGE_SMI
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();
GL_IGE_SMI
48
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
GL_IGE_SMI
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", "SIL_S4");
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
GL_IGE_SMI
49
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);
}
GL_IGE_SMI
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",« Smestre_S4");
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 : Semestre_S4
Prix : 50.0
GL_IGE_SMI
50
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); }
GL_IGE_SMI
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;
}
GL_IGE_SMI
51
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(500.00,"Programmation
en langage Java",« SIL_S4");
LivreCompare l2 = new LivreCompare(50.00,"Programmation en
langage Java", "SIL_S4");
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érents
Remarque : Pour avoir un comportement plus conforme à ce que l'on attend
pour la méthode equals il faudrait redéfinir celle-ci
GL_IGE_SMI
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); }
GL_IGE_SMI
52
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",« SIL_S4");
LivreCompare2 l2 = new LivreCompare2 (50.00,
"Programmation en langage Java",« SIL_S4");
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
GL_IGE_SMI
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
GL_IGE_SMI
53
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
GL_IGE_SMI
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)
{Aa;
B b = new B();
System.out.println("b.attr= "+b.attr);
System.out.println("a.attr= "+a.attr);
b.meth();
a.meth();
}
}
}
}
GL_IGE_SMI
54
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 A */
GL_IGE_SMI
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.
GL_IGE_SMI
55
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");
GL_IGE_SMI
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
GL_IGE_SMI
56
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, …)
GL_IGE_SMI
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
{}
GL_IGE_SMI
57
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() ;
}
GL_IGE_SMI
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
GL_IGE_SMI
58
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
GL_IGE_SMI
1- GENERALITES SUR LES COLLECTIONS JAVA
1-1 Définition d’une collection
Une 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(…),..)
GL_IGE_SMI
59
1- GENERALITES SUR LES COLLECTIONS JAVA
1-2 Organisation des collections
L’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
GL_IGE_SMI
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
GL_IGE_SMI
60
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, Netscape
Navigator, google chrome).
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.
GL_IGE_SMI
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 »
GL_IGE_SMI
61
LES APPLETS
Les liens dans une page HTML
Chapitre4
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
GL_IGE_SMI
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
GL_IGE_SMI
62
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.
GL_IGE_SMI
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
GL_IGE_SMI
63
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
GL_IGE_SMI
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
GL_IGE_SMI
64
LES APPLETS
Chapitre4
4 – EXEMPLE D’UNE APPLET
1 è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
GL_IGE_SMI
LES APPLETS
Chapitre4
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 )
GL_IGE_SMI
65
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
GL_IGE_SMI
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.
GL_IGE_SMI
66
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.
GL_IGE_SMI
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, …)
GL_IGE_SMI
67
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)
20
50
(50,20)
GL_IGE_SMI
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);
}
GL_IGE_SMI
68
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
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
2-1 La classe Graphics
* drawString (String texte, int x, int y) : affiche la chaîne de caractères
texte 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
(x1,y1)
hauteur
larg : largeur
* 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
GL_IGE_SMI
69
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
}
GL_IGE_SMI
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
GL_IGE_SMI
70
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
(x,y)
Largeur
Largeur
Hauteur
Dans le cas d’un cercle largeur = hauteur = diamètre
* fillOval (int x, int y, int largeur, int hauteur) affiche un ovale plein
GL_IGE_SMI
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); }
GL_IGE_SMI
71
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); }
}
GL_IGE_SMI
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.
GL_IGE_SMI
72
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) ;
GL_IGE_SMI
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)
GL_IGE_SMI
73
Chapitre 5
LES INTERFACES GRAPHIQUES
2-3 La classe java.awt.Font
L’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 normal
Font.BOLD : texte gras
Font.ITALIC : texte italique
taille : précise la taille de la police en pixels
GL_IGE_SMI
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
GL_IGE_SMI
74
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
GL_IGE_SMI
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);
}
GL_IGE_SMI
75
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
GL_IGE_SMI
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
GL_IGE_SMI
76
LES INTERFACES GRAPHIQUES
Chapitre 5
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Voici une partie de la hiérarchie de la classe java.awt.Compenent
java.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
GL_IGE_SMI
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
GL_IGE_SMI
77
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;
GL_IGE_SMI
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) ;
}
}
GL_IGE_SMI
78
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>
GL_IGE_SMI
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 ») ;
GL_IGE_SMI
79
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
GL_IGE_SMI
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
GL_IGE_SMI
80
LES INTERFACES GRAPHIQUES
Chapitre 5
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.
GL_IGE_SMI
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);
}
GL_IGE_SMI
81
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); }
GL_IGE_SMI
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
GL_IGE_SMI
82
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 radio
Checkbox 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
GL_IGE_SMI
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;
GL_IGE_SMI
83
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);
}
GL_IGE_SMI
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
GL_IGE_SMI
84
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 unique
Java 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 ») ;
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix unique
Gestion des sélections
maListe.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é
GL_IGE_SMI
85
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);
}
GL_IGE_SMI
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);
}
GL_IGE_SMI
86
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);
}
}
GL_IGE_SMI
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.
GL_IGE_SMI
87
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
GL_IGE_SMI
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
GL_IGE_SMI
88
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
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multiple
li.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
GL_IGE_SMI
89
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);
}
GL_IGE_SMI
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;
}
GL_IGE_SMI
90
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;
}
GL_IGE_SMI
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);
}
}
GL_IGE_SMI
91
LES INTERFACES GRAPHIQUES
Chapitre 5
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
3-5 Les zones de saisie
Pour 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
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
3-5 Les zones de saisie
Lecture d’un champ de texte
La 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(‘*’) ;
GL_IGE_SMI
92
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
GL_IGE_SMI
{
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);
}
}
Chapitre 5
LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Zones de textes pour saisie multiligne
La 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 TextArea
TextArea(int nbLignes, int nbColonnes) : déclare un objet
TextArea et initialise le nombre de lignes et de colonnes
TextArea(String) : déclare un objet TextField et initialise le
contenu
TextArea(String, nbLignes, nbColonnes) :déclare un objet
TextArea et initialise le contenu, le nombre de lignes et le
nombre de colonnes
GL_IGE_SMI
93
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.
GL_IGE_SMI
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);
}
}
GL_IGE_SMI
94
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);
}
}
GL_IGE_SMI
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.
GL_IGE_SMI
95
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.
GL_IGE_SMI
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
GL_IGE_SMI
96
Chapitre 5
LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
4-1 FlowLayout :
- Déclaration d’un objet de la classe FlowLayout
FlowLayout 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 */
GL_IGE_SMI
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;
GL_IGE_SMI
97
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) ;
}
}
GL_IGE_SMI
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
GL_IGE_SMI
98
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
GL_IGE_SMI
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);
GL_IGE_SMI
99
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 :
GL_IGE_SMI
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) */
GL_IGE_SMI
100
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 :
GL_IGE_SMI
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)
GL_IGE_SMI
101
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>
GL_IGE_SMI
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
GL_IGE_SMI
102
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 de
l'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
GL_IGE_SMI
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
GL_IGE_SMI
103
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
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS
Exemple : 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);
}
}
GL_IGE_SMI
104
Chapitre 5
LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS
5-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.
GL_IGE_SMI
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
GL_IGE_SMI
105
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)
GL_IGE_SMI
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
GL_IGE_SMI
106
Chapitre 5
LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Les 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.
GL_IGE_SMI
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 »
GL_IGE_SMI
107
Chapitre 5
LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
ComponentListener
ComponentMoved(ComponentEvent)
ComponentHidden(ComponentEvent)
ComponentResized(ComponentEvent)
ComponentShown(ComponentEvent)
AdjustementEvent Scrollbar
AdjustementListener
MouseEvent
MouseListener
MouseAdapter
AdjustementValueChanged
(AdjustementEvent)
MousePressed(MouseEvent)
MouseReleased(MouseEvent)
ComponentEvent
Dialog
Frame
KeyEvent
Canvas
Dialog
Frame
Panel
Window
Component
ContainerEvent
TextEvent
KeyListener
KeyAdapter
KeyPressed(KeyEvent)
KeyReleased(KeyEvent)
KeyTyped(KeyEvent)
Container
ContainerListener
ComponentAdded(ContainerEvent)
ComponentRemoved(ContainerEvent)
TextComponent
TextListener
TextValueChanged(TextEvent)
GL_IGE_SMI
108
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));
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Exemple :
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); }
}
GL_IGE_SMI
109
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);
}
}
GL_IGE_SMI
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. */
GL_IGE_SMI
110
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);
}
GL_IGE_SMI
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 ");}
GL_IGE_SMI
111
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);
}
}
GL_IGE_SMI
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
GL_IGE_SMI
112
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);
}
GL_IGE_SMI
Chapitre 5
LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des événements du clavier
public 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);
} }
GL_IGE_SMI
113
Chapitre 5
LES INTERFACES GRAPHIQUES
-Exemples de javax.swing
Exemple 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);
}
GL_IGE_SMI
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);
}
}
GL_IGE_SMI
114
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);
}
GL_IGE_SMI
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);
}
}
GL_IGE_SMI
115
Chapitre 6
LES EXCEPTIONS
1- INTRODUCTION
2- DEFINITION D'UNE EXCEPTION
3- UN PREMIER EXEMPLE D'UNE EXCEPTION
4- ATTRAPER UNE EXCEPTION
4-1 Les blocs try et catch
4-2 Le mot clé throws
4-3 Le bloc finally
4-4 Quelques classes d'exceptions
5- DEFINIR SA PROPRE EXCEPTION
GL_IGE_SMI
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 :
GL_IGE_SMI
116
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.
GL_IGE_SMI
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).
GL_IGE_SMI
117
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 ;
}
}
GL_IGE_SMI
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)
GL_IGE_SMI
118
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
GL_IGE_SMI
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.
GL_IGE_SMI
119
LES EXCEPTIONS
4-1 Les blocs try et catch
Si 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
GL_IGE_SMI
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)
}
GL_IGE_SMI
120
LES EXCEPTIONS
4-1 Les blocs try et catch
Un 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)
{
}
GL_IGE_SMI
LES EXCEPTIONS
4-2 Mécanisme de lancement d'une exception
On 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.
GL_IGE_SMI
121
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
GL_IGE_SMI
LES EXCEPTIONS
Exemple : 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);
}
GL_IGE_SMI
122
LES EXCEPTIONS
public static void main(String[] argv)
{
System.out.println("La moyenne
est"+moyenne(argv));
}
}
A l'exécution : java ExceptionCatch 12 a 15
La 2 ème note n'est pas entière
La moyenne est 13
Si on donne en exécution : java ExceptionCatch 12.5 d
La 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:23
La division par zéro n'est pas attrapée
GL_IGE_SMI
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
GL_IGE_SMI
123
LES EXCEPTIONS
4-3 Le mot clé throws
Exemple :
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
GL_IGE_SMI
LES EXCEPTIONS
4-4 Bloc Finally
Un 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 catch
Exemple 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++;
}
GL_IGE_SMI
124
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 : xy
Erreur sur vos entiers
GL_IGE_SMI
LES EXCEPTIONS
4-5 Quelques classes d'exceptions
Exception
Type d'exception
IOException
Entrée Sortie
Exemples : lecture sur un fichier
inexistant
ArithméticException
Arithmétique
Exemple : Division par zéro
ArrayIndexOutOfBoundsExcepti Dépassement des bornes d'un
on
tableau
NumberFormatException
Format du nombre n'est pas
respectée
Exemple : un int représentée en
float
OutOfMemoryException
Dépassement de mémoire
GL_IGE_SMI
125
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
GL_IGE_SMI
LES EXCEPTIONS
5- Définir sa propre exception
Exemple :
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++;
}
GL_IGE_SMI
126
Téléchargement