Vous êtes sur la page 1sur 36

Bases en JAVA .

Introduction
1.Introduction
FIIFO, 2ème année, Université Paris 11 2.Java
3.Java : Principe De Base
Christian Jacquemin et Claude Barras (Université Paris 11 et LIMSI−CNRS) 4.Versions
5.Outils du Jdk
{Christian.Jacquemin,Claude.Barras}@limsi.fr
6.Avantages de Java ?
7.Inconvénients de Java ?
http://www.limsi.fr/Individu/jacquemi/ 8.Mon Premier Programme (1)
9.Mon Premier Programme (2)
10.Mon Premier Programme (3)
11.Mon Second Programme (1)
12.Mon Second Programme (2)
13.Syntaxe de Java
Ce cours reprend en grande partie le matériel pédagogique mis au point 14.Documentation
avec Jérôme Nobécourt pour l’enseignement de Java en 2001. 15.Exemple

1 2

INTRODUCTION JAVA
Langages objets : 1969 (Alan Kay) Créé par Sun (fin 1995)
Smalltalk Programmation simple
Utilisation : récent utilisation pour Internet
C : C++ Sur la plupart des plate−formes
Pascal : Pascal Objet, Delphi (Borland) (Archi + OS)
Basic : VBA (Microsoft) Gratuit
Eiffel ... Portable

3 4
JAVA : PRINCIPE DE BASE VERSIONS
JDK : Java Development Kit
Java 1.0.2 : version de tous les browsers web.
212 classes, 8 paquetages
Java 1.1.5 : 1997
504 classes, 23 paquetages
amélioration interface utilisateur (AWT), gestion des erreurs, cohérence du langage
1520 classes, 59 paquetages
Swing, Drag and drop, amélioration audio
Java 1.3 : 2001
amélioration de la gestion mémoire, rapidité

5 6

OUTILS DU JDK AVANTAGES DE JAVA ?


java : JVM, interpréteur pour les programmes java Ecrire une fois, exécuter partout
javac : Compilateur Java Sécurité
appletviewer : JVM pour l’exécution des applets Réseau en natif
jar : Création et manipulation d ’archive java Programmation modulaire et dynamique
javadoc : Générateur de documentation Java au format HTML Internationalisation
javap : désassembleur de classes Java compilées
jdb : débogueur Java en ligne de commande

7 8
INCONVÉNIENTS DE JAVA ? MON PREMIER PROGRAMME (1)
Interprété : efficacité du code public class Rien
{
Nécessite une JVM pour fonctionner }
Gestion de la mémoire // Fin class Rien

Le fichier java DOIT se nommer : Rien.java


compilation :
> javac Rien.java
>

exécution :
> java Rien
In class Rien: void main(String argv[]) is not defined
>

9 10

MON PREMIER PROGRAMME (2) MON PREMIER PROGRAMME (3)


public class RienAFaire >javac −verbose RienAFaire.java
{ [parsing started RienAFaire.java]
public static void main (String[] arguments) [parsing completed 248ms]
{ [loading
} /home/jacquemi/usr/share/jdk1.3.1_01/jre/lib/rt.jar(java/lang/Object.class)
} ]
// Fin class RienAFaire [loading
/home/jacquemi/usr/share/jdk1.3.1_01/jre/lib/rt.jar(java/lang/String.class)
compilation : ]
> javac RienAFaire.java [checking RienAFaire]
> [wrote RienAFaire.class]
[total 988ms]
exécution : >java −verbose RienAFaire
> java RienAFaire [Loaded java.lang.Object from
> /home/jacquemi/usr/share/jdk1.3.1_01/jre/lib/rt.jar]
[Loaded java.io.Serializable from
/home/jacquemi/usr/share/jdk1.3.1_01/jre/lib/rt.jar]
[Loaded java.lang.Comparable from
/home/jacquemi/usr/share/jdk1.3.1_01/jre/lib/rt.jar]
... (Plus de 200 lignes pour la JVM)
[Loaded java.security.cert.Certificate from
/home/jacquemi/usr/share/jdk1.3.1_01/jre/lib/rt.jar]
[Loaded RienAFaire]
[Loaded java.lang.Shutdown$Lock from
/home/jacquemi/usr/share/jdk1.3.1_01/jre/lib/rt.jar]

