Vous êtes sur la page 1sur 159

Programmation Java

Caractristiques de Java
Java est un langage de programmation moderne dvelopp
par Sun Microsystems (aujourd'hui rachet par Oracle)
Java est un langage de programmation oriente objets
Java fonctionne comme une machine virtuelle (indpendant
de toute plate forme)
Java est simple (pas de pointeur, pas dhritage multiple)
Java est gratuit
Java contient une trs riche bibliothque de classes
(Packages) qui permettent de:
Crer des interfaces graphiques
Utiliser les donnes multimdia
Communiquer travers les rseaux
Environnement de Java
1. Java Developers Kit (JDK)
Le compilateur (javac)
Linterprteur (java), ou bien Un JRE (Java Runtime
Environment)
Lappletviewer (inspecteur dapplet)

Le JDK contient par ailleurs lAPI de java (Application


Programmes Interface)
Le Kit JDK ne contient pas dditeur
2. Le code source
Une application java est gnralement compose de plusieurs fichiers
sources. Les fichiers sources de java ont lextension .java
Une seule classe publique par fichier;
Le nom du fichier doit tre le mme que celui de la classe qui contient
main();

3. La compilation
La compilation va transformer le code source en j-code ou byte-code
java
Javac nom_fich.java
Cration dun fichier nom_fich.class
4. La machine virtulle Java (JVM)
Le code java comprend des instructions crites pour JVM
Un programme java est excut sur tout ordinateur (tout OS) pour
lequel une machine virtuelle est disponible
Une application sera excute par linterprteur de java
Java nom_fich.java
JVM va faire le lien entre le byte code et la machine.
Convention dcriture en Java
Type Convention Exemple
Nom dune classe Dbute par une majuscule Class Voiture
Nom dune variable Dbute par une minuscule premierObjet
Nom de mthode Dbute par une minuscule Void demarre()
sauf pour le constructeur
Constante Scrit en majuscule CONST
Nom de fichier Ne contient pas de blanc et Nom_fich
source ne commence jamais par
des chiffres

Toutes ces dclarations sans accent ! !


Les programmes Java sont des classes qui reprsentent des
objets de la vie relle
Pour excuter une classe Java comme un programme, cette
classe doit possder une mthode nomme main().
Ce qu'il faut retenir
La JVM est le cur de java,
JVM fait fonctionner vos programmes java,
prcompils en code binaire (byte code)
Les fichiers contenant le code source de vos
programmes java ont l'extension .Java
Les fichiers prcompils correspondant vos codes
sources java ont l'extension .Class
Le byte code est un code intermdiaire entre votre
programme et votre machine
Un programme java, cod sous windows peut tre
prcompil sous mac et enfin excut sous linux,
Votre machine NE PEUT PAS interprter du byte
code.
Systme - longlet Avanc bouton Variables denvironnement
Les trois tapes principales de
la programmation en Java

Ecrire le programme en Java et lenregistrer


sur un disque sous lextension .java
Compiler le programme pour le traduire en
un code binaire spcial comprhensible par
Java: javac.
Excuter le programme.
Premier programme Java sous
Windows
public class BonjourMonde {
public static void main(String[] args) {
System.out.println("Bonjour Monde");
}
}

Compilation
Code_source.java code_binaire.class

Java fait la diffrence entre les lettres minuscules et majuscules.


Programmer avec Eclipse
Eclipse IDE est un environnement de dveloppement intgr (Integrated
Development Environment). On peut y crire, compiler et excuter les
programmes. Donc permet de crer des projets de dveloppement

Jbuilder (payant), NetBeans, JCreator


Un JRE (ou Java Runtime Environment) sert lire les programmes
qui ont t cods en Java. Eclipse est cod en Java : donc, pour
utiliser Eclipse, il vous faut un JRE.
Cration de programmes dans
Eclipse

NomClasse

Mthode
principale

Main() Le point dentre dune application (programme) Java


Toutes les mthodes commencent par une ligne de dclaration
appele signature de la mthode :
public static void main(String[] args)
Le mot-cl public signifie que la mthode main() peut tre
utilise par nimporte quelle autre classe Java ou par Java lui-
mme.
Le mot-cl static signifie quil nest pas ncessaire de crer
une instance (une copie) de lobjet BonjourMonde en
mmoire pour pouvoir utiliser cette mthode.
La liste des arguments : String[] args signifie que la mthode
peut recevoir un tableau (array) de chanes de caractres
(String) qui reprsentent du texte. Les valeurs qui sont
passes la mthode sont appeles arguments.
La programmation oriente
objet ?
Cest la reprsentation du monde rel
Cest la capacit de regrouper des
paramtres dans un ensemble.
Un ensemble de principe cls qui
permettent la mise en place dun logiciel.
Les objets
Un objet peut tre vu comme un ensemble de donnes
et des fonctions qui lui sont associes.
Ces fonctions sont appeles mthodes.
Un objet est "responsable" de ses donnes, il peut les
protger.
Dans ce cas, un autre objet n'accde pas directement
ces donnes, il le fait via les mthodes, on parle alors
d'encapsulation.
Les classes
Une classe est un moule d'objet (un
modle), elle dcrit les attributs et les
mthodes de toute une famille d'objets.
Une classe dfinit en particulier un type
d'objet. Les objets d'une mme classe
auront des attributs de mme type, mais
avec des valeurs diffrentes.
Une classe est la description gnrale
d'une famille d'objet et un objet est une
instance de classe.
Exemple

Manger
Fille Boire
Parler
Un prnom Dormir
Un nom
Rougir
Une date de naissance
Une adresse
Un lieu de naissance

Ce sont les proprits

Elle a des attributs et des mthodes


Quest quune classe ?

Manger
Fille Boire
Parler
Un prnom Dormir
Un nom
Rougir
Une date de naissance
Une adresse
Un lieu de naissance

Ce sont les actions quelle peut raliser

Elle a des attributs et des mthodes


Dclaration dune classe
public class Fille {

private int id ;
private String nom;
private String prenom; On les appelle variables
private String dateNaissance; dinstance.
private String lieudeNaissance;

public static int nbFille =0 ;


}

Elles sont communes toutes les instances.


