Académique Documents
Professionnel Documents
Culture Documents
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
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
exécution :
> java Rien
In class Rien: void main(String argv[]) is not defined
>
9 10
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
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
17 18
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.
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
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;
25 26
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;
}
}
31 32
MOTS RÉSERVÉS CARACTÈRES D’ÉCHAPPEMENT JAVA
33 34
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
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
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
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
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
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
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
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
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
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
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
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
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
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);}
}
89 90
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
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
Exemple
A2 reconnaît le même langage que l’automate A1 précédent mais il est déterministe.
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
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
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
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
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
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
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