11 12
MON SECOND PROGRAMME (1) MON SECOND PROGRAMME (2)
public class Bonjour public class Bonjour2
{ {
public static void main (String[] arguments) public static void main (String[] arguments)
{ {
System.out.println("bonjour"); System.out.println("bonjour");
} for (int i=0; i<arguments.length;i++)
} System.out.println(i + " : " + arguments[i]);
// Fin class Bonjour }
}
compilation : // Fin class Bonjour2
> javac Bonjour.java
>

exécution : compilation :
> java Bonjour > javac Bonjour2.java
bonjour >
>
exécution :
> java Bonjour2 un 2 3.14
bonjour
0 : un
1 : 2
2 : 3.14
>

13 14

SYNTAXE DE JAVA DOCUMENTATION


Reprend celle du C Format : Les commentaires dans le fichier .java doivent commencer par /**, finir par */ et
le ; marque la fin d’instruction chaque ligne doit commencer par une *.
Les identificateurs sont comme en C Il existe des étiquette de champs telles que le nom d’auteur qui sont utilisées pour générer une API
Les caractères sont codés en UNICODE complète.
Un bloc d’instructions est délimité par {} Exemple :
/**
* Une classe énumérant ses arguments.
* Par exemple:
* <pre>
* java Bonjour2 un 2
* bonjour
* 0 : un
* 1 : 2
* </pre>
*
* @author Marc Martin
* @version %I%, %G%
*/
public class Bonjour2

Génération : Pour générer la page Bonjour2.html, faire :


javadoc Bonjour2.java

15 16
EXEMPLE DE DOCUMENTATION 1/2 EXEMPLE DE DOCUMENTATION 2/2
Class Tree Deprecated Index Help Method Summary
PREV CLASS NEXT CLASS FRAMES NO FRAMES
static void
SUMMARY: INNER | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD
main(java.lang.String[] arguments)

Class Bonjour2
Methods inherited from class java.lang.Object
java.lang.Object
| clone, equals, finalize, getClass, hashCode, notify, notifyAll,
+−−Bonjour2 toString, wait, wait, wait

public class Bonjour2 Constructor Detail


extends java.lang.Object Bonjour2
Une classe énumérant ses arguments. Par exemple: public Bonjour2()
java Bonjour2 un 2
bonjour Method Detail
0 : un
1 : 2
main

public static void main(java.lang.String[]arguments)

Constructor Summary Class Tree Deprecated Index Help


PREV CLASS NEXT CLASS FRAMES NO FRAMES
Bonjour2() SUMMARY: INNER | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD

17 18

. Structures fondamentales TYPES ET VARIABLES


1.Types et Variables
2.Affectation Non objet : boolean, char, byte, short, int, long, float, double
3.Conversions constantes Classe java : mot clef class
4.Conversion des Types Primitifs Déclaration d’une variable:
5.Ecrire les Entiers et Les Réels NomType nomVariable (=valeur);
6.Types de Données Primitifs La portée de la variable est celle du bloc
7.Opérateurs arithmétiques int ii;
8.Opérateurs booléens {
9.Opérateurs et Ordre de Priorité int i=0;
10.Tests i=i+1;
}
11.Boucles ii=i+1;
12.Contrôles
13.Mots Réservés
14.Caractères d’échappement Java
15.Chaînes 1/2
16.Chaînes 2/2
17.Chaînes (entrée)
18.Chaînes (sortie)
19.Tableaux 1/2
20.Tableaux 2/2

19 20
AFFECTATION CONVERSIONS, CONSTANTES
Comme en C, opérateur = Conversions
Une variable ne peut pas être utilisée avant d’être initialisée
L’affectation de deux variables objets est une coréférence . La conversion numérique est faite automatiquement vers le type le plus riche dans une
o1 = o2; // o1 et o2 désigne le même objet opération artihmétique.

. La conversion peut être faite explicitement vers un type plus pauvre.


double d = 2.7;
int i;
i = (int)d; // i vaut 2

Hiérachie des types : byte < short < int < long < float < double
Constantes
Déclarées avec le mot−clé final.
final int HEURES_DANS_JOUR = 24;
int jours;
int heures;
jour = 7;
heures = jours * HEURES_DANS_JOUR;

21 22

CONVERSION DES TYPES PRIMITIFS ECRIRE LES ENTIERS ET LES RÉELS


255 = 0xff = 0377
1024 = 1024L = 0x300L
0.01 = .01 = 1e−2d = 1e−2f
double inf = 1/0;
double neginf = −1/0;
double neg0 = −1/inf;
double NaN = 0/0;

23 24
TYPES DE DONNÉES PRIMITIFS OPÉRATEURS ARITHMÉTIQUES 1/2
Opérateurs numériques : + − * / et += −= *= /=
Division entière : / %
Exposant : y = Math.pow( x, a );
Incrément et décrément : i++; x = y + −−j;

Méthodes de la classe java.lang.Math


public static final double E;
public static final double PI;
public static double abs(double);
public static float abs(float);
public static int abs(int);
public static long abs(long);
public static native double acos(double);
public static native double asin(double);
public static native double atan(double);
public static native double atan2(double, double);
public static native double ceil(double);
public static native double cos(double);
public static native double exp(double);
public static native double floor(double);
public static native double log(double);
public static double max(double, double);
public static float max(float, float);
public static int max(int, int);
public static long max(long, long);
public static double min(double, double);

25 26

OPÉRATEURS ARITHMÉTIQUES 2/2 OPÉRATEURS BOOLÉENS


public static float min(float, float); Opérateurs relationnels
public static int min(int, int);
public static long min(long, long);
public static native double pow(double, double); Égalité/inégalité de deux opérandes : == !=
public static synchronized double random();
public static native double rint(double); Opérateurs booléens
public static long round(double);
public static int round(float);
public static native double sin(double); Opérateurs logiques : && || !
public static native double sqrt(double); Opérateurs binaires : & | ^(xor) ~(not)
public static native double tan(double);
public static double toDegrees(double); Préséance :
public static double toRadians(double); [] () .(méthode)
! ~ ++ −−
* / %
+ −
<< >>
< >
= >= instanceof
== !=
& ^
|
&&
||
= += −= *= /= %= &= |= ^=

27 28
OPÉRATEURS ET ORDRE DE PRIORITÉ TESTS
Comme en C
if (condition) {...}
else {...};
switch nomVariable
{
case valeur1 : {...
break;
}
...
case valeurn : {...
break;
}
default : {...
break;
}
} ;

29 30

BOUCLES CONTRÔLE
Comme en C Interruption de boucle
for ( NomType compteur=valDebut; (condition); (expression))
{...}; Interruption non étiquetée : sortie de la boucle la plus haute.
while( i <= 100 ) {
i += 10;
while (condition) if( i >= 2 * n + 1 ) {
{...}; break;
}
}

do Interruption étiquetée : sortie d’une boucle imbriquée.


... boucle_a_interrompre:
while (condition); while( i <= 100 ) {
i += 10;
while( i < j ) {
i++;
if( i >= 2 * n + 1 ) {
break boucle_a_interrompre;
}
}
}

31 32
MOTS RÉSERVÉS CARACTÈRES D’ÉCHAPPEMENT JAVA

33 34

CHAÎNES 1/3 CHAÎNES 2/3


Affectation et concaténation Méthodes de la classe java.lang.String
String intro = "Ce programme peut écrire "; public char charAt(int);
String affiche; public int compareTo(java.lang.Object);
public int compareTo(java.lang.String);
affiche = intro + "une chaîne de " public int compareToIgnoreCase(java.lang.String);
+ (50 + 2) + "caractères."; public java.lang.String concat(java.lang.String);
System.out.println( affiche ); public static java.lang.String copyValueOf(char[]);
public static java.lang.String copyValueOf(char[], int, int);
Sous−chaînes public boolean endsWith(java.lang.String);
public boolean equals(java.lang.Object);
String mot_construit = "Sous−chaîne"; public boolean equalsIgnoreCase(java.lang.String);
String racine = mot_construit.substring( 5 , public byte getBytes()[];
mot_construit.length() − 5 ); public void getBytes(int, int, byte[], int);
char tiret = mot_construit.charAt( 4 ); public byte getBytes(java.lang.String)[] throws
java.io.UnsupportedEncodingException;
public void getChars(int, int, char[], int);
Égalité entre chaînes public int hashCode();
public int indexOf(int);
. Égalité de valeurs : méthode equals public int indexOf(int, int);
public int indexOf(java.lang.String);
. Identité (à ne pas utiliser) : == public int indexOf(java.lang.String, int);
if( racine.equals( "chaîne" ) ) { public native java.lang.String intern();
System.out.println( "Égalité de valeurs" ); public int lastIndexOf(int);
} public int lastIndexOf(int, int);
public int lastIndexOf(java.lang.String);
public int lastIndexOf(java.lang.String, int);
public int length();

35 36
CHAÎNES 3/3 CHAÎNES (ENTRÉE)
public boolean regionMatches(int, java.lang.String, int, int); Lecture d’une chaîne au clavier
public boolean regionMatches(boolean, int, java.lang.String, int, int);
public java.lang.String replace(char, char); InputStreamReader is = new InputStreamReader( System.in );
public boolean startsWith(java.lang.String); BufferedReader bf = new BufferedReader( is );
public boolean startsWith(java.lang.String, int);
public java.lang.String substring(int); String chaineAAnalyser = "";
public java.lang.String substring(int, int); System.out.print( "Entrer une chaîne : " );
public char toCharArray()[]; try{
public java.lang.String toLowerCase(); chaineAAnalyser = bf.readLine();
public java.lang.String toLowerCase(java.util.Locale); }
public java.lang.String toString(); catch( IOException e ) {
public java.lang.String toUpperCase(); System.out.println( e.getMessage() ) ;
public java.lang.String toUpperCase(java.util.Locale); }
public java.lang.String trim();
public static java.lang.String valueOf(char);
public static java.lang.String valueOf(double);
public static java.lang.String valueOf(float);
public static java.lang.String valueOf(int);
public static java.lang.String valueOf(long);
public static java.lang.String valueOf(java.lang.Object);
public static java.lang.String valueOf(boolean);
public static java.lang.String valueOf(char[]);
public static java.lang.String valueOf(char[], int, int);
}

37 38

CHAÎNES (AFFICHAGE) TABLEAUX 1/2


Sortie non formattée Principes et déclarations
Affichage sans limite sur le nombre de décimales Les tableaux sont des collections de taille fixe d’objets de même type.
double x = 1.0 / 3.0; double[] x = new double[10];
System.out.println( x );
Allocation et initialisation simultanées
Formattage des entiers
L’appel de new est alors inutile.
Création d’un format d’affichage numérique double[] y = { 0.0, 0.25, 0.5, 0.75, 1.0};
DecimalFormat df = new DecimalFormat( "0.###" );
System.out.println( df.Format( x ) );

Formats :
0 chiffre
# chiffre non visible si 0 de complément
. symbole décimal
, séparateur de groupements
séparateur du format nombres positifs et du
;
format nombres négatifs
− préfixe des nombres négatifs
% affichage d’un pourcentage