Elles sont accessibles uniquement par le biais dun objet.
Dclaration dune classe
public class Fille {

private int id ;
private String nom;
private String prenom; Les variables de la classe
private String dateNaissance;
private String lieudeNaissance;

public static int nbFille =0 ;

}
Il faudra utiliser le mot cl static pour dclarer une
variable de classe.
Une variable de classe est une variable qui est
commune toutes les instances de cette classe. Une
variable de ce type peut tre accessible sans avoir
passer par une instance de la classe.
Rsum: Un objet est un lment (ou instance) d'une classe. L'objet est
le composant effectif des programmes (c'est lui qui calcule) alors que la
classe est plutt une dfinition ou une spcification pour l'ensemble des
instances venir.
Dclaration dun objet
Pour utiliser une classe, elle doit tre instancie. Il y
aura alors cration dun objet. Mais avant de crer un
objet il faut le dclarer:

NomClasse nomObjet ;
Fille salma ;
On vient de dclarer un objet de type Fille qui sappelle
salma. Il va falloir construire lobjet.

nomObjet = new NomClasse();


salma = new Fille();
new permet de construire lobjet.
On peut crer et dclarer un objet en une seule tape:
NomClasse nomObjet = new NomClasse();
Exemple dutilisation dobjet
class Ecriture {
String chaine= "encore une fois" ;
void ecrire (String autrechaine){
System.out.println(chaine);
System.out.println(autrechaine);
}
}
public class PourFeliciter {
public static void main (String[] arg) {
Ecriture ecrivain;
ecrivain = new Ecriture();
ecrivain.ecrire(" bravo ");
ecrivain.chaine = "et pour finir ";
ecrivain.ecrire("au revoir");
}
}
Les constructeurs
Un constructeur a pour objectif dinitialiser les attributs de la
classe.
Un constructeur a plusieurs caractristiques:

o Il porte le mme nom que sa classe.


o Il ne retourne pas de valeur, et ne mentionne pas void au dbut
de sa dclaration.
o Toute classe possde au moins un constructeur. Si une classe ne
dclare pas de constructeur, un constructeur vide est cre
automatiquement par dfaut.
Un constructeur est une fonction qui est appele par le bais
de loprateur new
monObjet = new Constructeur (arguments);
Si un constructeur est dfini dans une classe, il faudra
obligatoirement lutiliser.
Exemple
class Incremente {
int increment;
int petitPlus;
Incremente (int i, int petit) {
increment = i ;
petitPlus = petit;
}
int additionne (int n) {
return (n + increment + petitPlus);
}
class Constructeur {
public static void main (String[] arg) {
Incremente monAjout = new Incremente(10,1);
System.out.println(monAjout.additionne(4));
}
}
La variable this
La variable this sert a rfrencier dans une mthode lobjet en cours
dutilisation. Son emploi peut savrer utile dans les constructeurs avec des
paramtres lorsque les variables de la classe et celles du constructeur portent
le mme nom.
class Incremente {
int increment;
int petitPlus;
Incremente (int increment, int petit) {
this. increment = increment ;
/* variable de la classe = variable du constructeur*/
petitPlus = petit; }
int additionne (int n) {
return (n + increment + petitPlus) }
class Constructeur {
public static void main (String[] arg) {
Incremente monAjout = new Incremente(10,1);
System.out.println(monAjout.additionne(4)); }
}
Les mthodes
Les mthodes sont les oprations quon peut appliquer
aux objets. Elles permettent de changer ltat des objets
ou de calculer des valeurs
En JAVA, une mthode dtient quatre points essentiels :

Type de Retour nomMethode(type1 argument1,type2


argument, type3 argument3)
{
Corps de la mthode
}
Le nom de la mthode
Les arguments
La valeur de retour
Le corps de la mthode
Les mthodes
Les arguments : ce sont les arguments que lon souhaite
passer la mthode. Elles sont obligatoirement spars par
une virgule.
Le nom de la mthode : Cest le nom que lon attribue la
mthode.
Pour lappeler, il faudra utiliser ce nom.
La valeur de retour : Chaque mthode peut retourner une
valeur. Il faudra la spcifier dans le corps de la mthode.
Si le type est void, il ne retournera rien.
Par contre, si on spcifie un type de retour, il faudra
obligatoirement retourner une valeur. Dans le cas
contraire, une erreur de compilation sera gnre.
Lencapsulation
Cest un mcanisme fondamental de la Programmation
Oriente objet.
Lencapsulation consiste protger les informations
contenues dans un objet.
Un utilisateur peut manipuler les donnes laide des
mthodes.
Il existe 3 niveaux daccs.

Public

Priv (Private)

Protg (Protected)
Lencapsulation
Public
Accessible par tout le monde (toutes les mthodes)
Priv
Uniquement manipulable par lobjet lui-mme.
(utilise que par les mthodes de la mme classe)

Protg

manipulable par lobjet lui-mme


Et les enfants (les sous classes).
Lencapsulation
Par dfaut, si on nindique aucun modificateur, la classe,
la mthode ou la variable est visible par toutes les
classes se trouvant dans le mme packetage.

Final

Une variable constante

Une mthode qui ne peut pas tre redfinie


Exemple
Class Repetiteur {
private String nom;
private int nbRepetitions;
String message = travaillons;
Repititeur (String nom, int nbRepetitions) {
this.nom = nom;
this.nbRepetitions = nbRepetitions; }
void repete () {
for (int i=0 ; i<= nbRepetitions; i++)
System.out.println (message); }
public String toString() {
return nom + dit: + message; }
public static void main (String[ ] argv) {
int repetition = Integer.parseInt(argv[0]);
Repetiteur ecrivain = new Repetiteur (Ali, repetition);
ecrivain.repete();
Exemple (suite)
// ecrivain.repete() est possible car repete () est non prive
// ecrivain.nom=Ali,; est possible car cest linstance de la mme classe
ecrivain.message = reposons nous;
System.out.println( ecrivain);
}
}

Integer.parseInt(argv[0]); : la mthode parseInt(String chaine) est une


mthode de classe, de la classe java.lang.Integer. Elle retourne un int
correspondant la chane de caractres passe en argument. Elle lance une
exception de type NumberFormatException si la chane de caractres ne
correspond pas un int.
Techniques de base de la
programmation java
1. Commentaires en java
En java, il existe deux types de commentaires:
// commentaire simple sur une ligne (uniligne)
/* */ commentaire de plusieurs lignes (multiligne)
2. Types lmentaires en java
Java dispose de 8 types lmentaires suivants. Ces types sont appels
primitives en java:
boolean Destin une valeur logique (true, false)
byte Octet sign 8 bits (-128 et 127)
short Entier court sign 16 bits (-32768 32767)
char Caractre 16 bits
int Entier sign 32 bits
float Virgule flottante 32 bits
double Double prcision 64 bits
long Entier long 64 bits
Java dispose galement des classes suivantes pour grer ces primitives
Classe Primitive
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Boolean boolean
3. Dclaration et utilisation de variables
La dclaration est lattribution dun identificateur une entit en
cours de cration.
a. Dclaration des variables
Pour dclarer une variable on crit:
[modificateur] primitive identificateur
Par exemple: public int nombreEntier;
b. Identificateur
A chaque objet, classe, programme ou variable est associ un
identificateur. En java, ces identificateurs doivent respecter les
rgles suivantes:
Les majuscules et les minuscules sont distingues
Le premier caractre ne doit pas tre un chiffre
Lidentificateur ne doit pas tre un mot cl de java
c. Mots cl de java
abstract boolean break byte case
catch char class continue default
do double else extends false
final finally float for if
implements import instanceof int interface
long native new null package
private protected public return short
static super switch synchronized this
throw throws transient true try
Void volatile while
4. Dclaration et utilisation de variables
* multiplication
/ division
% modulo
+ addition
- soustraction
= affectation
== identit
!= diffrent de
&& et logique
|| ou logique
>> Dcalage binaire droite
<< Dcalage binaire gauche
& et binaire
| ou binaire
5. Les tableaux
a. Dclaration dun tableau
Les tableaux doivent tre dclars comme tous les objets. Java
dispose de deux syntaxes quivalentes pour la dclaration des
tableaux.

primitive[ ] tableau;
ou
primitive tableau[ ];
Exemple: int[] tab1; ou int tab2[];
b. Dfinition dun tableau
La dfinition dun tableau est lopration dont le rsultat est la
cration dun objet tableau.
Les tableaux Java sont de taille fixe. La dfinition devra indiquer la
taille du tableau. La syntaxe employer est la suivante:
tableau= new primitive[dimension];
Dimension est le nombre dlments que le tableau pourra contenir
Comme les autres objets, les tableaux peuvent tre dclars et dfinis sur la
mme ligne:
int[] tab2 = new int[5];

Exemple:
class TableauA {
public static void main(String[] argv) {
char[] tableau;
tableau = new char[2];
tableau[0]=h;
tableau[1] = a;
System.out.println(tableau); // println utilise avec tableau de caractres
} }
A lexcution on aura: ha
Autre faon de dfinir un tableau
On peut dfinir un tableau avec un tableau littral au moment de sa
dclaration.
Exemple: boolean tableau[] = {true,false,true};
c. Longueur dun tableau
Peut tre trouve par lattribut length.
tab.length est la longueur du tableau tab.

class TableauB {
public static void main(String[] argv) {
int tableau[] = new int[3];
System.out.println("Taille du tableau: "+ tableau.length);
for(int i=0; i< tableau.length ; i++)
{ tableau[i] = i;
System.out.println(tableau[i]);
}
} }
Dpassement des bornes dun tableau
Le dpassement est une erreur non pas de compilation mais
dexcution.
Exemple: for(int i=0; i<= tableau.length ; i++)
On utilise les mots rservs catch et try pour intercepter
lexception.
d. Tableau multidimensionnel
Les tableau de java peuvent comporter plusieurs dimensions.
Pour dclarer un tableau multidimensionnel, in utilise la syntaxe
suivante:
Primitive[ ][ ] [ ] tableau;
Exemple: int[ ][ ] tableau;

La dfinition du tableau peut tre effectue laide de:


Tableaux littraux: int[][] tableau= {{1,2,3,4},{5,6,7,8}};
ou
Loprateur new: int[][] tab= new int[2][4];
Pour accder tous les lments du tableau, on doit utiliser des
boucles imbriques:
Exemple: int[][] tab= new int[2][4];
for(int i= 0; i< tab.length; i++) {
for (int j= 0; j< tab[i].length; j++) }
tab[i][j]= i+j; } }
6. Lire les entres clavier
Pour lire au clavier on peut utiliser la classe Scanner. On doit
linstancier pour pouvoir lutiliser.
Scanner sc = new Scanner(System.in);
Lobjet sc peut prendre diffrents paramtres.
System.in correspond l'entre standard en Java.
Il faut importer la classe Scanner, grce l'instruction import.
Cette classe se trouve dans le package java.util.
Ajouter au dessus de la dclaration de la classe:
import java.util.Scanner;
a. Rcupration des entres
Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir un mot :");
String str = sc.nextLine();
System.out.println("Vous avez saisi : " + str);

La mthode nextLine() rcupre le contenu de toute la ligne saisie et


repositionne la "tte de lecture" au dbut d'une autre ligne. (Utiliser
pour renvoyer une chane de caractres)
Pour lire un int, on doit utiliser la myhode nextInt().
De faon gnrale, pour rcuprer un type de variable, il vous suffit
d'appeler nextType de variable commenant par une majuscule .
Exemple:
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
double d = sc.nextDouble();
long l = sc.nextLong();
byte b = sc.nextByte();
Le type primitive char n'est pas pris en compte par la classe Scanner.
On pourrait rcuprer un caractre comme suit:
System.out.println("Saisissez une lettre :");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char carac = str.charAt(0);
System.out.println("Vous avez saisi le caractre : " + carac);
Rcuprer une chane de caractres,
utiliser une mthode de l'objet String (ici, charAt(0) )
rcuprer le premier caractre saisi !
Exercice
Ecrire une application qui permet de lire un tableau dentiers partir du
clavier et dafficher la somme.

7. Les chaines de caractres


En java, les chaines de caractres sont des objets. Ce sont des instances de la
classe String (du package java.lang).
Java dfinit un oprateur pour les objets String. Cest loprateur + de
concatnation
Exemple:
class EcritChaine {
void ecrire(String s) {
String chaine = 3 + s + " curieux";
System.out.println(chaine +" a pour longueur " + chaine.length()); }
public static void main(String[] argv) {
EcritChaine ecrivain = new EcritChaine();
ecrivain.ecrire(" Etudiants");
}
}
8. Les structures de contrle
a. Les instructions conditionnelles
Linstruction if
If (expression)
InstructionSiVrai;
Else
InstructionSiFaux;

Loprateur ?
Condition ? siVrai : siFaux ;
Exemple: int a=2, b=5;
int min=a<b ? a : b;
Linstruction switch
Switch (variable) {
case cas1: instruc11;
instruc12;

break;
case cas2: instruc21;
instruc22;

break;

default : instrDefault;
}
b. Les instructions de rptition
Linstruction while
while (condition)
Instruction;
Linstruction do while
do
instructions;
while (condition)
Linstruction for

for(initialisation ; test ; incrmentation)


La boucle for en java autorise plusieurs expressions spares par une
virgule apparaitre dans la partie initialisation et incrmentation
mais pas dans la partie test.
Exemple:
class SubChar
{
public static void main(String[] argv) {
int i;
String s;
for(i=0,s=testing;(i<10)&&(s.length()>1);i++,s=s.substring(1))
System.out.println(s);
}
}

Syntaxe: String substring(int debut, int fin)


Page de testeur de code
Eclipse a une fonctionnalit bien pratique appele page de testeur
de code, qui permet de tester rapidement nimporte quel bout de
code sans mme crer une classe.
Slectionner le menu Fichier, Nouveau, Autre, puis Java,
Excution/Dbogage Java, Page de testeur de code et entrer le mot Test
comme nom de ta page. Slectionner le code puis excuter par:
Exercice1:

Ecrire une application qui extrait le mot de passe et le login de l'URL


suivante : http://localhost:8080/mdp=blablabla&&login=bliblibli/