39 40
TABLEAUX 2/2 . Objets et classes
1.Notion d’encapsulation
Affectation de tableaux 2.Concepts Objets (1)
3.Concepts Objets (2)
Copie de valeur 4.Notions de POO
y[ 3 ] = 0.3; 5.Classe: définition
Copie de pointeur 6.Exemple Classe Point
double[] z = y; 7.Constructeurs
8.Exemple d’objet : unPoint
Tableaux multi−dimensionnels 9.Surcharge
10.Référence this
Il s’agit d’un tableau de tableaux pour lequel chaque rangée est accessible individuellement. 11.Quelques conseils
double[][] matrice_carree;
matrice_carree = new double[3][3];
matrice_carree[2] = y;

41 42

NOTION D’ENCAPSULATION CONCEPTS OBJETS (1)


Définition Classe
Un patron
Combinaison de données et de méthodes dans un emballage unique (un objet). La description de la boîte noire
L’implémentation n’est pas accessible aux utilisateurs. un type
L’altération ou l’accès à l’état d’un objet se fait essentiellement par ses méthodes. Instance
Un modèle réalisé avec le patron
Une boîte noire
un objet

43 44
CONCEPTS OBJETS (2) NOTION DE PROGRAMMATION ORIENTÉE OBJET
Méthode Responsabilités
Une fonctionnalité
Interne Chaque objet est responsable de l’accomplissement des tâches qui lui sont associées :
Externe Les objets clients envoient des messages aux objets serveurs.
Variable d’instance
Variable Eléments
Appartient à un objet
Programmation Objet = {objet} Les éléments de base sont des objets qui sont des instances d’une classe :
Objet = données + méthodes ° les propriétés génériques d’un objet sont au niveau de la classe,
° l’état d’un objet est décrit au niveau de l’objet,
° les classes sont organisées hiérarchiquement et bénéficient d’un mécanisme d’héritage
automatique.

45 46

MÉTHODOLOGIE DE DÉFINITION D’UNE CLASSE EXEMPLE CLASSE Point


Variables d’instance public class Point // une classe
{
int x; // variable d’instance
Définissent l’état d’une instance. int y; // variable d’instance
public class etudiant {
String nom; public int getX() // accès
int promo; {
} return x;
}
Méthodes
public void setX(int abscisse)
{
Constructeur : création d’une nouvelle instance. x=abscisse;
Méthodes d’altération : initialisent, modifient ou annullent la valeur des variables d’instance. }
Méthodes d’accès : lisent les valeurs des variables d’instance. public int getY()
{
return y;
}
public void setY(int ordonnee) // une méthode
{
y=ordonnee;
}
}

47 48
CONSTRUCTEURS EXEMPLE D’OBJET : unPoint
Une méthode permettant de préparer l’objet à utiliser import Point; // on a besoin de la classe Point
public class TestPoint
initialiser les variables d’instance {
Il y a toujours un constructeur par défaut (si la classe n’en possède pas au moins un autre)
NomClasse() public static void main(String[] arg)
{
Point unPoint; // une variable objet
Il peut y avoir plus d’un constructeur par classe unPoint=new Point(); // il faut initialiser la valeur: création
L’opérateur new permet de d’une instance
unPoint.setX(10);
créer l’objet en mémoire unPoint.setY(100);
lancer le constructeur System.out.println("point\n\t d’abscisse " + unPoint.getX()
+"\n"+"\t et d’ordonnée "+unPoint.getY());
// utilisation d’une méthode "public" de l’objet unPoint
}
}
// Fin class TestPoint

49 50

NOTION DE SURCHARGE (AUTO−)RÉFÉRENCE THIS


Définition Définition
Plusieurs méthodes de même nom mais de signatures différentes (liste d’arguments). Dans une méthode, le mot−clé this fait référence à l’objet sur lequel opère la méthode.
public void setEtudiant(String unNom, int unePromo) { System.out.println( this );
nom = unNom; promo = unePromo;
} On peut imprimer toute classe en JAVA. L’impression fait appel à la méthode toString (héritée
public void setEtudiant(String unNom) { de Object).
nom = unNom; promo = 0;
}
Dans un constructeur
Initialisations
Le mot−clé this en tête d’un constructeur désigne un autre constructeur de la même classe.
La surcharge permet une initialisation explicite des variables d’instance non garnies par un public void setEtudiant() {
this( "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" );
constructeur ou une méthode d’altération. }
Un constructeur par défaut est un constructeur sans argument.
public void setEtudiant() { À consommer avec modération !
nom = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
promo = 0;
}

Toute classe possède un constructeur par défaut qui initialise les variables à leurs valeurs par défaut
Si une classe déclare un constructeur, il n’y a plus de constructeur par défaut.

51 52
QUELQUES CONSEILS POUR LA CONCEPTION DE CLASSES . Héritage
1.Héritage
Quelques règles à suivre 2.Concept
3.Hiérarchie
Privatiser les données : principe d’encapsulation. 4.Exemple d’héritage
Initialiser les données : éviter de faire appel aux initialisations par défaut qui sont source 5.Exemple d’utilisation des constructeurs
d’erreur. 6.Blocage
Limiter les variables d’instances : les regrouper dans une sous−classe si c’est nécessaire. 7.Transtypage
Utiliser un format standard pour la définition des classes : (1) constructeurs, (2) éléments 8.Object
publics, (3) éléments accessibles au paquetage, (4) éléments privés. 9.Class
Subdiviser pour régner : les classes trop lourdes doivent être partagées. 10.Classes enveloppes 1/2
11.Classes enveloppes 2/2
Nommer explicitement : classes et variables doivent avoir des noms clairs (donc longs) et 12.Conseils
explicitant leur type (verbes pour méthodes et noms pour classes).

53 54

HÉRITAGE CONCEPT D’HÉRITAGE


class LaClasseFille extends LaClasseMere Concept de base
Dériver une nouvelle classe à partir d’une classe existante en récupérant ses propriétés.

Avantage
Réutilisation : réeemploi, enrichissement et spécialisation de champs et méthodes de classes
existantes.
Contrainte
class PointAvecUneCouleur extends Point
java n’autorise que l’héritage simple Héritage simple : une classe ne peut hériter que d’une seule classe.

55 56
HIÉRARCHIE EN HÉRITAGE EXEMPLE D’HÉRITAGE
L’héritage est une notion transitive import Point;
public class PointAvecUneCouleur extends Point
{
Hiérarchie d’héritage : l’ensemble des classes dérivées d’un parent commun. int couleur;
Chaîne d’héritage : le chemin menant d’une classe vers ses ancêtres.
public PointAvecUneCouleur(int x, int y, int couleur) // un
constructeur
{
super(); // appel au constructeur de la classe mère
setX(x);
setY(y);
setCouleur(couleur);
}
public PointAvecUneCouleur(int couleur) // un constructeur
{
super(); // appel au constructeur de la classe mère
setCouleur(couleur);
}
public void setCouleur(int couleur)
{
this.couleur=couleur; // désigne l’objet encours
}
}

57 58

EXEMPLE D’UTILISATION DES CONSTRUCTEURS BLOCAGE DE L’HÉRITAGE


PointAvecUneCouleur p1,p2,p3; Mot−clé final
x=10, y=100, couleur=1000 Le mot−clé final devant une classe indique qu’elle ne peut avoir de descendance.
p1=new PointAvecUneCouleur(10,100,1000); final class Point3D {
...
}
x=y=0 (valeur par défaut), couleur=5
p2=new PointAvecUneCouleur(5); Avantage
Efficacité : implémentation statique possible.
impossible
p3=new PointAvecUneCouleur(); Sécurité : pas de redéfinition possible des méthodes pour une descendance.

59 60
TRANSTYPAGE ET HÉRITAGE LA CLASSE Object
Définition et propriété Définition et propriété
Le transtypage consiste à convertir un objet d’une classe en objet d’une autre classe. Toutes les classes Java sont des descendants de la classe Object.
C’est le parent par défaut de toute classe.
Vers sur−classes
Quelques méthodes de la classe Object
Toujours possible :
on peut toujours transtyper vers une sur−classe, donc plus pauvre en informations. public final Class getClass();
Point3D unPoint3D = new Point3D( x, y, z ); Point unPoint;
Renvoie un objet de type Class qui permet de connaître le nom d’une classe.
unPoint = (Point) unPoint3D; // revient à une projection sur xOy public boolean equals(Object o);
La mention du transtypage est facultative, mais recommandée pour la lisibilité. Compare les pointeurs mémoire de deux objets.
Vers sous−classes protected Object clone();

Impossible sauf si appartenance : pour transtyper vers une sous−classe, utiliser instanceof. Allocation de mémoire pour une nouvelle instance d’un objet et recopie de son contenu.
if( unPoint instanceof Point3D) { public String toString();
unPoint3D = (Point3D) unPoint;
} Renvoie une chaîne décrivant la valeur de l’objet.
La mention du transtypage est obligatoire, dans ce cas.

61 62

LA CLASSE Class CLASSES ENVELOPPES 1/2


Définition et propriété Définition et propriété
C’est la classe qui identifie les types à l’exécution. Fournissent une contrepartie sous forme de classes aux types primitifs.
Permet la sélection des méthodes en fonction de la classe lors des appels. Les classes enveloppes sont final, donc non surchargeables.
Quelques méthodes de la classe Class Les correspondances
public String getName(); Type Classe
Renvoie le nom d’une classe. Nombres entiers int Integer
public static Class forName(String s); Nombres entiers longs long Long
La fonction réciproque de getName. Nombres décimaux float Float
public Object newInstance(); Nombres décimaux en double précision double Double
Crée une nouvelle instance de même type. Booléens boolean Boolean
public String toString(); Octets byte Byte
Renvoie une chaîne décrivant la valeur de l’objet. Caractères (Unicode) char Character
Type vide void Void

63 64
CLASSES ENVELOPPES 2/2 QUELQUES CONSEILS POUR L’HÉRITAGE
Quelques méthodes de la classe Integer Quelques règles à suivre
public int intValue(); Placer les informations communes dans la superclasse : principe d’économie et de non
redondance de l’information.
Renvoie la valeur entière de l’objet (type int).
N’utiliser l’héritage que lorsque c’est pertinent : c’est−à−dire lorsque toutes les
public static int parseInt(String s); informations de la surclasse sont bien utilisées par la sous−classe.
Renvoie la valeur entière de l’objet si l’objet spécifié représente la chaîne d’un nombre entier Utiliser le polymorphisme plutôt que des tests sur le type : éviter un code tel que
en base 10. if( x instanceof Classe1 ) {
x.methode1();
public static Integer valueOf(String s) }
if( x instanceof Classe1 ) {
Renvoie un objet Integer si la chaîne s représente un nombre entier en base 10. x.methode2);
}
Exemple
Integer unInteger = new Integer( 100 );
int d = unInteger.intValue();

65 66

. Droits accès PAQUETAGE (1)


1.Paquetage (1)
2.Paquetage (2) Pour regrouper des classes " proches "
3.Utilisation : Classes et Paquetages Prédéfinis :
4.Membres et Modificateurs java
5.Droit d’accès javax
6.Règles d’accès aux membres sun
7.Polymorphisme (1)
...
8.Polymorphisme (2)
9.Polymorphisme (3) Classes Fondamentales : java.lang
10.Polymorphisme (4) Classes des I/O : java.io
11.Polymorphisme (5) Sous−paquetages possibles
12.Classe Abstraite (1) java.util.zip
13.Classe Abstraite (2)
14.Interface (1)
15.Interface (2)
16.Exemples

67 68
PAQUETAGE (2) UTILISATION : CLASSES ET PAQUETAGES
Définition d’un paquetage Une classe appartient a UN paquetage
au début du fichier .java Par défaut : le répertoire courant
package NomPackage.NomSousPackage; Une classe a le droit d’accéder aux classes du même paquetage.
//fichier Toto.java Une classe a toujours 2 noms
package MesPackages.ExCours.Bidon; nom court : NomDeLaClasse
public class A{}; nom long : NomPackage.NomDeLaClasse
public class B{}; import permet de spécifier le chemin des classes utilisées par rapport aux paquetages
A et B sont dans MesPackages/ExCours/Bidon/ import java.io.File;
Compilation : import java.io.*;
javac MesPackages/ExCours/Bidon/Toto.java

Exécution :
java MesPackages.ExCours.Bidon.Toto

69 70

MEMBRES ET MODIFICATEURS DROIT D’ACCÈS


Les variables (attributs/champs) et les méthodes sont appelées les membres d’une classe. Il faut toujours préciser les droits d’accès aux:
Le modificateur se met avant le type du membre variables d’instance
Ne rien mettre : il faut une instance de la classe pour pouvoir l’utiliser. variables de classe
=> utilisation du new AVANT méthodes
static : classes
Variable : variable de classe partagée par toutes les instances de la classe. public : tout le monde utilise
Méthode : une instance n’est pas nécessaire pour l’utiliser protected : les membres d’une même famille (héritage, paquetage) ont le droit d’utilisation
final : private : c’est personnel. PAS TOUCHE !
classe : interdit la définition de sous−classes Ne rien mettre : les classes du même paquetage peuvent l’utiliser.
variable et méthode : interdit les redéfinitions L’accès à un paquetage dépend des protections du système
static final : combine les deux
variable : création d’une constante

71 72
RÈGLES D’ACCÈS AUX MEMBRES POLYMORPHISME (1)
La signature d’une méthode correspond au nombre et au type de ses paramètres plus le type
retourné par la méthode.
Des classes différentes peuvent avoir des méthodes différentes de même nom et de même
signature.
Le polymorphisme consiste pour un objet à retrouver quelle méthode il doit appeler.

73 74

POLYMORPHISME (2) POLYMORPHISME (3)


Algorithme de recherche pour une classe C: Si on définit dans une classe C sous−classe de A une méthode m et avec la même signature
Soit o un objet construit à partir de la classe C ( C o = new C(...); ). que la méthode m de la classe A alors cette méthode m de la classe A est masquée pour toutes
si C a été déclarée avec une méthode de même nom les instances de C.
et de même signature => On ne peut pas appeler la méthode m de A à partir d ’une instance de C.
alors appeler cette méthode
sinon si C est une sous classe de B Exemple :
alors appliquer l’algorithme de recherche pour la classe B C unC=new C();
sinon "Erreur, méthode non trouvée A unA=unC;
unA.m(); // c’est la méthode m() de C qui sera appelée.

75 76
POLYMORPHISME (4) POLYMORPHISME (5)
Les méthodes de classe (static) ne peuvent pas être masquées. On peut appeler dans la méthode m (que redéfinit la classe C) la méthode m de même
Exemple : signature immédiatement supérieure en la préfixant par le mot clef super.
C unC=new C(); Exemple :
A unA=unC; dans un constructeur : super();
unA.methodeDeClasse(); // c’est la méthode de classe A qui est appelée dans la méthode m redéfinie : super.m();
Remarque : il est très fortement conseillé de toujours appeler les méthodes de classe par le nom La notation super.super.m() n’est pas permise.
de la classe plutôt que par une instance de la classe.
Exemple : A.methodeDeClasse() et non pas unA.methodeDeClasse()