Corrig:
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/";
String login=url.substring(22,url.lastIndexOf("/"));
System.out.println(login);
String mdp = login.substring(4, login.lastIndexOf("&&"));
//String x=login;
System.out.println(mdp);
System.out.println(mdp.length());
int longueur = 4+mdp.length()+8;
int log=login.length();
String identifiant=login.substring(longueur, log);
System.out.println(identifiant);
Exercice2:
Ecrire une application qui consiste faire en sorte que, l'excution,
tous les arguments passs par la ligne de commande soient crits en
sortie du programme (par System.out.println(...), un par ligne. Si les
arguments sont "Bonjour" et "Salut", le programme doit crire :
Bonjour
Salut.
En Eclipse, il faut donner le ou les argument(s) avant d'excuter le
programme en utilisant: "Run Configurations", puis l'onglet
"Arguments" et prciser les arguments dans "Program arguments".

Corrig:
public class EcrireArguments
{
public static void main(String[] argv)
{
int i;
for (i = 0; i < argv.length; i++)
System.out.println(argv[i]);
System.out.println(); // pour sauter une ligne
} }
Exercice3:
Ecrire un programme qui calcule la factorielle d'un entier n et indique
l'cran le rsultat. Le nombre n doit tre lu sur la ligne de commande.

Pour transformer une chane de caractres s en un int que l'on affecte une
variable entire n, on peut crire : n = Integer.parseInt(s);.
La mthode parseInt est une mthode statique de la classe java.lang.Integer.

Corrig:

class Factorielle
{
public static void main(String[] arg)
{
int n, factorielle = 1 ;
n = Integer.parseInt(arg[0]);
for (int i = 2; i <= n; i++)
factorielle *= i;
System.out.println("Voila la factorielle de " + n + " : " + factorielle);
}
}
9. Les attributs et mthodes statiques
Ce sont les attributs ou mthodes qui ont le modificateur static

Un attribut (une mthode) statique (ou de classe) appartient


une classe et non a ses instances.

Un attribut statique existe ds que sa classe est charge en


mmoire alors quun attribut dinstance existe lors de
linstanciation de la classe.

Une mthode statique ne peut pas tre redfinie. Elle est


automatiquement finale.

Pour utiliser un attribut ou une mthode statique on crit:


NomClasse.nomAttributStatique
NomClasse.nomMethodeStatique(arguments)
Cependant Java permet galement dutiliser:
nomObjet.nomAttributStatique
nomObjet.nomMethodeStatique(arguments)

nomObjet tant une instanciation de la classe qui contient lattribut


ou la mthode statique.

On peut accder un membre statique par lintermdiaire de la


classe ou dune instance.

Si on modifie la valeur dune variable statique, elle est modifie pour


tous les instances, mmes celles cres avant la modification. Cela
est impliqu par le fait que la variable nexiste qu un seul
exemplaire, partag par la classe et toutes les instances.
Exemple: Variable et mthode statiques
class UnPetitEcrivain {
static String identificateur= Salma;
static void ecrire(String chaine) {
System.out.println(identificateur + vous dit + chaine); }
}
public class Statique {
public static void main (String[] argv) {
System.out.println(Lecrivain est + UnPetitEcrivain.identificateur);
}}

Remarque:
Ces deux classes (UnPetitEcrivain et Statique) peuvent tre mises
dans le mme fichier mais obligatoirement ce fichier sappellera
Satique.java car sil ya au moins une classe publique dans un fichier,
ce fichier doit porter le mme nom que la classe publique .
9. La surcharge
Si plusieurs mthodes possdent le mme nom mais
diffrent par l'ensemble des types de ses paramtres, ou
par l'ordre des types de ses paramtres, on dit qu'il y a
surcharge.

Lorsque une mthode surcharge est invoque, la bonne


mthode est choisi pour quil y ait correspondance sur
les paramtres de lappel et les arguments de la
mthode.
Une mthode statique ne peut pas tre redfinie. Elle
est automatiquement finale.
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;
}
}
class EssaiSurcharge {
public static void main(String[] argv) {
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));
}
}

Remarque: si on ajoute linstruction:


System.out.println(surcharge.operation(4, 5)); il y aura erreur de
Compilation car ambigut de rfrence par contre sil y avait pas de
Surcharge, cette instruction ne gnrera pas derreur
Classe et hritage
1. Dfinition de lhritage
Lhritage est lun des aspects les plus utiles de la programmation
oriente objet. Il permet une classe de transmettre ses attributs
et ses mthodes des sous classes. Ainsi, si une classe B hrite
dune classe A, alors la classe B contient implicitement lensemble
des attributs non privs de A et peut invoquer toutes les mthodes
non prives de la classe A
2. Dclaration de lhritage
En java, pour dclarer lhritage, on utilise le mot cl extends
Syntaxe:
Class B extends A
B hrite de A
B est drive (enfant) de A
B une sous classe de A
A est la super classe de B
3. Proprits de lhritage
Une classe drive peut accder uniquement au donne publique et
protge de la super classe..
Tout objet de la classe drive est aussi un objet de la super classe
Si une classe nhrite daucune autre classe, elle hrite par dfaut de la
super classe Object dfinie dans le package java.lang
Si la dclaration dune classe est prcde de final, alors cette classe
ne peut pas tre une classe drive.
Une classe ne peut hriter que dune seule autre classe (hritage
simple)
4. Rfrence la super classe
Pour faire rfrence la classe parente (super classe), il suffit dutiliser
le mot cl super. Ce mot permet dinvoquer un attribut ou une
mthode de la super classe.
On utilise super(arguments) pour invoquer le constructeur de la
super classe ayant les arguments correspondants.
5. Exemples
Soit la hirarchie suivante:

Animal

Chien Chat Canard

BergerAllemand Labrador Caniche

Les classes BergerAllemand, Labrador et Caniche sont driv de la