77 78

CLASSE ABSTRAITE (1) CLASSE ABSTRAITE (2)


Une classe est dite abstraite si elle n’est pas entièrement implémentée. Ses sous classes Les méthodes dites " static ", " private " et " final " ne peuvent pas être abstraites.
doivent terminer son implémentation. Static : méthode de classe, or une classe abstraite n’est pas directement utilisable
Si une classe a (au moins) une méthode " abstract " alors cette classe est abstraite. (partiellement implémentée).
Une classe abstraite ne peut pas être instanciée. Private : méthode interne à cette classe, non héritable, donc on ne peut pas la redéfinir.
=> on ne déclare donc généralement pas de constructeur Final : aucune surcharge de la méthode possible.
Si une sous classe d’une classe abstraite n’implémente pas toutes les méthodes Une classe déclarée final ne peut être abstraite.
" abstract " de sa classe mère, c’est aussi une classe abstraite. Une classe déclarée abstraite est abstraite même si aucune méthode abstraite n’y figure.
Une classe abstraite peut avoir des données. Une classe déclarée abstraite qui ne déclare aucune méthode ni aucune donnée sert de
classe de marquage. On peut ainsi déclarer des pointeurs compatibles avec toutes ses sous
classes.

79 80
INTERFACE (1) INTERFACE (2)
Une interface déclare les signatures de méthodes " public " sans en donner une Une classe peut utiliser 0 ou plusieurs interfaces.
implémentation. => public class A extends B implements NomI1, NomI2 ...
Une interface se déclare comme une classe mais avec le mot clef interface. Une classe qui déclare répondre aux services d’une interface (implements NomI) DOIT
=> (public) interface InterfaceExemple {...} donner une implémentation pour tous ces services.
Une interface n’a pas de variable. Une classe abstraite peut donner une implémentation pour 0 ou plusieurs méthodes d’une
Une interface correspond à une liste de services. interface. Les autres méthodes sont déclarées par défaut comme abstraites.
La signature d’une méthode est suivie d’aucun code.
=> public TypeRetour nomMethode(type arg) ;
Une interface peut spécialiser une autre interface en lui ajoutant des services. On peut
ainsi faire des hiérarchies d’interface.
=> interface I1 extends I0;

81 82

EXEMPLES . Entrées sorties


1.Exception (1)
// Fichier A.java 2.Exception (2)
interface I1 // Déclaration d’interface
{ 3.Exception (3)
public void m1(); // Service 4.Exception (4)
} 5.Exception (5)
interface I2 // Déclaration d’interface 6.Exception (6)
{ 7.Exception (7)
public void m2(); // Service 8.IO (1)
public int m1(String[] args); // Service
} 9.IO (2)
10.IO (3)
abstract class B // Une classe abstraite
{
int v=0;
public abstract void m();
}
class A extends B implements I1, I2
{
// Implémentation des services de I1 et I2 et de la méthode abstraite
de B.
public void m() {System.out.println(v);}
public void m1() {System.out.println("1");}
public void m2() {System.out.println("2");}
public int m1(String[] args) {return args.length;}
}

83 84
EXCEPTION (1) EXCEPTION (2)
Quelques axiomes de base en informatique : Un comportement anormal en cours d’exécution provoque une exception.
Un programme sans bug, ça n’existe pas. Une exception est un message. Il est retourné à la méthode qui a appelé le traitement erroné.
Un utilisateur qui ne fait aucune erreur, ça n’existe pas. Une exception est créée
Un matériel qui marche toujours comme il devrait, ça n’existe pas. soit par la JVM (erreur interne, erreur de conception)
Une erreur d’exécution peut arriver n’importe quand. Exemple : " plus de mémoire " soit par l’instruction throw.
=> Un logiciel doit pouvoir gérer " un minimum " ces quatre points. L’instruction try/catch permet de surveiller un bloc d’instructions.
En Java, le mécanisme de tolérance aux fautes est réalisé à travers les exceptions. try
{
blocASurveiller;
}
catch (NomClasseException nomVar)
{
traitement;
}
[finally {dansTousLesCas}]

85 86

EXCEPTION (3) EXCEPTION (4)


On peut traiter plusieurs exceptions dans un seul try/catch. Exception sur un accès incorrect à un tableau.
public class LectInt { >$ java LectInt
public static void main(String[] args) { Saisie d’un entier :
byte tab[]=new byte[10]; 32
try { Entier saisi : 32
System.out.println( "\nSaisie d’un entier : "); java.lang.ArrayIndexOutOfBoundsException
System.in.read( tab ); Fin du try/catch
String uneChaine=(new String(tab)).trim(); Fin d’exécution
int unEntier=Integer.parseInt(uneChaine);
System.out.println( "\nEntier saisi : " + unEntier); Exception sur une conversion incorrecte.
boolean unBooleen=tab[12]==tab[0]; >$ java LectInt
System.out.println( "\nBooléen saisi : " + unBooleen); Saisie d’un entier :
2er4
}
catch( NumberFormatException e ) { Ce n’est pas un entier!
System.err.println( "Ce n’est pas un entier!"); Fin du try/catch
} Fin d’exécution
catch( Exception e ) {
System.err.println( e );
}
finally {
System.err.println( "Fin du try/catch");
}
System.out.println( "Fin d’exécution" );
}
}

87 88
EXCEPTION (5) EXCEPTION (6)
Les exceptions sont des classes java dont la classe mère est Throwable Class MonException extends Exception
{
MonException(){}
MonException(String s){super(s);}
}

Utilisation : throw new MonException();


Une méthode qui peut déclencher des exceptions (throw) DOIT indiquer dans sa signature la
liste de ces exceptions.
nomMethode(arg) throws Exception1, Exception2
Si m est une méthode de A, B une sous−classe de A. La définition d’une méthode m dans B
ne pourra pas émettre des exceptions qui n’ont pas été initialement prévues dans la méthode m
Error : erreurs internes de la JVM => On n’y peut rien ! de A.
RuntimeException : erreurs de conception => pas de catch !
Les autres :
Il faut un catch.
On peut faire ses propres exceptions avec des sous−classes.

89 90

EXCEPTION (7) IO (1)


Quand faut−il gérer des exceptions ? En java, toutes les entrées/sorties sont gérées comme des flux : clavier, écran, fichiers, pipes…
Obligatoire si vous utilisez une méthode avec une signature contenant throws. Le paquetage java.io centralise toutes les classes et interfaces.
Exemple: la méthode read() Les erreurs d’entrées/sorties sont des exceptions sous IOException
Pour les I/O 4 classes abstraites:
Pour gérer vos propres erreurs InputStream : flux d’octets en entrée
Pour les messages d’erreurs. OutputStream: flux d’octets en sortie
Quand ne faut−il pas le faire ? Reader : flux de caractères en entrée
Quand l’erreur se produit très très rarement. Writer : flux de caractères en sortie
Quand un if est suffisant pour le faire. 1 classe pour les fichiers : File
Quand la méthode " au−dessus " sait le faire.
Quand vous ne savez pas quoi mettre dans le catch.

91 92
IO (2) IO (3)
Pour lire/écrire dans un fichier, il faut associer un flux (stream) à une instance de File. Pour lire/écrire dans un fichier en utilisant seulement son nom, il faut associer un flux d’octets
FileReader pour les entrées sur fichier
FileWriter pour les sorties FileInputStream pour les lectures
FileReader fluxFichierEnLecture= new FileReader(new File(path,nom)); FileOutputStream pour les sorties
FileInputStream fluxFichierEnLecture= new FileInputStream(path+nom);
Pour lire/écrire plus efficacement, on utilise des flux " bufferisés " associé à un flux:
BufferedReader pour les lectures Pour lire/écrire plus efficacement, on utilise les versions " bufferisées ":
BufferedWriter pour les écritures BufferedInputStream pour les lectures
BufferedReader tampomLecture=new BufferedReader(fluxFichierEnLecture) BufferedOutputStream pour les écritures
BufferedInputStream tampomLecture=new BufferedInputStream
PrintWriter permet d’écrire facilement des fichiers textes. (fluxFichierEnLecture)
PrintWriter fichierTexte=new PrintWriter(tamponEcriture);
fichierTexte.println(uneChaine); Pour lire/écrire des données de tout type :
DataInputStream pour les lectures
DataOutputStream pour les écritures
DataInputStream tampomLectureTypeX=new DataInputStream (temponLecture)
int i=tamponLectureTypeX.readInt();

93 94

. Langages MONOÏDE
1.Monoïde
2.Langage Monoïde des chaînes de caractères
3.Gramm HC
4.Arbre synt Une structure minimale dont la loi de composition, la concaténation, est associative et qui
5.Gramm rég possède un élément neutre, la chaîne vide.
6.Automates EF
7.Ex. d’AEF Vocabulaire et chaînes de symboles
8.Repr. tab. d’AEF Vocabulaire : l’ensemble des symboles élémentaires
9.AEF dét. V = {a, b, c, ...}.
10.Expr. rég.
11.Ex. d’expr. rég. Ensemble des chaînes finies :
12.Th. Kleene V+ = {a, b,..., aa, ab, ac,..., aaa, aab, aac,...}.
13.Ex. lien AEF/ER V* = {^, a, b,..., aa, ab, ac,..., aaa, aab, aac,...}.

95 96
LANGAGE ET GRAMMAIRE GRAMMAIRES HORS CONTEXTE
Langage défini sur un vocabulaire V Une grammaire hors contexte est décrite par des règles avec un non−terminal unique en
composant gauche et un composant droit composé d’une concaténation de non−terminaux et de
Tout sous−ensemble de V* défini sur un vocabulaire V est un langage L. chaînes du langage.
Exemple de grammaire de description des syntagmes nominaux en français :
Grammaire d’un langage
<SN> −> <SN> <SyntPrép>
Une grammaire est une description finie par règles d’un langage. <SN> −> <SN> et <SN>
Elle emploie des symboles : <SN> −> <Nom>
terminaux (le vocabulaire) et non terminaux (dont l’axiome, un symbole initial).
Elle est constituée de règles : <SyntPrép> −> <Prép> <SN>
t −> q où t et q sont des chaînes de symboles (t est non vide). <Prép> −> de
<Nom> −> maison | ville | France

97 98

ARBRES SYNTAXIQUES GRAMMAIRES RÉGULIÈRES


Deux arbres de dérivation de maison et jardin de ville de France obtenus à partir de la Définition
grammaire précédente (trouver le ou les autres arbres, s’il y en a) :
Une grammaire dont les règles sont de la forme :
A −> a B ou A −> b (avec A, B non terminaux et a, b terminaux).

Exemple d’une grammaire régulière des nombres


<S> −> + <E> <S> −> <E>
<S> −> − <E> <E> −> , <D>

<E> −> 0 <E> <D> −> 0 <D>


<E> −> 1 <E> <D> −> 1 <D>
2 <D>
<E> −> 2 <E>... <D> −>
...
<E> −> 0 <D> −> 0
<E> −> 1 <D> −> 1
<E> −> 2... <D> −> 2...

99 100
AUTOMATES À ÉTATS FINIS EXEMPLE D’AUTOMATE À ÉTATS FINIS
Définition Le langage reconnu par un automate est l’ensemble des chaînes dont les symboles font passer
de l’état initial de l’automate à un de ses états finaux par une succession de transitions.
Algorithme de de reconnaissance de chaînes.
Emploie des symboles : Automate de reconnaissance des nombres décimaux
un vocabulaire terminal et des états (dont l’état initial et des états finaux).
Le langage reconnu par A1 est l’ensemble des nombres entiers ou décimaux tels que 94324052 ou
Constitué de transitions :
(état, symbole) −> état 0223,552 .

101 102

REPRÉSENTATION TABULAIRE D’UN AUTOMATE AUTOMATE À ÉTATS FINIS DÉTERMINISTE


DÉTERMINISTE Définition d’un automate déterministe
Exemple d’automate déterministe Un automate est déterministe si et seulement si pour tout état et tout symbole il existe au plus un
état dans lequel l’automate peut passer.

Exemple
A2 reconnaît le même langage que l’automate A1 précédent mais il est déterministe.

Représentation tabulaire associée


État suivant
1 2 [3] [4]
1 a b
État 2 b a
courant [3] b
[4]

103 104
EXPRESSIONS RÉGULIÈRES EXEMPLES D’EXPRESSIONS RÉGULIÈRES − EXTENSIONS
Définition d’une expression régulière Exemples
Les expressions régulières sur un vocabulaire V sont définies par : a* b | b* a =
− le mot vide ^ et l’ensemble vide sont des ER, {b, ab, aab, aaab,..., a, ba, bba, bbba,...}.
− tout a de V est une ER, (a | b)* =
− si e et e’ sont des ER, e.e’, e|e’ et e* sont des ER. {^, a, b, aa, ab, ba, bb, aaa, aab,...}.

Signification a* | b* =
{^, a, aa, aaa,..., b, bb, bbb,...}.
a:
a b* (c | a) =
le singleton a.
{a c, aa, abc, aba, abbc, abba,...}.
e.e’ :
l’ensemble des concaténations des chaînes de e et de celles de e’. Extensions
e|e’ :
l’union des ensembles e et e’. a+ = a | a*
e* : a? = a | ^
l’ensemble des chaînes cn pour c appartenant à e.

105 106

THÉORÈME DE KLEENE EXEMPLE DE LIEN ENTRE EXPRESSIONS RÉGULIÈRES ET


Théorème
AUTOMATES À ÉTATS FINIS
Exemple d’automate à états finis associé à une expression régulière:
Pour tout automate il existe une expression régulière qui représente le langage reconnu.
Pour toute expression régulière il existe un automate à états finis qui reconnaît le langage ((A | N)+ | (A | N)* (N P) (A | N)*) N
représenté.

107 108
Graphisme 25.Swing: JScrollPane
1.Gestion évts 1/2 26.Swing: Layout (Flow)
2.Gestion évts 2/2 27.Swing: Layout (Border)
3.Gestion évts: délég 1/3 28.Swing: Layout (Grid)
4.Gestion évts: délég 2/3 29.Swing: Layout (Box)
5.Gestion évts: délég 3/3
6.Gestion évts: adapt.
7.Gestion évts: hérit.
8.Gestion évts: écout. 1/2
9.Gestion évts: écout. 2/2
10.Archi MVC 1/2
11.Archi MVC 2/2
12.MVC et Swing
13.Swing: contrôles 1/4
14.Swing: contrôles 2/4
15.Swing: contrôles 3/4
16.Swing: contrôles 4/4
17.Swing: JLabel
18.Swing: JButton
19.Swing: JTextField
20.Swing: JCheckBox
21.Swing: JPanel
22.Swing: hérit. JPanel
23.Swing: JRadioButton
24.Swing: JOptionPane
109

GESTION DES ÉVÉNEMENTS 1/2 GESTION DES ÉVÉNEMENTS 2/2