classe Chien qui est elle drive de la classe Animal
La classe Animal est elle-mme drive de la classe Object, ou dune
autre classe descendant de la classe Object.
Il sagit de la relation est un
class Animal {
boolean vivant;
int age;
Animal (int a) /* Constructeur */ {
age = a;
vivant = true;
System.out.println( Un animal de + a+ an(s) vient dtre cr);
}
void vieillit() {
++age;
System.out.println(Cest lanniversaire de cet animal);
System.out.println( Il a maintenant + age+ an(s).);
}
void meurt() {
vivant = false;
System.out.println(Cet animal est mort);
}
void parler()
{
}
}
Au titre de lhritage, les classes Canard et Chien disposent de tous
les membres de la classe Animal, et donc en particulier, de ses
variables dinstances et de ses mthodes
class Canard extends Animal {
Canard (int a) {
super (a);
}
void parler() // redfinition de la mthode parler()
{ System.out.println( Le canard crie Cui-cui!); }
}
class Chien extends Animal {
Chien (int a) // Constructeur
{ super(a);
}
void parler() // redfinition de la mthode parler()
{ System.out.println( Le chien crie Hab Hab!);
}
}
La classe Caniche hrite de la classe chien donc dispose de tous les
membres de la classe Chien et par transitivit dispose aussi de tous
les membres de la classe Animal
class Caniche extends Chien {
Caniche (int a) // Constructeur
{ super(a); } }
Class Animaux {
public static void main (String[] args) {
System.out.println(Utilisation dun objet Canard);
Canard titi= new Canard(3);
titi.vieillit();
titi. parler();
System.out.println(Utilisation dun objet Chien);
Chien bobi= new Chien(2);
bobi.vieillit();
bobi. parler();
System.out.println(Utilisation dun objet Caniche);
Caniche teddy= new Caniche(1);
teddy.vieillit();
teddy. parler() ;
} }
A lexcution, on aura:
Utilisation dun objet Canard
Un animal de 3 an(s) vient dtre cr
Cest lanniversaire de cet animal
Il a maintenant 4 an(s).
Le canard crie Cui-cui!
Utilisation dun objet Chien
Un animal de 2 an(s) vient dtre cr
Exemple 2
La classe Logement possde les caractriqtiques :
public class Logement {
final public double surface ; public double prix ;
public String proprietaire ; private boolean vendu ;
Logement (double surface , double prix ) {
this . surface = surface ;
this . prix = prix ;} }
public class Appartement extends Logement {
final public int etage ;
private boolean cave ;
public Appartement (double surface , double prix , int etage , boolean
cave ) {
super (surfac e, prix) ;/*appel du constructeur Logement
(double ,double) de la classe Logement */ {
this . etage = etage ;
this . cave = cave ;} }
Les attributs de la classe Appartement sont : surface, prix,
proprietaire, vendu, etage et cave.

L'appel d'un constructeur de la classe mre doit tre la premire


instruction du constructeur de la classe fille.

Une classe hritant d'une classe A ne peut pas directement


accder aux attributs privs de la classe A. Donc, l'utilisation d'un
constructeur de la classe mre est le seul moyen de les initialiser.

Un constructeur d'une classe drive commence toujours :


1. soit par l'appel explicite d'un autre constructeur de la classe.
2. soit par l'appel explicite ou implicite d'un constructeur de la
classe mre.
6. Masquage des attributs et redfinition
(polymorphisme) des mthodes
On dit quun attribut dune classe masque un attribut dune super
classe sil a le mme nom quun attribut de la super classe.
On dit quune classe redfinit une mthode dune super classe si
elle dfinie une mthode ayant mme nom, mme suite de type
darguments et mme valeur de retour quune mthode de la super
classe.
Une sous-classe peut redfinir (redfinition) les mthodes ceux
dont elle hrite et fournir des implmentations spcifiques pour
celles-ci.

Ne pas confondre surcharge et redfinition.


Dans le cas de la surcharge la sous-classe ajoute des mthodes
tandis que la redfinition spcialise des mthodes existantes
7. Classe abstraite
Une classe abstraite est une classe dont limplmentation nest pas complte. Elle
doit tre dclare avec le modificateur abstract.
Elle sert dfinir une super classe impossible instancier. Donc elle va servir de
modle pour les classes enfants.
La classe abstraite va dfinir des mthodes en fournissant leur signature: le type
de retour, le nom et le type dargument

Cest une assurance pour la classe de base que les classes enfants respecteront
bien les spcifications dfinies (contrats de services).

Exemple: Prenons la classe Humain, partir de laquelle drivent la classe Homme


et la classe Femme. En toute logique, Homme et Femme sont instanciables (les
objets crs ont une existence en soi), mais la classe Humain sera dclare
abstraite car un objet Humain n'existe pas en tant que tel, puisqu'il manque
l'information sur le sexe. Ici, la classe Humain servira implmenter des mthodes
qui seront utilises la fois pour Homme et pour Femme.
Une classe abstraite est dite abstraite si et seulement si elle
dtient une ou plusieurs mthodes abstraites.

Il nest pas possible dinstancier une classe abstraite, il faut


ltendre pour pouvoir lutiliser.

Par exemple, un animal domestique.

On sait quil aura obligatoirement une mthode parler.


Tous les animaux domestiques parlent mais chacune a sa
manire.

Les oiseaux vont dire : Cik Cik Cik


Le chat va dire : Miaou Miaou
Le chien va dire : Hab Hab Hab
Si lon dfinie une classe abstraite AnimalDomestique, on
va y placer la mthode abstraite parler .
Ainsi chaque classe enfant va implmenter la mthode
parler sa manire.

Ainsi, la classe Chien va dire : Hab Hab Hab

Ainsi, la classe Chat va dire : Miaou Miaou


abstract class AnimalDomestique {
abstract void parler(); }
class Chien extends AnimalDomestique {
void parler() {
System.out.println(" Hab Hab Hab "); } //... }
class Chat extends AnimalDomestique {
void parler() {
System.out.println("Miaou Miaou"); } // ... }
public class Poly {
static AnimalDomestique tab[] = new AnimalDomestique[2];
public static void main(String args[]) {
tab[0] = new Chien(); /*On a instanci un objet Chien quon a mis
dans un objet de type AnimalDomestique*/
tab[1] = new Chat();
for( int i=0; i<2; i++)
tab[i].parler(); } }
8. Les interfaces
a. Dfinition dune interface
Une interface est un modle pour une classe
Une interface est une sorte de classe qui ne contient que des prototypes de mthodes
et des constantes ayant les modificateurs static et final.
Une interface est un peu comme une classe abstraite dans laquelle aucune mthode ne
serait implmente : les mthodes y sont seulement dclares. Cela permet de dfinir un
ensemble de services visibles depuis lextrieur (lAPI : Application Programming
Interface), sans se proccuper de la faon dont ces services seront rellement
implments.

b. Prsentation dune interface


Une interface se compose de deux parties:
Len-tte
Le corps

En-tte dune interface

[modificateur] interface <Nom> [extends <interface>]


[ ]: optionnel
<>: obligatoire
gras: mot cl
Remarque
Une interface peut avoir le modificateur public.
Une interface est toujours abstraite sans quil soit ncessaire de lindiquer.
Elle peut tre attribue un package. Si elle ne lest pas , elle fera partie du
package par dfaut.
Une interface peut driver de plusieurs autres interfaces (hritage multiple pour
les interfaces et non pas pour les classes).
Une interface est un contrat, savoir un ensemble de proprits et mthodes
que la classe DOIT implmenter.

interface I1
{ }
abstract interface I2 //abstract nest pas ncessaire
{ }
public interface I3 extends I1, I2 // hritage multiple
{ }
Classe abstraite ou interface ?
Classes abstraites et interfaces ont chacune une fonction bien
distincte : les classes abstraites servent factoriser du code, tandis
que les interfaces servent dfinir des contrats de service.

Et pourquoi ne pas utiliser des classes abstraites (dans lesquelles


aucune mthode ne serait implmente) en lieu et place des
interfaces? La rponse est simple : dans la plupart des langages actuels
(cest notamment le cas de Java, C#, PHP), il nest possible pour une
classe dhriter que dune seule classe parente (abstraite ou non),
mais dimplmenter plusieurs interfaces.

Une classe qui implmente une interface doit obligatoirement


implmenter chacune des mthodes dclares dans linterface,
moins quelle ne soit elle-mme dclare... abstraite!
Corps dune interface
Le corps dune interface contient une liste de constantes et de prototypes de
mthodes.
La syntaxe dune dclaration dune interface est la suivante:
Entte
{
dclarations des constantes et des prototypes des mthodes
}
Exemple:
interface Ecriture
{
static final int LIGNE_MAX = 50;
void ecrire();
}
c. Proprits dune interface
Pour driver une classe dune interface, on doit utiliser le mot cl implements
suivi de la liste des interfaces dont la classe drive, spares par des virgules.
Exemple: class A implements I1, I2
Une interface I peut tre implmente par une classe A signifie:
La classe A dclare implmenter linterface I
Toutes les mthodes figurant dans linterface I doivent tre dfinie par la classe A
Une classe qui implmente une interface devra dclarer publiques (avec
modificateur public) toute les mthodes dfinies de linterface .
Si une classe A implmente une interface I, les sous classes de A implmentent aussi
automatiquement I.

Utilisation dune interface


Une interface peut tre utilise comme une classe.
Si I est une interface, on pourra rfrencer par la variable I nimporte quel objet dune
classe implmentant linterface I et on pourra appliquer cet objet une mthode
dclare dans linterface (qui est ncessairement redfinie dans la classe de lobjet
rfrence par i)
d. Exemple dutilisation dune interface
interface AfficheTexte
{
void affiche();
}
class Appartement implements AfficheTexte {
public void affiche() {
System.out.println(Bel appartement!); }
}
class Maison implements AfficheTexte {
public void affiche() {
System.out.println(La maison nest pas mal non plus); }
}
public class UtiliseInterface {
public static void main(String[] args) {
Appartement appart = new Appartement();
Maison demeure = new Maison();
appart.affiche();
demeure.affiche(); } }
A lexecution, on aura: Bel appartement!
La maison nest pas mal non plus
7. Les packages du JDK
Un package dsigne une librairie de classes, o sont regroupes des
classes d'objets d'un mme "type".
Pour utiliser une classe d'un package, il faut :
Soit en donner le "chemin d'accs" complet
java.util.Date today = new java.util.Date();
Soit importer cette classe, ou la totalit du package :
import java.util.Date; // ou import java.util.* ;
.....
Date today = new Date();
Remarque : Importer tout le package ne nuit pas au temps de compilation
ou d'excution
Quelques packages de Java

java.lang Le package de base du langage import automatiquement


Regroupe: Object, String, System, Threads, Math, exceptions, ....
java.io Ecrire et lire dans les flots entres/sorties
Lecture et criture dans des fichiers ou toutes autres sources d'I/O
java.util Certaines classes d'utilitaires
Regroupe: Date, Dictionnary, Stack, Vector, Hashtable, ...
java.net Pour la gestion rseau (URL, sockets, datagrammes, ...)
Utilis pour faire du client/serveur, des applications de communications
java.applet Cration d'applets
Contient entre autre l'interface AudioClip
java.awt Abstract Window Toolkit (java.awt, java.awt.images,
java.awt.peer, ...)
java.sql Connection aux bases de donnes
Quelques astuces dEclipse
Excution de programmes en mode dbogage
Le mode dbogage permet de voir ce qui se passe quand le programme
s'excute. Par exemple, on peut consulter l'tat des variables et des champs
ou regarder dans quelles fonctions le programme passe et avec quelles valeurs
des paramtres. On peut aussi faire excuter le programme pas pas, ou
fonction par fonction.
Pour pouvoir prendre la main sur la programme, il faut d'abord dfinir des
breakpoints, c'est--dire les lignes de code o l'excution doit s'arrter pour
permettre d'interagir avec la machine virtuelle. Cela se fait simplement en
double-cliquant dans la marge. Cela fait apparatre un rond bleu .
Une fois les breakpoints dfinis, pour lancer un programme en mode
dbogage, on effectue un clic droit sur la classe contenant le main, puis on
choisit Debug As... puis Java Applications :
L'onglet debug contient les threads lancs, l'onglet console permet
d'interagir avec le programme.

Quatre icnes permettent de contrler l'excution pas pas.


L'icne permet de passer l'instruction suivante, permet d'entrer
dans la mthode qui va tre excute et permet de quitter la mthode
courante pour rejoindre la mthode appelante.
Pour continuer l'excution jusqu'au prochain breakpoint, il suffit de cliquer
sur . . Pour terminer le programme, cliquer sur le carr rouge .
Enfin, pour interrompre le programme en train d'tre excut, mais sans
breakpoint, cliquer sur le bouton pause
Pour quitter le mode dbogage, et retourner l'ancienne perspective, on
peut cliquer sur en haut droite de la fentre principale. Cette zone
contient un raccourci vers les perspectives utilises couramment.
Assistance l'criture de programmes

Lorsque vous crivez votre programme, Eclipse peut vous aider complter
ce que vous crivez, en utilisant le raccourci clavier Control+Espace. Ce qu'il
propose dpend d'o vous vous trouvez dans votre programme.

Eclipse propose galement des raccourcis qui ajoutent du code prdfini. Par
exemple, main ajoute une mthode main, sysout ajoute un System.out.println.

Navigation

Eclipse permet d'accder directement la dfinition d'un lment java


(classe, mthode, champ, variable...). Pour cela, il suffit d'appuyer sur control,
puis de pointer l'lment qui apparat alors en bleu soulign, et de cliquer dessus.
Ceci permet d'accder la dfinition, dans le fichier java correspondant si c'est
dans une classe que nous avons dfini, ou en utilisant les sources de JDK sinon.
Sous-menus source et refactor

Avec le sous-menu source du menu contextuel, Eclipse propose


d'ajouter un certain nombre de choses, et notamment des
constructeurs qui initialisent les champs, ou des getters et des setters.
Par exemple, pour crer une classe Point contenant deux int, x et y,
avec un constructeur et deux getters, il suffit de partir d'une classe
contenant juste les deux champs, puis de demander Eclipse de
gnrer le constructeur initialisant les champs (Generate
constructor using fields) :
Les getters sont ajouts avec Generate getters and setters, en
slectionnant seulement les getters en cliquant sur Select getters :

ct du sous-menu source, le sous-menu refactor permet de modifier du


code existant. Par exemple, Rename permet de changer le nom d'un lment
java (variable, mthode, classe) et de rpercuter le changement partout o cet
lment est utilis.
Exercices
Question 1 : Le programme suivant contient plusieurs erreurs de
compilation. Identifiez, dcrivez et corrigez chacune de ces erreurs.
Question2 : Rcrivez la boucle suivante avec l'instruction while.
Question 3 : crivez un petit programme qui va lire la console un
nombre entier et affichera si ce nombre est pair ou non. Vous pouvez
supposer que l'utilisateur entre un entier la console.
Question 4 : En vous aidant de l'API Java, crivez un programme qui lit
une chaine de caractre la console et qui affiche cette mme chaine
l'envers.
Ainsi, si l'utilisateur tape la chaine Bonjour tout le Monde!, votre
programme doit afficher ! ednoM el tout ruojnoB
Les Applets
Qu'est-ce qu'une applet ?

Une applet est une application crite en Java qui tourne travers le
web.
Une applet s'excute gnralement l'intrieur d'un Browser
(Netscape, Internet Explorer, Mosaic, ...).
Elle est appele dans le code HTML.
Elle peut tre teste dans un appletviewer.

Alors pour publier une applet sur Internet, il faut dabord crer une
page HTML .
Exemple Lapplet Bonjour
import java.applet.Applet;

import java.awt.Graphics;

Public class Bonjour extends Applet

public void paint (Graphics g) {

g. drawString(Bonjour tout le Monde!, 100, 50);

Cette applet ne possde pas de mthode main(). Elle dfinit la classe Bonjour
comme tant une sous classe de la classe Applet et redfinit sa mthode
paint().
Il faut crer un programme HTML et y ajouter le code de
lapplet:

Taper ce code dans un fichier texte spar appel


Bonjour.html

<applet code= Bonjour.class width= 300 height=100>

</applet>

Ensuite excuter les deux commandes:

javac Bonjour.java

appletViewer Bonjour.html
Le langage HTML
Le langage HTML (Hyper Text Markup Langage) sert dcrire des
pages utilises dans les navigateurs Web.
Il est purement statique et ne permet pas d'interactivit dans la page.
Il se prsente gnralement sous forme de fichier texte (filename.html).
Sa syntaxe est compose de markups qui indiquent le format
d'affichage.
A partir d'un fichier HTML on peut :
Lier un autre fichier
Afficher une image
Afficher une applet
etc
Ces diffrents lments peuvent se trouver en local sur le serveur
HTTP ou distants, on y accde par une URL.
Exemple de code HTML

<!-- sommaire -->


<HTML>
<HEAD>
<TITLE>Sommaire</TITLE>
</HEAD>
<BODYBGCOLOR=#00FFFF>
<H1> <B><BLINK> Sommaire </B></BLINK> </H1>
<DL>
<DT> <B> INTRODUCTION </B>
<DT> <B> RUBRIQUES </B>
<DD> <I> MS-DOS </I>
<DD> <I> WINDOWS </I>
<DD> <I> UNIX </I>
<DT> <B> CREATION DE SITE WEB </B>
<DD> <I> HTML </I>
<DD> <I> DREAMWEAVER </I>
<DD> <I> FRONTPAGE </I>
</DL>
<P>
<A HREF="introduction.html">Page suivante </A>
</BODY>
</HTML>
Le tag ou balise <APPLET>
<APPLET

[CODEBASE = applet -url] Spcifie la localisation (rpertoire) de l'applet


CODE=applet -filename Le nom du fichier contenant l'applet , utiliser CODEBASE si
rpertoire diffrent
WIDTH=pixel-width La largeur initiale de l'applet
HEIGHT=pixel-height La hauteur initiale de l'applet
[ALT=alternate-text] Le texte affich si le browser comprend APPLET mais ne supporte
pas Java.
[NAME=applet -name] Donne un nom l'applet pour ventuellement communiquer
[ALIGN=alignment] L'alignement dans la page : top, middle et bottom
[VSPACE = vert -pix-value] La marge verticale autour de l'applet
[HSPACE = hor-pix -value] La marge horizontale autour de l'applet
[<PARAM NAME = parameter VALUE = value> ] Les paramtres passs l'applet
[<PARAM NAME = parameter VALUE = value> ]
....
[alternate-html] Du HTML pour les browser ne supportant pas le tag APPLET

</APPLET>
La structure d'une Applet
Une nouvelle applet "hrite" toujours de la classe Applet dont elle
contient les mthodes, en particulier, l'applet "descend" du Panel et
hrite donc de ses fonctionnalits graphiques.
La dclaration dune applet est toujours de la forme :
public class MaClasse extends java.applet.Applet
Une applet ne contient pas de mthode main. Elle est gre de faon
plus vnementielle. Dans le cas de Bonjour, c'est la mthode paint
(appele chaque visualisation de l'applet) qui affichera la chane de
caractres.
Cration et excution dune applet

Pour crer et excuter une applet, il faut suivre ces tapes:


1. Ecrire le code source de la classe qui dfinit lapplet, y inclut la
mthode init() qui sera lance par le navigateur, et lenregistrer
sous le nom de la classe.java

2. Compilation et cration du fichier.class

3. Cration du fichier html faisant rfrences lapplet

4. Le test de lapplet

Fonctionnement dune applet


Une applet contient des mthodes qui sont appeles automatiquement
lorsque certains vnement se produisent .
Cycle de vie d'une applet
public void init() : cette mthode est utilise pour toutes les initialisations :
lecture des paramtres, ajout des composants d'interface, fonctionne un peu
comme un constructeur.
public void start () : elle est appele automatiquement aprs la mthode init(),
mais aussi chaque fois que l'utilisateur revient sur la page de l'applet.
public void stop() : elle est appele chaque fois que l'utilisateur quitte la page de
l'applet. On y implmente: l'arrt des animations, l'arrt des sons, l'arrt d'ventuels
calculs,...
void setSize(int width, int height): Change les dimensions de l'applet en fixant
une nouvelle longueur et une nouvelle largeur.
public void destroy() : les applets sont dtruites automatiquement lorsque
l'utilisateur quitte le browser, mais il faut y fermer toutes les ressources non
mmoires telles que : fichiers ouverts, sockets, ...
public void paint(Graphics g) : appele chaque fois quune partie de lApplet
est expose, cest dans cette mthode quon implmente les diffrents dessins.
Passer des paramtres une Applet

Le passage de paramtres une applet se fait au travers du fichier HTML.

On utilise le tag PARAM :

<PARAM NAME = parameter VALUE = value>

Exemple : <PARAM NAME = nomChien VALUE = Teddy >

Pour rcuprer le paramtre dans le code :

String variable = getParameter("parameter");

Exemple : String nomStag = getParameter("nomChien");

Remarque: Les paramtres sont rcuprs sous forme de String, il faut ensuite

ventuellement les convertir dans le type dsir.


Les interfaces graphiques
Il existe en java plusieurs paquetages ddis au graphisme, les plus utiliss
sont:
Le paquetage java.awt (Abstarct Windowing Toolkit) fournit au
programmeur toutes les classes ncessaires la gestion du graphisme.
Cette librairie de classes est destine fonctionner sur toute plate
forme (Windows, Macos,...).
Le paquetage javax.swing disponible depuis la version jdk1.2 offre
beaucoup plus de composants graphiques que le paquetage java.awt et
lapparence dans javax.swing est totalement diffrente. Javax.swing
permet de raliser de vritables interface homme-machine.
Principes de bases de Awt et Swing
Awt et Swing permettent de crer et grer une interface graphique en utilisant les
mmes principes:
Crer un cadre
Crer des composants
Utiliser une mise en page pour ces composants
Insrer les composants dans le cadre
Utiliser des mthodes en rponse aux actions de lutilisateur

A- Le paquetage java.awt
1. Les possibilits de java.awt
Avec java.awt, on peut par exemple:
Tracer diffrentes formes (rectangles, ovales, polygones, ...)
Dfinir des polices de caractres, des couleurs, ...
Crer des composants simples tels que boutons, cases cocher, libells, ...
Crer des composants plus complexes tels que boites de dialogues, menu
droulants, ...
Grer des vnements utilisateurs (clique sur un bouton, ...)
2. Les principales classes de java.awt
1. La classe Frame
La plupart des graphiques sont affichs dans des cadres (frames). Un cadre est une
fentre qui possde une barre de titre, une bordure, un curseur et une icne. Les
fentres cadres sont utilises pour afficher des lments graphiques.
Un composant (component) est un objet qui peut tre affich lcran et peut
interagir avec lutilisateur (par exemple le bouton de fermeture dans le coin
suprieur droit, la barre de dfilement...).

Exemple
import java.awt.Frame;
public class TestFrame {

public static void main(String[] args) {


System.out.println( Cration dun cadre de 250x100 pixels, avec pour titre Exemple 2.1 ");
Frame cadre = new Frame ("Exemple 2.1");
cadre.setSize(259,100); //250 pixels de largeur et 100 de hauteur
cadre.setVisible(true); // affiche le cadre lcran
System.out.println( Pour fermer le cadre Cliquez sue la carr rouge dans la fentre
console");
}}
A. La classe Graphics
La classe java.awt.Graphics comporte un nombre important de mthodes
permettant de tracer des formes gomtriques vides ou pleines.Voici un chantillons
des mthodes de Graphics:
drawLine(int x1, int y1, int x2, int y2): affiche segment de (x1,y1) (x2,y2).
Les segments tracs en java ont une largeur gales un point dcran. Pour tracer
un segment plus pais, on doit tracer plusieurs segments parallles.

Exemple
import java.awt.*;
public class TraceLigne extends Frame {
TraceLigne(String titre) { // Constructeur
super(titre); } /* appel au constructeur de la super classe Frame qui dessine une
fentre cache et appelle automatiquement la mthode paint*/
public void paint(Graphics g) {
g.setColor(Color.blue);
g.drawLine(50,65,150,100);
g.drawLine(50,66,150,101);} // dessin dune ligne paisse (2 pixels)
public static void main(String[] args) {
TraceLigne monDessin = new TraceLigne(Une ligne de 2 pixels dpaisseur);
monDessin.setSize(400,400);
monDessin.setVisible(true); //mthode de la classe java.awt.Component
}}
drawString(String texte, int x, int y): affiche la chaine de caractres
texte aux coordonnes (x,y) dans une applet. Elle est lquivalent de
System.out.println() qui ne peut pas tre employe dans une applet.

drawRect(int x, int y, int larg, int haut): affiche un rectangle vide partir
du point (x, y) de largeur larg et de hauteur haut.

(x,y)

Hauteur
larg: largeur

fillRect(int x, int y, int larg, int haut): affiche un rectangle plein partir
du point (x, y) de largeur larg et de hauteur haut.

La couleur de remplissage du rectangle plein est la couleur courante.


import java.awt.*;

public class TraceRect extends Frame {

int x=50, y=60, largeur=150, hauteur=100;


//x, y les coordonnes du coin suprieur gauche du rectangle
TraceRect(String titre){ // Constructeur
super(titre); }
public void paint(Graphics g){
g.setColor(Color.blue);
g.drawRect(x, y, largeur, hauteur);
g.fillRect(x, y+150, largeur, hauteur);
g.setColor(Color.red);
g.drawString("Bonjour tout le monde", x+15, y+50);
g.drawString("La couleur courante", x+18, y+200);
}
public static void main(String[] args) {
TraceRect monDessin= new TraceRect("Des rectangles");
/* Cration de lobjet mondessin. Lappel super(titre) va automatiquement
appeler la mthode paint() */
monDessin.setSize(400, 400);
monDessin.setVisible(true); // rend visible le dessin
}}
A lexcution, on aura:
drawOval(int x, int y, int largeur, int hauteur): affiche un ovale vide de
coin suprieur gauche de coordonnes (x,y), et de largeur et hauteur
dfinis
(x,y)

largeur Hauteur

Dans le cas dun cercle largeur = hauteur = diamtre


fillOval(int x, int y, int largeur, int hauteur): affiche un ovale plein.

drawPolygon(xPoint, 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 dentiers rservs aux abscisses, et yPoints est un
tableau dentiers rservs aux ordonns, et points est le nombre de
points en arguments.
On peut galement tracer des polygones laide dun objet de la classe
Polygon.
fillPolygon(xPoint, yPoints, points): trace un polygone plein ferm.
import java.awt.*;
public class TracePoly extends Frame {
int[ ] xPoints= {150,40,300}; // les abscisses des points
int[ ] yPoints= {40,240, 240}; // les ordonns des points
int points =3; // les nombre de points (3 c'est un triangle)
Color couleur;

TracePoly(String titre) // Constructeur


{
super(titre); }

public void paint(Graphics g) {


couleur= Color.red;
g.setColor(couleur);
g.fillPolygon(xPoints, yPoints, points);
g.drawOval(40, 300, 150, 70);
g.setColor(Color. magenta);
g.fillOval(200, 300, 150, 70); }
public static void main(String[] args) {
TracePoly monDessin= new TracePoly("Un triangle et des ovales");
monDessin.setSize(400,400);
monDessin.setVisible(true);
}}
A lexcution, on aura:
B. La classe java.awt.Color
La classe java.awt.Color permet la gestion des couleurs en java. Les couleurs
peuvent tre spcifies de plusieurs manires diffrentes car la classe Color offre
plusieurs constructeurs:
On peut utiliser des noms standards prdfinis avec la syntaxe:
Color.nom_de_la_couleur
Les noms des couleurs prdfinis sont les suivants: black, blue, cyan, darkGray,
gray, green, lightGray, magenta, orange, pink, red, white, yellow.
On peut aussi spcifier une couleur laide de trois nombres entiers compris
entre 0 et 255. Ces trois nombres reprsentent les 3 valeurs RGB (Red, Green,
Blue) de la couleur cd les 3 composants rouge, vert et bleu.

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 spcifier une couleur laide de trois nombres floats compris
entre 0.0 et 1.0. Ces trois nombres reprsentent les 3 valeurs RGB
Color rouge= new Color(1.0f,0.0f,0.0f);
Color blanc= new Color(1.0f,1.0f,1.0f);
Pour afficher un texte ou un graphique dans une couleur spcifique, on peut
utiliser la mthode setColor de la classe java.awt.Graphics.
setColor a pour argument la couleur dsire.
Pour dfinir la couleur darrire plan dune fentre, on utilise la mthode
setBackground(couleur).

Exemple:
Color bleu_vert= Color.cyan;
setBackground (bleu_vert);
C. La classe Font
Laffichage des caractres est dfinie par 3 lments:
Le nom de la police: Helvetica, courier, Dialog, Times Roman, ...
Le style de la police: gras, italique ou normal
La taille de la police en points
Pour afficher un texte dans une police dfinie, avec un style dfini et une taille
prcise, on doit crer un objet Font qui contient ces information. Le constructeur
de la classe Font est:
Font(String nom, int style, int taille)
Nom: nom de la police
Style: style de la police qui peut tre lune des constantes:
Font.PLAIN: texte normal
Font.BOLD: texte gras
Font.ITALIC: texte italique
On peut combiner plusieurs styles par exemple: Font.BOLD +
Font.ITALIC
Taille: prcise la taille de la police en pixels
La liste des polices est retourne par la mthode getFontList() de la
classe java.awt.Tooolkit.
Exemple:

Font fontTest= new Font("Helvitica", Font.BOLD, 18);


g.setFont(fontTest);
g.drawString("Bonjour", 100, 100);
Exemple: Affichage des polices disponibles

import java.awt.*;

public class ListePolice extends Frame {


ListePolice(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;
}
}
public static void main(String[] args) {
ListePolice maListe =new ListePolice ("Les polices");
maListe.setSize(400,400);
maListe.setVisible(true);
}}
2. Les composants de linterface graphique
En java, les lments de linterface utilisateur sont des composants. Cest--dire
des objets drivant de la classe java.awt.Component. Chaque type dobjet de
linterface graphique (bouton, texte, case cocher, ...) est une classe drive de la
classe Component.
La classe java.awt.Container, qui hrite de Component est capable de contenir
plusieurs objets de la classe Component. Par exemple un objet de la classe
Container peut contenir 2 boutons, 2 cases cocher, ...
java.awt.Component.
Boutton (bouton)
Canvas (surface de dessin)
Checkbox (case cocher)
Container
Panel (Conteneur simple)
Applet
Window (fentre sans cadre ni titre)
Dialog (fentre de dialogue)
Frame (fentre avec cadre et titre)
Label (tiquette)
Ce diagramme dfinie les relations dhritage des classes
Pour utiliser des composants tels que des zones de saisies et des boutons dans un
programme java, il faut crer un nouvel objet reprsentant le composant et
l'ajouter un de type conteneur laide de la mthode add() de la classe
java.awt.Component.

A. Les tiquettes
Une tiquette (label) est une chaine de caractres qui ne dpasse pas une ligne et
qui permet dafficher un texte qui nest pas interactif.
Une tiquette peut tre positionne avec les fonctions de mise en page. Son rle
consiste donner des informations sur les autres contrles, notamment les zones
de saisie.
Pour accder une tiquette, il faut dabord dclarer un objet de la classe
java.awt.Label
Label l= new Label( Je suis une tiquette );
Add(l); // Affichage de ltiquette sur la fentre.
Le texte afficher et l'alignement peuvent tre modifis dynamiquement lors de
l'excution par:
l.setText("nouveau texte");
l.setAlignment(Label.LEFT);
Exemple: Affichage dune tiquette dans une fentre graphique

import java.awt.*;

public class DemoLabel extends Frame


{
Label monEtiquette;
DemoLabel(String titre) {
super(titre);
monEtiquette = new Label("Une tiquette", Label.CENTER); // Crer
une tiquette en prcisant l'alignement du texte.
add(monEtiquette);
}
public static void main(String[] args)
{
DemoLabel monLabel = new DemoLabel("Affichage d'tiquette");
monLabel.setSize(400,400);
monLabel.setVisible(true);
}

}
B. Les boutons

Les boutons sont les contrles de tout cran dinterface, ils permettent de
dclencher des vnements que lon peut dtecter et traiter.

Java permet dutiliser les boutons dune manire simple et efficace. La


classe java.awt.Button dclare des constructeurs et des mthodes
appropries.

Pour utiliser un bouton, il faut dabord le crer en instanciant la classe


Button puis lajouter linterface laide de la mthode add().

Exemple dutilisation de bouton:


import java.awt.*;

public class DemoBouton extends Frame {


Button monBouton1;
Button monBouton2;

DemoBouton(String titre)
{
super(titre);
FlowLayout fl= new FlowLayout(); //gestionnaire de mise en forme ou en page
setLayout(fl); //pour affecter une nouvelle mise en page
monBouton1= new Button();
monBouton2= new Button();
monBouton1.setLabel("Bouton 1");
monBouton2.setLabel("Bouton 2");
add(monBouton1);
add(monBouton2);

}
public static void main(String[] args) {
DemoBouton monBouton = new DemoBouton("Insertion de boutons");
monBouton.setSize(400,400);
monBouton.setVisible(true);
}
Mise en forme d'une interface : La classe FlowLayout

Les gestionnaires d'interface s'assurent que les lments intgrs l'application


ne se superposent pas. Chaque lment est plac dans un conteneur, et ce
contenu peut lui-mme tre contenu dans un autre conteneur. Au final, vous
pouvez combiner les types de gestionnaires afin de matriser au mieux votre
interface.

FlowLayout est le plus simple des gestionnaires : il organise les lments au


fur et mesure qu'ils sont intgrs l'interface, de gauche droite, la manire
des mots d'une phrase. Les lments sont centrs dans la fentre. S'il n'y plus
d'espace en largeur pour ajouter un lment la ligne, l'lment est plac la
ligne suivante. Pareillement, si l'utilisateur change la taille de la fentre, les
lments se dplacent pour remplir au mieux l'espace qui leur est allou.
C. Les boites de dialogues
Les cases cocher
Un composant Checkbox est une case place cot dune ligne de texte et qui peut
tre coche par lutilisateur.
Les cases cocher sont trs utilises dans les programmes dinstallation, les fentres
de configuration ou dune manire gnrale dans les boites de dialogues.
Chaque case cocher (Checkbox) reprsente un tat boolen, vrai ou faux selon
quelle coche ou non.
Pour grer les cases cocher, on utilise la classe java.awt.Chechbox
Checkbox cb= new Checkbox(); //cre une nouvelle case cocher
Checkbox cb= new Checkbox(String); //cre une nouvelle case et affiche
le texte en argument cot de la case cocher.
Ltat dune case cocher
cb.setState(boolean); // true si activit, sinon false
boolean etat =cb.getState(); // true si activit, sinon false
cb.getLabet() retourne la chaine de caractres correspondant ltiquette de
la case cocher.
Pour savoir si une action a t dclenche par lutilisateur (pression dun bouton,
coche dune case....), il faut redfinir la mthode:
public boolean action(Event e, Object arg) de la classe java.awt.Component.
La mthode action est appele automatiquement traite les vnements survenus
pendant lexcution de lapplication ou de lapplet. Lobjet arg retourne le nom du
bouton actionn, ou de la case cocher.

Exemple: Lapplication suivante permet dafficher une case cocher de non Test.
Si lutilisateur active cette case le message Case active sera affich, sinon le
message: Case dsactive sera affich.
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);
}
public boolean action(Event e, Object arg){
if(test.getState()) {
etat=true;
repaint(); } //La mthode repaint() force l'excution de la mthode paint().
//Elle permet d'informer le programme d'un changement dans la fentre graphique
//par exemple, si on dplace un lment dans une fentre, on doit utiliser repaint()
//pour que l'image apparaisse son nouvel emplacement
else {
etat=false;
repaint(); }
return (true); }
public void paint(Graphics g){
g.setColor(Color.red);
g.setFont(new Font("Comic sans MS", Font.BOLD,20));
if(etat== true)
g.drawString("Case active", 50, 300);
else
g.drawString("Case dsactive", 50, 300); }
public static void main(String[] args) {
DemoCheckbox maCase= new DemoCheckbox ("Case cocher");
maCase.setSize(400,400);
maCase.setVisible(true); }}
Les Boutons radio
Une case cocher peut tre affiche individuellement ou dans un groupe. Les
boutons radio sont des cases cocher rassembles dans un groupe. A lintrieur
du groupe, on ne peut activer quune seule case la fois. La classe
java.awt.CheckboxGroup permet de crer des groupes de boutons radio.
CheckboxGroup br; // dclaration dun 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 ltiquette du nime bouton radio


-tatn est ltat du nime bouton: true ou false
-br est le nom du groupe radio
Exemple
Ecrire une application en java qui permet dafficher cinq boutons radio
correspondant au statut marital dune personne (clibataire, mari, divorc, veuf,
autre...)
import java.awt.*;
class DemoCheckboxGroup extends Frame{
CheckboxGroup statut;
Checkbox celibataire, marie, divorce, veuf, autre;
DemoCheckboxGroup(String titre){
super(titre);
FlowLayout fl= new FlowLayout(FlowLayout.LEFT, 40,0);
setLayout(fl);
statut =new CheckboxGroup ();
celibataire=new Checkbox("Clibataire", statut, true);
add(celibataire);
marie=new Checkbox("Mari", statut, false);
add(marie);
divorce=new Checkbox("Divorc(e)", false, statut);
add(divorce);
veuf=new Checkbox("Veuf(ve)", false, statut);
add(veuf);
autre=new Checkbox("Autre", false, statut);
add(autre); }
public static void main(String[] args) {
DemoCheckboxGroup monStatut= new DemoCheckboxGroup ("Satut Marital");
monStatut.setSize(400,400);
monStatut.setVisible(true);} }
La mthode getCurrent() de la classe CheckboxGroup retourne lobjet Checkbox
correspondant la rponse slectionne.
La mthode getLabel() de Checkbox permet de retourner le texte de la case.
D. Les listes droulantes

Les listes droulantes sont des composants trs apprcies dans les interfaces
utilisateur. Ils permettent de slectionner des lments dans une liste.

Les liste choix unique


Java permet de crer une liste droulante choix unique par lintermdiaire de la
classe java.awt.Choice

Lobjet Choice permet de lutilisateur de choisir une valeur unique parmi une
liste. La syntaxe est la suivante:
Choice maListe= new Choice();
maListe.addItem(Choix1);
maListe.addItem (Choix2);
...
maListe.addItem (Choixn);
Gestion des slections

maListe.select(indice); // slectionne un lment par son indice . Lindice est


//un entier correspondant lordre de llment dans
la liste. 0 est lindice du //premier lment.

maListe.select(lment); // slectionne un lment par son contenu

maListe.CountItems(); // retourne le nombre dlments de la liste

maListe.getItem(n); // retourne le contenu de llment n

maListe.getSelectedItem(); // retourne le contenu de llment slectionn

maListe.getSelectedIndex(); // retourne le contenu de lindice de llment


slectionn

Exemple:

Une application java qui cre une liste droulante de trois lments (ROUGE,
ROSE, BLEU). La couleur slectionne est applique larrire plan de la fentre.
import java.awt.*;
public class DemoChoice extends Frame {
String str; //str contiendra la couleur choisie
Choice choix=new Choice(); // Cration d'une liste de choix
DemoChoice(String titre){
super(titre);
choix.addItem("ROUGE"); //Cration du 1er lment de la liste
choix.addItem("ROSE"); //Cration du 2me lment de la liste
choix.addItem("BLEU"); //Cration du 3me lment de la liste
add(choix); // Affichage de la liste droulante }
public boolean action(Event e, Object arg){
//On redfinit la mthode action qui permet d'exploiter les vnements
str=(String)arg; // le contenu de l'objet arg contient le texte de l'lment
// slctionn dans la liste droulante
repaint(); // pour rafraichir la fentre
return(true); }
public void paint(Graphics g) {
if(str=="ROUGE")
setBackground(Color.red);
else
if(str=="ROSE")
setBackground(Color.pink);
else
if(str=="BLEU")
setBackground(Color.blue);
}
public static void main(String[] args) {
DemoChoice monChoix= new DemoChoice ("Couleur de l'arrire plan");
monChoix.setSize(400,400);
monChoix.setVisible(true);
}}
Les listes choix multiples
Une liste choix multiple permet dafficher une liste de choix dans un cadre. Elle
permet dafficher plusieurs lignes et la slection de plusieurs lments.
Une liste choix multiple sert en gnral grer les saisies de lutilisateur dans
une liste.
Pour grer une liste choix multiple, on doit faire appel la classe java.awt.List.
La classe List contient plusieurs constructeurs, le constructeur le plus intressant
est List(int i, boolean valeur). Le premier paramtre i dfinit le nombre de
lignes qui seront affiches, et la valeur indique si lon autorise la slection multiple
(true) ou non.
Une fois linstance cre, on ajoute les propositions avec addItem(String)
La classe List dispose dun grand nombre de fonctions pour grer et consulter les
informations mmorises.
List li= new List(nbLigne, multiSelect);
li.addItem(String s); // ajoute llment la fin de la liste
li.addItem(String s, int indice); // insre llment la position indice, le
premier lment de la liste a pour indice 0
li.deletItem(int indice); //supprime llment qui est la position indice
li.delItem(int indice1, int indice 2); //supprime les lments qui sont entre les
positions indice1 et indice 2
li.clear(); // efface compltement le contenu de la liste
li.countItems(); // retourne le nombre dlments de la liste
li.getItem(indice); // retourne une chaine de caractre qui le contenu de llment
dindice indice
li.select(); // slectionne llment dindice indice
li.setMultipleSelections(); // est un boolen qui retourne true si la slection
multiple est autorise, false sinon.
li.deselect(indice); // dslectionne llment dindice indice
li.getSelectedIndex(); // renvoie lindice de llment slectionn en cas de
slection simple. En absence de slection le rsultat est -1
li.getSelectedIndexes(); // renvoie un tableau de type int qui contient les indices
de tous les lments slectionns en cas de slection multiple.
li.getSelectedItem(); // sutilise dans le cas dune slection simple, renvoie une
chaine de caractres qui contient le texte de llment slectionn, ou null en
absence de slection
li.getSelectedItems(); // sutilise dans le cas dune slection multipe, renvoie un
tableau de strings qui contient les texte de tous les lments
slectionn,s ou null en absence de slection

li.isSelected(int indice); // retourne true si llment dindice indice est slectionn,


false sinon.

Exemple:

Il sagit dcrire un programme qui crit une liste de 10 ligne qui autorise la
slection multiple. Il installe deux boutons pour ajouter et supprimer des
lments.
import java.awt.*;
class DemoList extends Frame {
List li=new List(10,true);
Button b1= new Button("Ajouter");
Button b2= new Button("Supprimer");
Button b3= new Button(Fermer);
DemoList(String titre){
super(titre);
FlowLayout fl= new FlowLayout();
setLayout(fl);
add(b1);
add(b2); add(b3);
li.addItem("Element 1");
li.addItem("Element 2");
li.addItem("Element 3");
li.addItem("Element 4");
add(li);
}
public boolean action(Event e, Object arg){
if(e.target==b1) // si le bouton b1 est press ("Ajouter)
li.addItem("Autre lment ajout");
else if (e.target==b2) {
int indice[]=li.getSelectedIndexes();
for(int i=0;i<indice.length;i++)
li.delItem(indice[i]);
}
else if (e.target==b3)
System.exit(0) ;
return true;
}
public static void main(String[] args) {
DemoList maListe= new DemoList ("Liste d'lments");
maListe.setSize(400,400);
maListe.setVisible(true);
}}
E. Les zones de saisie
Pour recueillir les saisies de lutilisateur dans une applet, le package awt propose la
classe TextField. Par dfinition, le champ de texte se limite une seule ligne. Il est
gnralement associ un bouton qui sert confirmer la saisie et transmettre
au programme les caractres taps.

Les quatre constructeurs disponibles sont:

TextFiled(): dclare un objet TextField de la classe TextField

TextField(int): dclare un objet TextField et fixe le nombre maximum de


caractres saisir.

TextField(String): dclare un objet TextField et fixe un texte par dfaut.

TextField(String, int): dclare un objet TextField et fixe un texte par dfaut et


le nombre maximum de caractres saisir.

Lecture dun champ de texte

La mthode getText() applique un objet TextField retourne une chaine de


caractres qui est la chaine saisie.
Pour lire le nombre de caractres prdfinie, on applique la mthode
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
apparaitre directement sur lcran pendant quelle est tape. A la place, on
affiche un caractre symbolique ou caractre dcho. La mthode utilise
est setEchoChar(char).
TextField tF= new TextField(n);
Tf.setEchoChar(*);

Exemple: Une applet qui permet de saisir un nom et un mot de passe


import java.applet.*;
import java.awt.*;
public class DemoTextField extends Applet {
TextField nom;
TextField motPasse;
Button b=new Button("Entrer");
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);
add(b);
}
public boolean action(Event e, Object arg){
if(e.target==b) // si le bouton b est press ("Entrer")
b.setBackground(Color.pink);
//System.exit(0) ;

return true;
}
}
Zones de textes pour la saisie multiligne

La classe TextField est limite la saisie dune seule ligne. Pour permettre la saisie
de plusieurs lignes, il faut recourir la classe java.awt.TextArea.

Les quatre constructeurs disponibles sont:


TextArea(): dclare un objet de la classe TextArea
TextArea(int nbLignes, int nbColonnes): dclare un objet TextArea et
initialise le nombre de lignes et de colonnes.
TextArea(String): dclare un objet TextArea et initialise le contenu.
TextArea(String, int nbLignes, int nbColonnes): dclare un objet
TextArea et initialise le contenu, le nombre de lignes et le nombre de colonnes.
Lecture et modification du contenu dune zone de texte

La mthode getText() applique un objet TextArea retourne une chaine de


caractres qui est le contenu intgral de la zone de texte.

Pour lire une partie du texte slectionne, on applique la mthode


getSelectedText() un objet TextArea.

Pour dterminer le nombre de colonnes, on utilise la mthode getColumns()


un objet TextArea. (Pour le nombre de ligne on utilise getRows())
Pour insrer une chaine de caractres partir dune position donne, on utilise
la mthode insertText(Text,n). Cette mthode insre la chaine Text partir du
nme caractre.

Exemple dutilisation de TextArea

import java.applet.Applet;
import java.awt.*;
public class DemoTextArea extends Applet {
TextArea texte;
public void init(){
add(new Label("Tapez vos commentaire:"));
texte=new TextArea("Pas de commentaire",5,15);
add(texte);
}
}
3. Les gestionnaires de mise en page
Lorsquon place des composants dans une applet ou dans une fentre
graphique, leur emplacement lcran se fait de manire automatique et dune
faon variable

La disposition des diffrents composants dpend de:

La taille de la fentre;

La taille des autres composants ajouter

On peut changer la disposition des diffrents composants en utilisant un


gestionnaire de mise en page spcifi.

Il existe plusieurs gestionnaire de mise en page, chacun positionnent


diffremment les lments graphiques, selon un algorithme qui leur est propre.

Tous les gestionnaires de mise en page implmentent linterface


java.awt.LayoutManager. Pour slectionner un gestionnaire de mise en page, on
utilise la mthode setLayout(LayoutManager) de la classe Container.

Les gestionnaires de mise en page les plus utiliss sont:


A. FlowLayout
La classe FlowLayout (mise en page flot) place les composants ligne par ligne de
gauche droite.

Cest la disposition par dfaut, celle qui sera utilis si lon ne choisit pas un autre
gestionnaire. Le principe est trs simple: tous les lments sont mis cte cte, de
gauche droite. Lorsquil ny a plus assez de place pour ajouter un lment, on
passe la ligne suivante. Chaque ligne est centre par dfaut.

Dclaration dun objet de la classe FlowLayout


FlowLayout fl1= new FlowLayout();
FlowLayout fl2= new FlowLayout (int); /* lentier dfinit lorientation des
lments. On utilise cet effet les variables prdfinies: CENTER, LEFT,
RIGHT */
FlowLayout fl3= new FlowLayout(int, int, int); /* Le premier argument dfinit
lorientation, le deuxime argument dfinit lespacement horizontal et le
troisime dfinit lespacement vertical entre les composants */
Affectation dune nouvelle mise en page une fentre
Pour quune nouvelle mise en page soit effective, il faut linstaller avec la mthode
setLayout() de la classe Container.
Exemple de mise en page avec FlowLayout

import java.applet.*;
import java.awt.*;

public class DemoFlowLayout extends Applet {


Button monBouton1;
Button monBouton2;
public void init(){
FlowLayout fl=new FlowLayout(FlowLayout.CENTER,60,0);
setLayout(fl);
monBouton1= new Button("Bouton 1");
monBouton2= new Button("Bouton 2");
add(monBouton1);
add(monBouton2);
}
}

Lespacement horizontal entre les 2 boutons est de 60 pixels, et lespacement


vertical est de 0.
B. BorderLayout
Lorsquon utilise BorderLayout, on peut placer les lments dans 5 zones
diffrentes: North , South , East , West , Center (nord, sud, est,
ouest et centre).

Remarque: Contrairement ce qui se passe pour la mise en page flot, lespacement


na pas dinfluence sur la distance qui spare les composants du bord de lapplet.

Dclaration dun objet de la classe BorderLayout


BorderLayout bl1= new BorderLayout();
BorderLayout bl2= new BorderLayout (int, int); /* Le premier argument dfinit
lespacement horizontal et le deuxime dfinit lespacement vertical entre
les composants */

Il est possible d'utiliser deux mthodes add surcharges de la classe


Container : add(String, Component) o le premier paramtre prcise l'orientation
du composant ou add(Component, Objet) o le second paramtre prcise la
position sous forme de constante dfinie dans la classe BorderLayout.
import java.applet.*;
import java.awt.*;
public class DemoBorderLayout extends Applet {
public void init(){
BorderLayout bl=new BorderLayout(25,25);
setLayout(bl);
add("North",new Button("Bouton nord"));
add("South",new Button("Bouton sud"));
add(new Button("Bouton centre"), BorderLayout.CENTER);
//add("Center",new Button("Bouton centre"));
add("East",new Button("Bouton est"));
add("West",new Button("Bouton ouest"));
}
}
C. GridLayout
La classe GridLayout organise tous les composants dun conteneur en grille
(lignes et colonnes). Le mme espace est affect tous les composants. Lorsquon
instancie GridLayout, on doit spcifier le nombre de lignes et de colonnes. Les
lments sont ajouts dans la grille de gauche droite, de haut en bas.
Dclaration dun objet de la classe GridLayout
GridLayout gl= new GridLayout(int nb_lignes, int nb_colonnes);
/* on spcifie le nombre de lignes ou le nombre de colonnes souhait. Lune des
deux valeurs doit tre nulle sinon seul le nombre de ligne est pris en
compte. Par exemple GridLayout(5,4) est identique a GridLayout(5,0)*/

GridLayout gl= new GridLayout(int ligne, int colonne, int h, int v);
/* Les deux derniers arguments spcifient lespacement horizontal et vertical
des composants */
Exemple: Affichage de lapplet suivante qui est compose de 4 boutons et une
liste de 5 lments. Ces composants sont disposs en trois colonnes
import java.applet.*;
import java.awt.*;
public class DemoGridLayout extends Applet {
List l= new List(1,false);
public void init(){
l.addItem("Premier");
l.addItem("Deuxime");
l.addItem("Troisime");
l.addItem("Quatrime");
l.addItem("Cinquime");
setLayout(new GridLayout(0,3,20,20));
//Mise en page grille de 3 colonnes, l'espacement horizontal et vertical
//des composants est fix 20 pixels.
add(new Button("Bouton 1")); // 1re ligne et 1re colonne
add(new Button("Bouton 2")); // 1re ligne et 2me colonne
add(l);
add(new Button("Bouton 3"));
add(new Button("Bouton 4"));
}}
Exercice
Utiliser le gestionnaire GridLayout (2,3) pour raliser lapplication graphique
suivante:

Lapplication est compose de 2 boutons, une liste de 4 lments (Mohammedia,


Casablanca, Tanger, Fes), et 3 zones de saisies.
Un clic sur Fermer permet de fermer la fentre.
Llment slectionn de la liste doit safficher dans la 1re zone de saisie.
Un clic sur Puissance3 calcule la puissance 3 du chiffre crit dans la 2me zone de
saisie et le rsultat saffichera dans la 3me zone de saisie.
Ecran aprs un exemple dexcution:
import java.awt.*;
public class Demoevent extends Frame {
GridLayout gl;
TextField t0, t1, t2;
Button cube, fermer ;
Choice c ;
public Demoevent() { // Constructeur
fermer = new Button("Fermer");
cube = new Button("Puissance3");
t0 = new TextField(); t1 = new TextField(); t2 = new TextField();
c = new Choice();
gl= new GridLayout(2,3);
setLayout(gl);
add(c);
add(t0);
add(fermer);
add(cube);
add(t1);
add(t2);
// remplissage de la zone de liste
c.addItem("Mohammedia");
c.addItem("Casablanca");
c.addItem("Tanger");
c.addItem("Fes");
}
public boolean action(Event e, Object obj) {
if (e.target == Fermer) System.exit(0) ;
if (e.target == c)
t0.setText(c.getSelectedItem());
if (e.target == Cube) {
String chaine=t1.getText();
int chiffre = Integer.parseInt(chaine); // Pour convertir la chaine entre
en entier
chiffre= chiffre * chiffre * chiffre ;
String intchiffre = new Integer(chiffre).toString(); //retourne la valeur
//de la grille sous forme de chaine.
t2.setText(intchiffre);
t2.setBackground(Color.cyan);
}
return true;
}
static public void main(String[] args) {
Demoevent test= new Demoevent();
test.setTitle("Fentre avec gridLayout");
//test.setSize(350,150); //test.resize(500,400);
test.setVisible(true); //test.show();
test.pack(); // la mthode pack() ajuste la taille de la fentre de faon ce
//qu'elle puisse afficher tous les objets qu'elle contient. (de la
classe Frame).
import java.applet.*;
import java.awt.*;
public class DemoAction extends Applet {
GridLayout gl;
TextField t0, t1, t2;
Button Cube, Fermer ;
Choice c ;
public void init(){
Fermer = new Button("Fermer");
Cube = new Button("Puissance3");
t0 = new TextField(); t1 = new TextField(); t2 = new TextField();
c = new Choice();
gl= new GridLayout(2,3);
setLayout(gl);
add(c); add(t0); add(Fermer); add(Cube); add(t1); add(t2);
c.addItem("Mohammedia"); c.addItem("Casablanca"); c.addItem("Tanger");
c.addItem("Fes"); }
public boolean action(Event e, Object obj) {
if (e.target == Fermer) System.exit(0) ;
if (e.target == c) t0.setText(c.getSelectedItem());
if (e.target == Cube) {
int isource = Integer.parseInt(t1.getText());
isource = isource * isource * isource;
String ssource = new Integer(isource).toString();
t2.setText(ssource);
t2.setBackground(Color.cyan); }
return true;
} }
4. Les conteneurs
Pour mettre en service les diffrents composant dj vus (boutons, listes, case
cocher...), il faut toujours les incorporer dans un objet d'une classe drive de la
classe abstraite Container (Conteneur). Les conteneurs les plus utiliss sont:

Panel: Conteneur qui na pas de fentre propre sert surtout ordonner les
contrles. La classe java.applet.Applet est drive de la classe Panel.

Window: Cre une fentre principale sans cadre ni menu.

Frame: (drivant de Window), il sagit dune classe de fentre avec barre de


titre.

A. Le conteneur Panel
Cest un panneau qui sert essentiellement ranger les composants. La classe
Panel est trs simple, elle ne contient quun seul constructeur et une seule
mthode add()
Panel p= new Panel(); // dfinit un nouveau panneau .
add(p); //intgre le panneau p dans un autre conteneur (une applet par
exemple)
Un panneau peut lui-mme contenir dautres conteneur. Ainsi des panneaux
peuvent tre emboits.
Exemple: Utiliser dans une applet un panneau qui contient 3 boutons
import java.applet.*;
import java.awt.*;
public class DemoPanel extends Applet {
public void init() {
Panel p= new Panel();
Button b1= new Button("Premier");
Button b2= new Button("Deuxime");
Button b3= new Button("Troisime");
p.add(b1);
p.add(b2);
p.add(b3);
add(p);
}}
B. Le conteneur Frame

Une frame ou encadrement permet de crer une fentre lextrieur de


lapplet qui sexcute comme une application indpendante.

La classe Frame contient deux constructeurs:

Frame f= new Frame(); // Cration dune fentre dencadrement invisible

Frame f= new Frame(String) // Cration dune fentre dencadrement


invisible avec un nom de la fentre.

Exercice: Raliser une application graphique qui contient 4 boutons dans le 1er
panneau, 2 tiquettes dans le 2me panneau et 3 zones de texte en 3me panneau
comme ci-dessous:
import java.awt.*;
class Fpanel {
static public void main (String arg [ ]) {
Frame w = new Frame("Exemple de fenetre avec un Panel");
Panel p=new Panel();
p.setLayout(new FlowLayout ());
p.add(new Button(" Bouton 1"));
p.add(new Button("Bouton 2"));
p.add(new Button(" Bouton 3"));
p.add(new Button("Bouton 4"));
w.add("North",p);
Panel p2=new Panel();
p2.setLayout(new FlowLayout ());
p2.add(new Label("Etiq1"));
p2.add(new Label("Etiq2"));
w.add("Center",p2);
Panel p3=new Panel();
p3.setLayout(new FlowLayout ());
p3.add(new TextField("Zone1"));
p3.add(new TextField("Zone2"));
p3.add(new TextField("Zone3"));
w.add("South",p3);
w.show();
w.pack(); } }
5. Les vnements 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 appels
vnements. On dit que lon traite un vnement lorsquon prend en compte
celui-ci et que lon excute des actions en consquence. La mthode qui traite
lvnement est galement appele gestionnaire dvnement.

En java, tout vnement possde une source. C' est dire l'objet lui ayant
donn naissance. On clique sur une fentre, la source est la fentre. On clique sur
un bouton, la source est le bouton. On clique sur case cocher, l' objet est la case
cocher. On va dans le menu Fichier, on choisit un sous-menu tel que enregistrez,
la source est le sous-menu enregistrez ou le sous-menu enregistrez sous.

Pour traiter un vnement en java, on associe l' objet source, un autre objet,
instanci partir d'une classe qui implmente une interface particulire. La
particularit de cette interface est qu'elle est prdfinie. On ne l'invente pas. En
plus, cette interface possde un ensemble de mthodes dont l'une d'elle permet
justement de traiter l' vnement en question.
Exercice:
I. Raliser lapplication graphique ci-dessous pour la saisie du nom, prnom et les
notes dun tudiant, et le calcul de sa moyenne.

Le bouton Fermer permet de fermer la fentre.


Le bouton Moyenne calcule la moyenne de ltudiant et le rsultat saffiche dans
la zone de saisie suivante.
II. Raliser lapplication graphique ci-dessous pour la gestion des notes des
tudiants. Lapplication contient avec un menu pour ajouter un nouveau tudiant,
afficher un tudiant et fermer lapplication.
public class CEtudiant {
private String nom, prenom;
private int notes[], nbnotes;
static private final int MAX=20;
public CEtudiant() {
nom=""; prenom="";
notes=new int [MAX];
nbnotes=0;
}
public String getNom() { return nom; }
public String getPrenom() { return prenom; }
public int getnbnotes() { return nbnotes; }
public int getNote(int i) {
if (i<nbnotes)
return notes[i];
else return -1; }
public void setNom(String nm) { nom=nm; }
public void setPrenom(String pn) { prenom=pn; }
public void ajoutNote(int n) {
if (nbnotes <MAX) {
notes[nbnotes]=n;
nbnotes++;}
}}
public class CLesEtudiants {
private CEtudiant te[];
private int nbe;
private static final int MAX=50;
public CLesEtudiants() {
nbe=0;
te=new CEtudiant [MAX];
}
public void ajoutEtudiant(CEtudiant etu) {
if (nbe < MAX) {
te[nbe]=etu; nbe++; }
}
public void ajoutNoteEtudiant(int i, int n) {
if (i<nbe) {
te[i].ajoutNote(n);}
}
public CEtudiant getEtudiant(int i) {
if (i < nbe)
return te[i];
else return new CEtudiant();
}
public int getNbe() {
return nbe;}
}