Gestions des événements système par l’interface graphique utilisateur (GUI) Programmation événementielle : Principes
L’interface graphique utilisateur (GUI) a un gestionnaire d’événements système (asynchrones). Boucle d’attente d’événements système asynchrones.
Le gestionnaire d’événements de la GUI envoie les événements correspondant aux applications Le gestionnaire d’événements appelle les méthodes appropriées appartenant aux objets
ssi elles se sont declarées comme voulant y répondre. ayant déclaré répondre à ces événements.
Par exemple, En programmation événementielle, les méthodes de réponses aux événements système sont
si une application déclare répondre aux clicks souris, le gestionnaire d’événements lui appelées routines de callback.
enverra les clicks qui sont dans son focus, Java est un langage offrant des facilités pour la programmation événementielle. Il a un gestionnaire
sinon les click souris seront sans effet sur l’application (même s’ils sont dans une fenêtre d’événements capable de sélectionner les routines de callback en fonction des événements
active). systèmes et des services offerts par instances des classes.
Chaque application a donc une zone de validité :
−> L’application ne peut recevoir et répondre qu’aux événements dans son focus (par
exemple une de ses fenêtres actives).

110 111
GESTION DES ÉVÉNEMENTS PAR DÉLÉGATION 1/3 GESTION DES ÉVÉNEMENTS PAR DÉLÉGATION 2/3
Modèle de délégation Modèle de délégation en Java : schéma général
Dans le modèle de programmation événementielle en Java on favorise la délégation :
On crée des liens entre
− des contrôles qui gèrent des événements et
− des méthodes personnelles (des écouteurs) qui répondent de façon appropriée aux contrôleurs
qui ont besoin de leurs services.
La délégation n’est pas la seule façon de faire de la programmation événementielle.
Elle permet cependant un partage des rôles clair entre producteurs d’événements (les contrôles) et
consommateurs d’événements (les écouteurs).

112 113

GESTION DES ÉVÉNEMENTS PAR DÉLÉGATION 3/3 GESTION DES ÉVÉNEMENTS : ADAPTATEURS
Modèle de délégation en Java : exemple d’écouteur Notion de classe adaptateurs (Adapter)
Callbacks correspondant à des événements fenêtre Les classes adaptateurs fournissent des méthodes de corps vide pour toutes les méthodes de
class MaFenetreAMoi extends JFrame { callback déclarées dans l’interface d’un écouteur. (Package java.awt.event.*)
class AdaptateurFenêtre extends WindowAdapter { Elles permettent donc de ne réimplémenter que les méthodes de callback souhaitées.
// méthode de callback invoquée à la fermeture de la fenêtre
public void windowClosing( WindowEvent e ) { Exemple d’adaptateur (WindowAdapter)
System.exit( 0 );
} public abstract class java.awt.event.WindowAdapter extends java.lang.Object
// méthode de callback invoquée à l’ouverture de la fenêtre implements java.awt.event.WindowListener {
public void windowOpened( WindowEvent e ) {} public java.awt.event.WindowAdapter();
// méthode de callback invoquée à l’iconification de la fenêtre public void windowActivated(java.awt.event.WindowEvent);
public void windowIconified( WindowEvent e ) {} public void windowClosed(java.awt.event.WindowEvent);
... public void windowClosing(java.awt.event.WindowEvent);
} public void windowDeactivated(java.awt.event.WindowEvent);
MaFenetreAMoi() { public void windowDeiconified(java.awt.event.WindowEvent);
// nouvelle fenêtre public void windowIconified(java.awt.event.WindowEvent);
super("Un JFrame"); public void windowOpened(java.awt.event.WindowEvent);
}
// écouteur des événemts issus du contrôleur fenêtre
addWindowListener( new AdaptateurFenêtre() );
}
}

En Java, toutes les interfaces donnant les signatures d’écouteurs ont un nom se terminant par
Listener.

114 115
GESTION DES ÉVÉNEMENTS : HÉRITAGE DES ÉVÉNEMENTS GESTION DES ÉVÉNEMENTS : ÉCOUTEURS 1/3
Chaînes d’héritage des événements Écouteurs pour la gestion des événements
Événements
Interface Méthodes Paramètres/accesseurs
générés par
ActionEvent Button
getActionCommand List
ActionListener actionPerformed
getModifiers MenuItem
TextField
AdjustmentEvent
adjustmentValueCh getAdjustable
AdjustmentListener ScrollBar
anged getAdjustmentType
getValue
ItemEvent Checkbox
getItem CheckboxMenuItem
ItemListener itemStateChanged
getItemSelectable Choice
getStateChange List

116 117

GESTION DES ÉVÉNEMENTS : ÉCOUTEURS 2/3 GESTION DES ÉVÉNEMENTS : ÉCOUTEURS 3/3
Événements Écouteurs pour la gestion des événements
Interface Méthodes Paramètres/accesseurs
générés par
Interface Méthodes Paramètres/accesseurs Événements générés par
TextListener textValueChanged TextEvent TextComponent
focusGained FocusEvent
componentMoved ComponentEvent FocusListener Component
focusLost isTemporary
componentHidden getComponent
ComponentListener Component keyPressed KeyEvent
componentResized
keyReleased getKeyChar
componentShown
keyTyped getKeyCode
componentAdded ContainerEvent KeyListener Component
getKeyModifiersText
ContainerListener componentRemoved getChild Container
getKeyText
getContainer
isActionKey

118 119
mousePressed MouseEvent ARCHITECTURE MODÈLE VUE CONTRÔLEUR 1/2
mouseReleased getClickCount
Partage des rôles
mouseEntered getX
Modèle : contenu (état d’un bouton, valeur d’un champ texte...). Conserve la valeur du
MouseListener mouseExited getY Component composant et ne possède pas d’interface utilisateur. Méthodes de modification et d’accès au
mouseClicked getPoint contenu.
translatePoint Vue : apparence (couleur, taille...). Méthodes de dessin du contenu.
Contrôleur : gestion des interactions (réactions aux événements tels que click souris, touche
isPopUpTrigger clavier pressée...).
MouseMotionLi mouseDragged MouseEvent Aussi appelé modèle d’écouteur d’événements.
Component
stener mouseMoved
windowClosing WindowEvent
windowOpened getWindow
windowIconified
WindowListener windowDeiconified Window
windowClosed
windowActivated
windowDeactivated

120 121

ARCHITECTURE MODÈLE VUE CONTRÔLEUR 2/2 MODÈLE VUE CONTRÔLEUR ET PACKAGE SWING (depuis
Vue d’ensemble des interactions entre les trois composantes du modèle
Java 1.2)
Package AWT (Abstract Window Toolkit) (java.awt.*)
Ensemble d’objets graphiques de base (pour l’Interface Graphique Utilisateur − GUI).
Offre tours les services pour la gestion d’objets graphiques.
Classes JFC (Java Foundation Classes)
Bilbiothèque qui complète et qui remplace partiellement AWT.
Nouvellles fonctionnalités : dessin 2D, look’n feel adaptable...
Package Swing (javax.swing.*)
Un package clé de JFC.
Remplace certains composants graphiques de AWT et en simplifie la gestion.
Modélisé selon les principes du modèle MVC.

122 123
PACKAGE SWING : CONTRÔLES 1/5 PACKAGE SWING : CONTRÔLES 2/5
Components et Containers en AWT et Swing Principaux contrôles en Swing
Components : les composants ‘‘graphiques’’, Catégorie Contrôle Nom de classe Swing
− Les instances de la classe Component peuvent interagir avec l’utilisateur.
Bouton JButton, JCheckBox, JRadioButton
− Par exemple : un bouton, une zone de texte....
Containers : les toiles de fond sur lesquelles déposer les Components. Boîte Combo (liste pop up) JComboBox
− Les Containers sont des objets capables de contenir tous types Liste JList
de composants ‘‘graphiques’’. Contrôles de base
Menu JMenu, JMenuBar, JMenuItem
Barre d’outils JToolbar
Champ de texte JTextField, JPasswordField, JTextArea
Étiquette JLabel
Affichages non
Barre d’avancement JProgressBar
éditables
Informations pop up JToolTip

124 125

PACKAGE SWING : CONTRÔLES 3/5 PACKAGE SWING : CONTRÔLES 4/5


Catégorie Contrôle Nom de classe Swing Hiérarchie des JComponents
Table JTable
Affichages Texte JTextPane, JTextArea, JEditorPane
éditables Choix de couleur JColorChooser
Choix de fichier JFileChooser
Conteneurs Panneau de scrolling JScrollPane, JScrollBar
dynamiques Panneau à onglets JTabbedPane
Cadre JFrame
Conteneurs de
Applet JApplet
haut niveau
Dialogue JDialog, JOptionPane
Panneau JPannel
Autres conteneurs
Cadre interne JInternaFrame

126 127
PACKAGE SWING : CONTRÔLES 5/5 CONTRÔLES SWING : JLabel
Hiérarchie des Containers Étiquette
ImageIcon icon = new ImageIcon( "rarrow.gif" );
JLabel component = new JLabel( "Voici une icone de flèche !" , icon ,
JLabel.CENTER );
getContentPane().add( component , "Center" );

128 129

CONTRÔLES SWING : JButton CONTRÔLES SWING : JTextField


Bouton Champ de saisie de texte
Noter le lien entre un écouteur et un composant graphique au moyen d’une instance de classe Il n’est pas systématiquement nécessaire de définir un écouteur attaché à un composant
anonyme. graphique.
JButton component = new JButton( "Valider" ); Il peut exister un écouteur qui prend en charge les principales fonctionnalités.
component.addActionListener( new ActionListener() { (C’est le cas ici, la gestion des touches clavier est faite pour la saisie et l’affichage dans la zone
public void actionPerformed( ActionEvent e ) {
System.out.println( "Bouton Pressé" ); graphique.)
} JLabel component = new JLabel( "Entrez votre texte :" );
} ); getContentPane().add( component , "Center" );
getContentPane().add( component , "Center" ); JTextField component2 = new JTextField( "Ceci est mon texte !" );
getContentPane().add( component2 , "Center" );

130 131
CONTRÔLES SWING : JCheckBox CONTRÔLES SWING : JPanel ET PRIMITIVES GRAPHIQUES
Case à cocher Panneau graphique et primitives graphiques
JCheckBox boutonRouge = new JCheckBox( "Rouge" ); ...
getContentPane().add( boutonRouge , "East" ); JPanel component = new JPanel( );
JCheckBox boutonVert = new JCheckBox( "Vert" ); getContentPane().add( component , "Center" );
getContentPane().add( boutonVert , "Center" ); }
JCheckBox boutonBleu = new JCheckBox( "Bleu" );
getContentPane().add( boutonBleu , "West" ); // affichage graphique
public void paint(Graphics g) {
boutonRouge.setSelected(true); g.drawRect( 30 , 30 , 100 , 40 );
boutonBleu.setSelected(true); g.fillRect( 130 , 70 , 150 , 20 );
}
if( boutonRouge.isSelected() ) {
System.out.println( "Rouge Sélectionné" );
}
else {
System.out.println( "Rouge Désélectionné" );
}

132 133

CONTRÔLES SWING : HÉRITAGE JPanel ET JFrame CONTRÔLES SWING : ButtonGroup de JRadioButton


Chaîne d’héritage de JFrame Groupe de boutons radio en accès exclusif
Un seul des boutons peut être coché à la fois
// groupe de boutons en acces exclusif
ButtonGroup parametrageTriGroup = new ButtonGroup();
JRadioButton choixTriURL = new JRadioButton( "Tri par URL" );
choixTriURL.setSelected( true );
JRadioButton choixTriRang = new JRadioButton( "Tri par rang" );
parametrageTriGroup.add( choixTriURL );
parametrageTriGroup.add( choixTriRang );
// affichage des boutons
getContentPane().add( choixTriURL , "Center" );
getContentPane().add( choixTriRang , "Center" );

134 135
CONTRÔLES SWING : JOptionPane CONTRÔLES SWING : JScrollPane
Message d’erreur, avertissement, demande de choix... Encapsulation d’un composant graphique dans des barres de défilement
JLabel component = new JLabel( "Erreur de saisie !" ); Noter l’imbrication des composants graphiques.
JOptionPane.showMessageDialog(
null , // frame parent Un JScrollPane peut aussi bien contenir un JPanel avec une image.
component , // objet graphique a afficher // un premier composant graphique d’affichage d’une zone texte
"Message d’erreur" , // barre de titre JTextArea consoleTexte = new JTextArea( 8 , 20);
JOptionPane.ERROR_MESSAGE ); consoleTexte.setLineWrap( true );
// un deuxième composant graphique encapsulant le premier
// chargé de gérer le défilement de la zone de texte
JScrollPane scrollConsoleTexte = new JScrollPane( consoleTexte );
scrollConsoleTexte.setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder() ,
"Console" ) );
getContentPane().add( scrollConsoleTexte , "Center" );
for( int ind = 0 ; ind < 10 ; ind++ ) {
consoleTexte.append( "Ligne numéro : " + (ind + 1) + "\n" );
}

136 137

CONTRÔLES SWING : Layout (FlowLayout) CONTRÔLES SWING : Layout (BorderLayout)


Mise en page des composants graphiques Mise en page selon les 4 points cardinaux et le centre : BorderLayout
Les Layout sont des Container qui gèrent la mise en place des Components. getContentPane().setLayout( new BorderLayout() );

Mise en page en ligne : FlowLayout getContentPane().add( new JCheckBox( "Boîte 1" ) , "North" );
getContentPane().add( new JCheckBox( "Boîte numéro 2" ) , "Center" );
getContentPane().add( new JCheckBox( "Boîte No 3" ) , "South" );
getContentPane().setLayout( new FlowLayout() ); getContentPane().add( new JCheckBox( "4" ) , "East" );
getContentPane().add( new JCheckBox( "Boîte portant le numéro 5" ) ,
getContentPane().add( new JCheckBox( "Boîte 1" ) ); "West" );
getContentPane().add( new JCheckBox( "Boîte numéro 2" ) );
getContentPane().add( new JCheckBox( "Boîte No 3" ) );
getContentPane().add( new JCheckBox( "4" ) );
getContentPane().add( new JCheckBox( "Boîte portant le numéro 5" ) );
getContentPane().add( new JCheckBox( "B. 6" ) );

138 139
CONTRÔLES SWING : Layout (GridLayout) CONTRÔLES SWING : Layout (BoxLayout)
Mise en page selon une table : GridLayout Mise en page selon une direction (horizontale ou verticale) : BoxLayout
getContentPane().setLayout( new GridLayout( 2 , // lignes getContentPane().setLayout(
3 , // colonnes new BoxLayout( getContentPane() , BoxLayout.Y_AXIS ) );
20 , // espacement hor.
10 // espacement vert. getContentPane().add( new JCheckBox( "Boîte 1" ) );
) ); getContentPane().add( new JCheckBox( "Boîte numéro 2" ) );
getContentPane().add( new JCheckBox( "Boîte No 3" ) );
getContentPane().add( new JCheckBox( "Boîte 1" ) ); getContentPane().add( new JCheckBox( "4" ) );
getContentPane().add( new JCheckBox( "Boîte numéro 2" ) ); getContentPane().add( new JCheckBox( "Boîte portant le numéro 5" ) );
getContentPane().add( new JCheckBox( "Boîte No 3" ) );
getContentPane().add( new JCheckBox( "4" ) );
getContentPane().add( new JCheckBox( "Boîte portant le numéro 5" ) );

140 141