Upload
mima-zahir
View
278
Download
1
Tags:
Embed Size (px)
Citation preview
Caracteacuteristiques de Java
bull Un langage Orienteacute Objet bull pas de variables ni de fonctions globales types primitifs et objet
bull Simple bull syntaxe CC++ (types primitifs instructions de test et boucles hellip)
bull sucircr bull pas de pointeurs veacuterification du code agrave l rsquoexeacutecution et des accegraves reacuteseau
etou fichiers
bull Robuste bull ramasse miettes fortement typeacute gestion des exceptions
bull Indeacutependant d rsquoune architecture bull Portabiliteacute assureacutee par la preacutesence d rsquoun interpreacuteteur de bytecode sur
chaque machine
bull Environnement riche ndash classes standard complegravetes
ndash classes pour les communications reacuteseau
ndash fonctions graphiques eacutevolueacutees
ndash hellip
1er programme afficher bonjour
import javaio
public class Bonjour
public static void main(String args[])
Systemoutprintln(Bonjour le monde)
2egraveme programme Afficher bonjour en tenant compte dun eacuteventuel
paramegravetre passeacute sur la ligne de commande
public class Bonjour2
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Bonjour le monde)
else Systemoutprintln(Bonjour +args[0]+ )
Compilation (JDK)
Cprog_javagt javac Bonjourjava
Creacuteation de Bonjourclass
Exeacutecution
Cprog_javagt java Bonjour Attention le reacutepertoire ougrave se trouve javac doit se trouver dans le path
et prog_java dans la variable drsquoenvironnement CLASSPATH
Une applet Java Une applet est un petit programme qui fonctionne agrave linteacuterieur dun
document HTML Nous aurons agrave creacuteer deux fichiers le fichier source java
agrave compiler et le fichier html dans lequel se fera lexeacutecution
import javaawt
import javaapplet
public class AppletBonjour extends Applet
public void paint(Graphics g)
gdrawString(Bonjour le monde 20 20)
ltHTMLgt ltHEADgt
ltTITLEgtApplet BonjourltTITLEgt
ltHEADgt
ltBODYgt
ltH1gtApplet BonjourltH1gt
ltHRgt
ltAPPLET CODE=AppletBonjourclass WIDTH=300 HEIGHT=200gt
ltAPPLETgt
ltHRgt
ltBODYgt ltHTMLgt
Attention JRE doit ecirctre installeacutee
Portable
public class Bonjour
hellip
bull Le source Java
1100 1010 1111 1110 1011 1010 1011 1110
0000 0011 0001 1101 helliphelliphelliphelliphelliphelliphellip
bull Le fichier compileacute
Bonjourjava
Bonjourclass
1) compilation
2) interpreacutetation
Sun
solaris
Mac
MacOS
pc
Windows
jvm
sun
jvm
mac
jvm
pc
Lecture du fichier locale ou distante
Environnement (tregraves) riche
bull javaapplet
bull javaawt
bull javabeans
bull javaio
bull javalang
bull javamath
bull javanet
bull javarmi
bull javasecurity
bull javasql
bull javautil
bull javaxswing
bull orgomgCORBA
bull orgomgCosNaming
bull Liste des principaux paquetages de la plate-forme JDK 12
bull soit environ 1500 classes Et bien d rsquoautres API JSDK JINI
bull le JDK131850 classes
bull JDK 14 encore plus deacutejagrave le JDK 15 hellip
Le package javalang
bullLe package javalang est chargeacute automatiquement ses classes sont donc
toujours utilisables On y trouve entre autres
bullla classe Object dont deacuterivent toutes les autres classes
bullles classes repreacutesentant les types numeacuteriques de bases Boolean Byte
Double Float Integer Long
bullla classe Math qui fournit des meacutethodes de calcul des fonctions usuelles en
matheacutematiques
bullles classes Character String et StringBuffer pour la gestion des caractegraveres et
des chaicircnes de caractegraveres
bullla classe System que nous utilisons pour afficher du texte sur la console DOS
Les autres packages
Les autres packages doivent ecirctre deacuteclareacutes (mot cleacute import) pour pouvoir ecirctre
utiliseacutes
Nous aurons agrave eacutetudier entre autres les packages
javaawt pour la creacuteation dinterfaces graphiques
javaawtevent pour la gestion des eacutevegravenements
javautil pour certaines structures de donneacutees
javaio pour la gestion des fichiers
javanet pour le teacuteleacutechargement de fichiers
Variables et Objets Types Java
Types de reacutefeacuterences
Types primitifs
Type Tableau
Type Classe
Type interface
boolean
float double
byte short int long char
Une variable est
bull soit de type primitif
bull soit une reacutefeacuterence agrave un objet
int x y
boolean b = false
double d = 314159
Object
PolygoneRegulier unPolygone = new
PolygoneRegulier()
Carreacute unCarre = new Carre()
Object o = new Object()
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
1er programme afficher bonjour
import javaio
public class Bonjour
public static void main(String args[])
Systemoutprintln(Bonjour le monde)
2egraveme programme Afficher bonjour en tenant compte dun eacuteventuel
paramegravetre passeacute sur la ligne de commande
public class Bonjour2
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Bonjour le monde)
else Systemoutprintln(Bonjour +args[0]+ )
Compilation (JDK)
Cprog_javagt javac Bonjourjava
Creacuteation de Bonjourclass
Exeacutecution
Cprog_javagt java Bonjour Attention le reacutepertoire ougrave se trouve javac doit se trouver dans le path
et prog_java dans la variable drsquoenvironnement CLASSPATH
Une applet Java Une applet est un petit programme qui fonctionne agrave linteacuterieur dun
document HTML Nous aurons agrave creacuteer deux fichiers le fichier source java
agrave compiler et le fichier html dans lequel se fera lexeacutecution
import javaawt
import javaapplet
public class AppletBonjour extends Applet
public void paint(Graphics g)
gdrawString(Bonjour le monde 20 20)
ltHTMLgt ltHEADgt
ltTITLEgtApplet BonjourltTITLEgt
ltHEADgt
ltBODYgt
ltH1gtApplet BonjourltH1gt
ltHRgt
ltAPPLET CODE=AppletBonjourclass WIDTH=300 HEIGHT=200gt
ltAPPLETgt
ltHRgt
ltBODYgt ltHTMLgt
Attention JRE doit ecirctre installeacutee
Portable
public class Bonjour
hellip
bull Le source Java
1100 1010 1111 1110 1011 1010 1011 1110
0000 0011 0001 1101 helliphelliphelliphelliphelliphelliphellip
bull Le fichier compileacute
Bonjourjava
Bonjourclass
1) compilation
2) interpreacutetation
Sun
solaris
Mac
MacOS
pc
Windows
jvm
sun
jvm
mac
jvm
pc
Lecture du fichier locale ou distante
Environnement (tregraves) riche
bull javaapplet
bull javaawt
bull javabeans
bull javaio
bull javalang
bull javamath
bull javanet
bull javarmi
bull javasecurity
bull javasql
bull javautil
bull javaxswing
bull orgomgCORBA
bull orgomgCosNaming
bull Liste des principaux paquetages de la plate-forme JDK 12
bull soit environ 1500 classes Et bien d rsquoautres API JSDK JINI
bull le JDK131850 classes
bull JDK 14 encore plus deacutejagrave le JDK 15 hellip
Le package javalang
bullLe package javalang est chargeacute automatiquement ses classes sont donc
toujours utilisables On y trouve entre autres
bullla classe Object dont deacuterivent toutes les autres classes
bullles classes repreacutesentant les types numeacuteriques de bases Boolean Byte
Double Float Integer Long
bullla classe Math qui fournit des meacutethodes de calcul des fonctions usuelles en
matheacutematiques
bullles classes Character String et StringBuffer pour la gestion des caractegraveres et
des chaicircnes de caractegraveres
bullla classe System que nous utilisons pour afficher du texte sur la console DOS
Les autres packages
Les autres packages doivent ecirctre deacuteclareacutes (mot cleacute import) pour pouvoir ecirctre
utiliseacutes
Nous aurons agrave eacutetudier entre autres les packages
javaawt pour la creacuteation dinterfaces graphiques
javaawtevent pour la gestion des eacutevegravenements
javautil pour certaines structures de donneacutees
javaio pour la gestion des fichiers
javanet pour le teacuteleacutechargement de fichiers
Variables et Objets Types Java
Types de reacutefeacuterences
Types primitifs
Type Tableau
Type Classe
Type interface
boolean
float double
byte short int long char
Une variable est
bull soit de type primitif
bull soit une reacutefeacuterence agrave un objet
int x y
boolean b = false
double d = 314159
Object
PolygoneRegulier unPolygone = new
PolygoneRegulier()
Carreacute unCarre = new Carre()
Object o = new Object()
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Une applet Java Une applet est un petit programme qui fonctionne agrave linteacuterieur dun
document HTML Nous aurons agrave creacuteer deux fichiers le fichier source java
agrave compiler et le fichier html dans lequel se fera lexeacutecution
import javaawt
import javaapplet
public class AppletBonjour extends Applet
public void paint(Graphics g)
gdrawString(Bonjour le monde 20 20)
ltHTMLgt ltHEADgt
ltTITLEgtApplet BonjourltTITLEgt
ltHEADgt
ltBODYgt
ltH1gtApplet BonjourltH1gt
ltHRgt
ltAPPLET CODE=AppletBonjourclass WIDTH=300 HEIGHT=200gt
ltAPPLETgt
ltHRgt
ltBODYgt ltHTMLgt
Attention JRE doit ecirctre installeacutee
Portable
public class Bonjour
hellip
bull Le source Java
1100 1010 1111 1110 1011 1010 1011 1110
0000 0011 0001 1101 helliphelliphelliphelliphelliphelliphellip
bull Le fichier compileacute
Bonjourjava
Bonjourclass
1) compilation
2) interpreacutetation
Sun
solaris
Mac
MacOS
pc
Windows
jvm
sun
jvm
mac
jvm
pc
Lecture du fichier locale ou distante
Environnement (tregraves) riche
bull javaapplet
bull javaawt
bull javabeans
bull javaio
bull javalang
bull javamath
bull javanet
bull javarmi
bull javasecurity
bull javasql
bull javautil
bull javaxswing
bull orgomgCORBA
bull orgomgCosNaming
bull Liste des principaux paquetages de la plate-forme JDK 12
bull soit environ 1500 classes Et bien d rsquoautres API JSDK JINI
bull le JDK131850 classes
bull JDK 14 encore plus deacutejagrave le JDK 15 hellip
Le package javalang
bullLe package javalang est chargeacute automatiquement ses classes sont donc
toujours utilisables On y trouve entre autres
bullla classe Object dont deacuterivent toutes les autres classes
bullles classes repreacutesentant les types numeacuteriques de bases Boolean Byte
Double Float Integer Long
bullla classe Math qui fournit des meacutethodes de calcul des fonctions usuelles en
matheacutematiques
bullles classes Character String et StringBuffer pour la gestion des caractegraveres et
des chaicircnes de caractegraveres
bullla classe System que nous utilisons pour afficher du texte sur la console DOS
Les autres packages
Les autres packages doivent ecirctre deacuteclareacutes (mot cleacute import) pour pouvoir ecirctre
utiliseacutes
Nous aurons agrave eacutetudier entre autres les packages
javaawt pour la creacuteation dinterfaces graphiques
javaawtevent pour la gestion des eacutevegravenements
javautil pour certaines structures de donneacutees
javaio pour la gestion des fichiers
javanet pour le teacuteleacutechargement de fichiers
Variables et Objets Types Java
Types de reacutefeacuterences
Types primitifs
Type Tableau
Type Classe
Type interface
boolean
float double
byte short int long char
Une variable est
bull soit de type primitif
bull soit une reacutefeacuterence agrave un objet
int x y
boolean b = false
double d = 314159
Object
PolygoneRegulier unPolygone = new
PolygoneRegulier()
Carreacute unCarre = new Carre()
Object o = new Object()
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Portable
public class Bonjour
hellip
bull Le source Java
1100 1010 1111 1110 1011 1010 1011 1110
0000 0011 0001 1101 helliphelliphelliphelliphelliphelliphellip
bull Le fichier compileacute
Bonjourjava
Bonjourclass
1) compilation
2) interpreacutetation
Sun
solaris
Mac
MacOS
pc
Windows
jvm
sun
jvm
mac
jvm
pc
Lecture du fichier locale ou distante
Environnement (tregraves) riche
bull javaapplet
bull javaawt
bull javabeans
bull javaio
bull javalang
bull javamath
bull javanet
bull javarmi
bull javasecurity
bull javasql
bull javautil
bull javaxswing
bull orgomgCORBA
bull orgomgCosNaming
bull Liste des principaux paquetages de la plate-forme JDK 12
bull soit environ 1500 classes Et bien d rsquoautres API JSDK JINI
bull le JDK131850 classes
bull JDK 14 encore plus deacutejagrave le JDK 15 hellip
Le package javalang
bullLe package javalang est chargeacute automatiquement ses classes sont donc
toujours utilisables On y trouve entre autres
bullla classe Object dont deacuterivent toutes les autres classes
bullles classes repreacutesentant les types numeacuteriques de bases Boolean Byte
Double Float Integer Long
bullla classe Math qui fournit des meacutethodes de calcul des fonctions usuelles en
matheacutematiques
bullles classes Character String et StringBuffer pour la gestion des caractegraveres et
des chaicircnes de caractegraveres
bullla classe System que nous utilisons pour afficher du texte sur la console DOS
Les autres packages
Les autres packages doivent ecirctre deacuteclareacutes (mot cleacute import) pour pouvoir ecirctre
utiliseacutes
Nous aurons agrave eacutetudier entre autres les packages
javaawt pour la creacuteation dinterfaces graphiques
javaawtevent pour la gestion des eacutevegravenements
javautil pour certaines structures de donneacutees
javaio pour la gestion des fichiers
javanet pour le teacuteleacutechargement de fichiers
Variables et Objets Types Java
Types de reacutefeacuterences
Types primitifs
Type Tableau
Type Classe
Type interface
boolean
float double
byte short int long char
Une variable est
bull soit de type primitif
bull soit une reacutefeacuterence agrave un objet
int x y
boolean b = false
double d = 314159
Object
PolygoneRegulier unPolygone = new
PolygoneRegulier()
Carreacute unCarre = new Carre()
Object o = new Object()
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Environnement (tregraves) riche
bull javaapplet
bull javaawt
bull javabeans
bull javaio
bull javalang
bull javamath
bull javanet
bull javarmi
bull javasecurity
bull javasql
bull javautil
bull javaxswing
bull orgomgCORBA
bull orgomgCosNaming
bull Liste des principaux paquetages de la plate-forme JDK 12
bull soit environ 1500 classes Et bien d rsquoautres API JSDK JINI
bull le JDK131850 classes
bull JDK 14 encore plus deacutejagrave le JDK 15 hellip
Le package javalang
bullLe package javalang est chargeacute automatiquement ses classes sont donc
toujours utilisables On y trouve entre autres
bullla classe Object dont deacuterivent toutes les autres classes
bullles classes repreacutesentant les types numeacuteriques de bases Boolean Byte
Double Float Integer Long
bullla classe Math qui fournit des meacutethodes de calcul des fonctions usuelles en
matheacutematiques
bullles classes Character String et StringBuffer pour la gestion des caractegraveres et
des chaicircnes de caractegraveres
bullla classe System que nous utilisons pour afficher du texte sur la console DOS
Les autres packages
Les autres packages doivent ecirctre deacuteclareacutes (mot cleacute import) pour pouvoir ecirctre
utiliseacutes
Nous aurons agrave eacutetudier entre autres les packages
javaawt pour la creacuteation dinterfaces graphiques
javaawtevent pour la gestion des eacutevegravenements
javautil pour certaines structures de donneacutees
javaio pour la gestion des fichiers
javanet pour le teacuteleacutechargement de fichiers
Variables et Objets Types Java
Types de reacutefeacuterences
Types primitifs
Type Tableau
Type Classe
Type interface
boolean
float double
byte short int long char
Une variable est
bull soit de type primitif
bull soit une reacutefeacuterence agrave un objet
int x y
boolean b = false
double d = 314159
Object
PolygoneRegulier unPolygone = new
PolygoneRegulier()
Carreacute unCarre = new Carre()
Object o = new Object()
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Le package javalang
bullLe package javalang est chargeacute automatiquement ses classes sont donc
toujours utilisables On y trouve entre autres
bullla classe Object dont deacuterivent toutes les autres classes
bullles classes repreacutesentant les types numeacuteriques de bases Boolean Byte
Double Float Integer Long
bullla classe Math qui fournit des meacutethodes de calcul des fonctions usuelles en
matheacutematiques
bullles classes Character String et StringBuffer pour la gestion des caractegraveres et
des chaicircnes de caractegraveres
bullla classe System que nous utilisons pour afficher du texte sur la console DOS
Les autres packages
Les autres packages doivent ecirctre deacuteclareacutes (mot cleacute import) pour pouvoir ecirctre
utiliseacutes
Nous aurons agrave eacutetudier entre autres les packages
javaawt pour la creacuteation dinterfaces graphiques
javaawtevent pour la gestion des eacutevegravenements
javautil pour certaines structures de donneacutees
javaio pour la gestion des fichiers
javanet pour le teacuteleacutechargement de fichiers
Variables et Objets Types Java
Types de reacutefeacuterences
Types primitifs
Type Tableau
Type Classe
Type interface
boolean
float double
byte short int long char
Une variable est
bull soit de type primitif
bull soit une reacutefeacuterence agrave un objet
int x y
boolean b = false
double d = 314159
Object
PolygoneRegulier unPolygone = new
PolygoneRegulier()
Carreacute unCarre = new Carre()
Object o = new Object()
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Variables et Objets Types Java
Types de reacutefeacuterences
Types primitifs
Type Tableau
Type Classe
Type interface
boolean
float double
byte short int long char
Une variable est
bull soit de type primitif
bull soit une reacutefeacuterence agrave un objet
int x y
boolean b = false
double d = 314159
Object
PolygoneRegulier unPolygone = new
PolygoneRegulier()
Carreacute unCarre = new Carre()
Object o = new Object()
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
class Compare1
public static void main(String args[])
int a = 10
int b = 12
Systemoutprintln(Lentier A vaut +a+)
Systemoutprintln(Lentier B vaut +b+)
if (altb)
Systemoutprintln(A est plus petit que
B)
else if (a == b)
Systemoutprintln(A est egal agrave B)
else Systemoutprintln(A est plus grand
que B)
public class note
public static void main(String args[])
if (argslength==0)
Systemoutprintln(Passer une note en
paramegravetre )
Systemexit(1)
else
int n=IntegerparseInt(args[0])
if (ngt=10)
Systemoutprintln(Vous ecirctes reccedilu)
else if (ngt=8)
Systemoutprintln(Vous devez passer
loral)
else Systemoutprintln(Vous ecirctes recaleacute)
Exemples syntaxe de C deacuteclaration de variables de types primitifs
Structures de controcircles
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Concepts de lorienteacute objet
bull Le vocable Objet
bull Classe et objet (instance d rsquoune classe)
bull Etat dun objet et donneacutees drsquoinstance
bull Comportement dun objet et meacutethodes
bull Composition et interaction des objets
ndash Est composeacute de est constitueacute de
bull Heacuteritage
ndash Le verbe ecirctre
bull Polymorphisme
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Classes et objets Exemple de programme
class Circle
public double x y Coordonneacutee du centre
private double r rayon du cercle
public Circle(double r)
thisr = r
public double area()
return 314159 r r
public class MonPremierProgramme
public static void main(String[] args)
Circle c c est une reacutefeacuterence sur un objet Circle pas un objet
c = new Circle(50) c reacutefeacuterence maintenant un objet alloueacute en meacutemoire
cx = cy = 10
Systemoutprintln(Aire de c + carea())
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Exemple Compte bancaire class Compte
private String nom
private double solde
private int num public static int nbreComptes=0
public String adresse
public Compte (String n int nu String ad)
thissolde = 0
thisnom = n
thisnum = nu
adresse=ad nbreComptes++
public void verser(double s)
thissolde += s
public boolean retirer(double s)
if (solde gt=s) thissolde -= s
else Systemoutprintln( Solde Insuffisant ) return(false)
return (true)
public void afficher()
Systemoutprintln(NOM + thisnom)
Systemoutprintln(NUMERO + thisnum)
Systemoutprintln( SOLDE + thissolde)
public class Banque
public static void main(String[] args)
Compte c
c = new Compte()
cverser(10000) Compte b =new Compte ( rachid 111 Tanger )
cafficher() bafficher()
Systemoutprintln( Nbre de compte + ComptenbreComptes)
public void virer(Compte c double s)
If (thisretirer(s))
cverser (s)
else Systemoutprintln( Solde Insuffisant )
cvirer(b 300)
public Compte()
try
nom=UtilelireChaine(NOM )
num= UtilelireEntier(NUM )
catch(IOException ex)
Systemoutprintln(ex)
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Encapsulation
bull contrat avec le client
ndash interface publique
ndash impleacutementation priveacutee ce sont des choix dimpleacutementeurs
Heacuteritage et classification
bull deacutefinir une nouvelle classe en ajoutant de nouvelles fonctionnaliteacutes agrave
une classe existante
ndash ajout de nouvelles fonctions
ndash ajout de nouvelles donneacutees
ndash redeacutefinition de certaines proprieacuteteacutes heacuteriteacutees (masquage)
bull Une approche de la classification en langage naturel
bull Les carreacutes sont des polygones reacuteguliers (ce serait l rsquoideacuteal)
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Polymorphisme deacutefinitions
bull Polymorphisme adhoc
Surcharge( overloading)
plusieurs impleacutementations dune meacutethode en fonction des types
de paramegravetres souhaiteacutes le choix de la meacutethode est reacutesolu
statiquement degraves la compilation
bull Polymorphisme dinclusion ( overridding)
est fondeacute sur la relation dordre partiel entre les types relation
induite par lheacuteritage si le type B est infeacuterieur selon cette
relation au type A alors on peut passer un objet de type B agrave une
meacutethode qui attend un paramegravetre de type A le choix de la
meacutethode est reacutesolu dynamiquement en fonction du type de
lobjet receveur
bull Polymorphisme paramegravetrique
ou geacuteneacutericiteacute
consiste agrave deacutefinir un modegravele de proceacutedure ensuite incarneacute ou
instancieacute avec diffeacuterents types
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Exemple en syntaxe Java
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
public int surface() hellip
un usage de cette classe objet p instance de la classe PolygoneRegulier
PolygoneReacutegulier p = new PolygoneReacutegulier()
pinitialiser(4100)
int y = ppeacuterimegravetre()
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Champs d rsquoinstance eacutetat
public class PolygoneReacutegulier
int longueurDuCocircteacute
int nombreDeCocircteacutes
bull Valeurs des champs de l rsquoinstance son eacutetat
12
8
20
6
15
4
10
4 8
4
15
3
PolygoneReacutegulier
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Champs d rsquoinstances priveacutees
public class PolygoneReacutegulier
private int nombreDeCocircteacutes
private int longueurDuCocircteacute
PolygoneReacutegulier
Regravegles de
visibiliteacute
Encapsulation
Client
int getLongueurDuCocircteacute()
void setLongueurDuCocircteacute(int lg)
Regravegle Les champs sont priveacutes et
accessibles par des meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Meacutethodessignatures
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void initialiser(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
public int peacuterimegravetre()
return longueurDuCocircteacute nombreDeCocircteacutes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Meacutethodes laquo accesseur raquo
Par convention public type getNomDuChamps
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public int getNombreDeCocircteacutes()
return nombreDeCocircteacutes
public int getLongueurDuCocircteacute()
return longueurDuCocircteacute
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Meacutethodes laquo mutateur raquo
Par convention public void setNomDuChamps(type id)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public void setLongueurDuCocircteacute(int longueur)
longueurDuCocircteacute = longueur
public void setNombreDeCocircteacutes(int nombre)
nombreDeCocircteacutes = nombre
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Constructeur
ndash PolygoneReacutegulier unPolygone = new PolygoneReacutegulier()
ndash unPolygoneinitialiser(4100)
bull en plus concis plus naturel
ndash PolygoneReacutegulier unPolygone = new
PolygoneReacutegulier(4100)
public class PolygoneReacutegulier
private int longueurDuCocircteacute
private int nombreDeCocircteacutes
public PolygoneReacutegulier(int nombre int longueur)
longueurDuCocircteacute = longueur
nombreDeCocircteacutes = nombre
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Constructeurs
bull Plusieurs constructeurs sont possibles
public class Point
Point(double axdouble ay)
x = ax
y = ay
Point()
x = 0
y = 0
Point p = new Point(12)
`
Point q = new Point()
CLASSE INSTANCES
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bull Constructeurs par deacutefaut
public class Point
public double x
public double y
Point p = new Point()
Point q = new Point(12)
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point p = new Point()
Point q = new Point(12)
CLASSE
CLASSE
INSTANCES
INSTANCES
refuseacute agrave la compilation
public class Point
Point(double xdouble y)
x = x
y = y
Point()
x = 0
y = 0
ambiguiteacute
redondance
public class Point
void Point(double xdouble y)
thisx = x
thisy = y
void Point()
this(00)
CLASSE CLASSE
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bull Constructeurs par copie
public class Point
public double x
public double y
Point(double axdouble ay)
x = ax
y = ay
Point(Point p)
this(pxpy)
Point p = new Point(12)
Point q = new Point(p)
CLASSE INSTANCES
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
public class Complexe
private int Entier
private int Abstrait
public Complexe (int E int A)
Entier = E
Abstrait = A
public Complexe ()
this (00)
public void Afficher()
Systemoutprintln ( + Entier + + Abstrait + i)
public class Exemple1
public static void main (String Arg[])
Complexe N1
N1 = new Complexe(123)
N1Afficher()
Complexe N3 = N1
N3Afficher()
(new Complexe())Afficher()
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les tableaux en JAVA sont eacutegalement des objets
Ils ont tous un champs length qui donne la longueur du
tableau
On peut faire des tableaux de tout type ou de plusieurs
dimensions
Les Tableaux en JAVA
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
class Tableau
public static void main (String Arg[])
int Tab1[]
Tab1 = new int[5]
int Tab2[] = new int [5]
int Tab3[][] = new int [5][5]
for (int x=0 xlt5 x++)
Tab1[x] = x
Tab2[x] = x
for (int y=0 ylt5 y++)
Tab3[x][y] = x5 + y
Systemoutprintln (Tab1 + Tab1length)
Systemoutprintln (Tab2 + Tab2length)
Systemoutprintln (Tab3 + Tab3length)
Systemoutprintln (Tab3[2] + Tab3[2]length)
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Bonne soireacutee Ben Moh
Deacuteclarer et initialiser String souhait = Bonne soireacutee
String nomPre = new String(ldquoBen Moh)
Souhait nomPre
La classe String
la longueur (le nombre de caractegraveres)
public int length()
exemples souhaitlength() vaut 12
A BClength() vaut 4
accegraves agrave un caractegravere agrave un indice donneacute
public char charAt(int index)
exemples
souhaitcharAt(0) vaut la lettre B
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
conversion
public String toLowerCase() en minuscules
public String toUpperCase() en majuscules
exemples
String nom1 = DougA
String nom2 = nom1toLowerCase()
comparaison
public boolean equals (Object unObjet)
exemples
Bonequals(Bon) vaut true
Bonequals(bon) vaut false
public boolean equalsIgnoreCase(String autre)
(sans tenir compte de la casse (Maj vs minuscule)
BonequalsIgnoreCase(bon) vaut true
public int compareTo(String autre)
BoncompareTo(Bon) vaut 0 (identiques)
BoncompareTo(Automne) gt 0
BoncompareTo(Dinde) lt 0
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
recherche
public int indexOf(char unCar)
public int lastIndexOf(char unCar)
public int indexOf(String ch)
public int lastIndexOf(String ch)
Sous chaines
public String substring(int debut int fin)
public String substring(int debut)
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
La classe StringBuffer
bull Si la chaine doit etre souvent modifieacutee on utilise la
classe StringBuffer qui posegravede des meacutethodes qui
modifient le receveur du message et eacutevitent la creacuteation
de nouvelles instances
ndash append
ndash insert
ndash replace
ndash delete
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Exercice 2
Programmer un objet calculatrice qui reccediloit deux entiers demandeacutes agrave
lrsquousager et qui retourne le reacutesultat de lrsquoaddition Utiliser la classe Utile ici bas
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
]
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les classes laquo enveloppe raquo
bull Permettent de repreacutesenter des types de base sous forme
drsquoobjets
bull int entier =gt Integer n
bull Integer n = new Integer(entier)
bull entier = n intValue()
bull double =gtDouble boolean =gt Booleanhellip
bull intValue() doubleValue()
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les meacutethodes de conversion de type sont
stockeacutees dans des classes
class javalangString
class javalangInteger
class javalangLong
class javalangFloat
class javalangDouble
hellip
Conversions de type
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
int i = 10
String chaine = StringvalueOf (i)
String chaine=123
int entier = IntegerparseInt (chaine)
class Integer
helliphellip
public static int parseInt(String s) throws
NumberFormatException
helliphellip
try
entier = IntegerparseInt (chaine)
catch (NumberFormatException e)
Si la variable chaine nest pas convertible on
vient ici
Exemples de conversion de type
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Lrsquoheacuteritage
Vehicule private double vitesse
private int nbre_passagers
public vehicule(double vint np)
public void affiche()
Avion private int nbre_moteurs
public avion(int nmdouble vint np)
public void affiche()
Moto private double cylindree
public moto(double cydouble vint np)
public void affiche()
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Usage de lheacuteritage
bull Une classe speacutecifique heacuterite des meacutethodes et des attributs de sa classe megravere (accegravede a tous sauf ceux qui sont priveacutes)
bull On na pas besoin de les reacuteeacutecrire pour la classe fille
bull On peut cependant redeacutefinir une meacutethode de la classe megravere dans la classe fille (de mecircme signature)
bull Le constructeur dun objet doit toujours commencer par appeler le constructeur de sa classe megravere
bull Un objet de type Voiture peut utiliser toutes les meacutethodes de la classe Vehicule
bull Il doit disposer drsquoune valeur pour tous les attributs de la classe Vehicule
bull A tout moment une meacutethode qui utilise un objet de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule
bull Cette derniegravere proprieacuteteacute est le polymorphisme
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Classe de base Vehicule
class Vehicule
private double vitesse
private int nbre_passagers
public Vehicule(double vint np)
vitesse = v
nbre_passagers = np
public void affiche()
Systemoutprintln(vitesse + vitesse +
nbre_passagers + nbre_passagers)
Exemple
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Classe Deacuteriveacutee Avion
class Avion extends Vehicule
private int nbre_moteurs
public Avion(int nmdouble vint np)
super(vnp) appel au constructeur de vehicule
nbre_moteurs = nm
public void affiche()
appel de la meacutethode affiche de la classe de base
superaffiche()
Systemoutprintln(nbre de moteurs + nbre_moteurs)
Exemple (suite1)
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Classe Deacuteriveacutee Moto
class Moto extends Vehicule private double cylindree
public moto(double cydouble vint np)
super(vnp) appel au constructeur de vehicule
cylindree = cy
public void affiche()
superaffiche()
Systemoutprintln(La cylindreacutee de la moto +
cylindree)
Exemple (suite2)
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Classe de test
public class Test
public static void main(String [] args)
vehicule v = new vehicule(200300)
vaffiche()
avion boeing = new avion(4200300)
boeingaffiche()
moto suzuki = new moto(12002002)
suzukiaffiche()
Systemexit(0)
Exemple (suite3)
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
La classe Object
bull La classe Object est la classe megravere dont heacuteritent toutes les
autres classes
bull Toute classe deacutefinie en Java que ce soit par lrsquoutilisateur ou
dans un package de lrsquoAPI heacuterite de la classe Object
bull Ainsi toute classe heacuterite drsquoembleacutee des meacutethodes de la classe
Object
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Meacutethodes de la classe Object
bull Public final Class getClass() renvoie le type de lobjet sous forme drsquoun objet de la classe Class (reacuteflexiviteacute)
bull forName() renvoie un objet du type speacutecifieacute dans la chaicircne permet de construire un objet sans avoir de constructeur (reacuteflexiviteacute)
bull void finalize() force le Garbage Collector
bull boolean equals(Object o) attention == teste les reacutefeacuterences Mais compare les reacutefeacuterences des attributs (=gt redeacutefinir)
bull Object clone() creacutee une copie de lrsquoobjet Mais copie les reacutefeacuterences des attributs (=gt redeacutefinir)
bull String toString() renvoie une String deacutecrivant lobjet Par deacutefaut renvoie le type et lrsquoadresse de stockage (=gt redeacutefinir)
bull
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
class Point extends Object
private int x y
public Point() hellip
public Point(int _x int _y) hellip
public int getX() hellip
public int getY()
public static void swap(Point a Point b)hellip
public boolean equals(Object o)
return (o = null) ampamp ((this==(Point)o)
|| ((thisx == ((Point)o)x)
ampamp (thisy == ((Point)o)y)))
public String toString()
return (+x+ +y+)
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
class TestPoint
public static void main(String[] args)
Point k = new Point()
Point m = new Point(15)
gracircce agrave la meacutethode toString
Systemoutprintln(k av +k+ m av +m)
Pointswap(k m)
Systemoutprintln(k +k+ m +m)
Point p = new Point(1 2)
Point q = new Point(1 2)
Object r = new Point(1 2)
Systemoutprintln(pequals(q))
Systemoutprintln(requals(p))
Systemoutprintln(pequals(r))
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Le typage dynamique
bull Les objets connaissent en permanence le type selon lequel ils ont eacuteteacute creacuteeacutes
bull Il peut donc y avoir diffeacuterence entre le type de la reacutefeacuterence et celui de lrsquoobjet
bull Exemple
Point p = new PointCol()
Systemoutprintln(pgetClass()getName())
=gt Affiche PointCol et non pas Point
bull Pour que lrsquoon puisse compiler et exeacutecuter il faut que le type effectif heacuterite du type deacuteclareacute
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Final
bull Une meacutethode deacuteclareacutee final ne peut pas ecirctre redeacutefinie dans une classe deacuteriveacutee
public final void meacutethode()
bull Une classe deacuteclareacutee final ne peut plus ecirctre deacuteriveacutee
public final class ExempleClasse
On est ainsi certain que le contrat de la classe sera respecteacute
cela permet dinterdire la redeacutefinition dune meacutethode par le biais de lheacuteritage
ex final boolean checkPassword()
bull Une variable ou un attribut deacuteclareacutesfinal sont constants =gt le compilateur interdit de les modifier
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les classes abstraites
bull Une classe abstraite est une classe qui ne permet pas dinstancier des objets
bull Elle ne peut servir que de classe de base pour une deacuterivation
Elle se deacuteclare ainsi
abstract class A
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Classe Abstraite Regravegles
Degraves quune classe abstraite comporte une ou plusieurs meacutethodes
abstraites elle est abstraite et ce mecircme si lon nindique pas le mot cleacute abstract devant sa deacuteclaration)
bull A est consideacutereacutee comme abstraite 1 expression telle que new A() sera rejeteacutee
bull Une meacutethode abstraite doit obligatoirement ecirctre deacuteclareacutee public ce qui est logique puisque sa vocation est decirctre redeacutefinie dans une classe deacuteriveacutee
bull Une classe deacuteriveacutee dune classe abstraite nest pas obligeacutee de (re)deacutefinir toutes les meacutethodes abstraites de sa classe de base
bull Une classe deacuteriveacutee dune classe non abstraite peut ecirctre deacuteclareacutee abstraite etou contenir des meacutethodes abstraites
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
public abstract class FigureGeometrique
private String proprietaire
private String couleur
public FigureGeometrique ()
proprietaire = MOI
couleur = Bleu
public FigureGeometrique( String _proprio String _couleur )
proprietaire = _proprio
couleur = _couleur
public String toString () return getClass () getName()
abstract public double perimetre ()
abstract public double surface ()
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
public class Carre extends FigureGeometrique
private double cote
public Carre(double _cote )
cote = _cote
public Carre( String _proprio String _couleur double _cote )
super( _proprio _couleur )
cote = _cote
public String toString ()
return super toString () + de cocircteacute + cote
public double perimetre () return 4 cote
public double surface () return cote cote
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les interfaces sont des classes qui ne contiennent que
bulldes attributs statiques finaux (attributs public static final)
bulldes meacutethodes publiques abstraites (public abstract)
On les deacutefinit avec le mot cleacute laquo interface raquo au lieu de laquo class raquo
On peut impleacutementer plus drsquoune interface sur une classe en
les seacuteparant par des virgules
On utilise le mot cleacute laquo implements raquo pour signaler qursquoune
classe est laquo enfant raquo drsquoune interface
Les Interfaces
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Une interface est un type repreacutesentant une promesse de service toute variable
posseacutedant ce type peut rendre ce service
interface Coloreacute
int getCouleur( )
class PointColoreacute extends Point implements Coloreacute
private int couleur
public PointColoreacute( int x int y int col )
super(x y ) couleur = col
public int getCouleur( ) return couleur
class SegmentColoreacute extends Segment implements Coloreacute
private Point a b les extreacutemiteacutes
private int couleur
public int getCouleur( )
return couleur
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Rectangle Texte
FigureGeacuteomeacutetrique ObjetGraphique
Une classe ne peut heacuteriter que drsquoune seule structure (mot-clef extends)
mais elle
peut heacuteriter de plusieurs interfaces (mot-clef implements)
class B extends A implements I J
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bullLe traitement des exceptions permet agrave une application
drsquoavoir un comportement adeacutequat agrave une situation
inattendue
bullBeaucoup de meacutethodes sont susceptibles de deacuteclencher
une exception (comme par exemple lrsquoexemple preacuteceacutedent)
bullUne exception peut ecirctre leveacutee par une clause
trycatch
La Gestion des exceptions
try ltinstructiongt
catch (lttype exception1gt ex1) instruction
catch (lttype exception2gt ex2) instruction
hellip
finally ltinstructiongt
La clause trycatch
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
String chaine
int valeur
hellip
try
valeur = IntegerparseInt (chaine)
catch (NumberFormatException e)
Systemoutprintln (mauvais format )
try a = tab [i]
catch (ArrayIndexOutOfBounds ex) a = 0
Exemples de gestion drsquoexceptions
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bull Une meacutethode pouvant produire une exception doit ecirctre appeleacutee
dans un bloc trycatch
bull On indique qursquoune meacutethode m peut geacuteneacuterer une exception E
void m () throws E
hellip
bull Le concepteur drsquoun programme java a un devoir de captage des
exceptions pour ne pas deacutesemparer les utilisateurs
Exceptions
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Gestion de fichiers
flux
dentreacuteessorties
seacuterialisation
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bull La gestion de fichiers se fait par lrsquointermeacutediaire de la
classe javaioFile
bull Cette classe possegravede des meacutethodes qui permettent
drsquointerroger ou drsquoagir sur le systegraveme de fichiers du
systegraveme drsquoexploitation
bull Un objet de la classe javaioFile peut repreacutesenter un
fichier ou un reacutepertoire
Gestion de fichiers
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
File (String name)
File (String path String name)
File (File dir String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
Quelques meacutethodes de la classe
javaioFile
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
javaioFile
import javaio
public class ExempleFile
static public void main (String args []) new ExempleFile ()
ExempleFile () liste (new File (c))
private void liste (File dir)
if (dirisDirectory () == true)
String fichiers [] = dirlist ()
for (int i = 0 i = fichierslength i++)
Systemoutprintln (fichiers [i])
else
Systemerrprintln (dir + nest pas un repertoire)
Exemple drsquoutilisation de la classe
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bull Difficulteacute drsquoun langage drsquoavoir un bon systegraveme drsquoentreacuteessorties
bull Beaucoup de sources drsquoES de nature diffeacuterentes (console fichier
sockethellip)
bull Beaucoup drsquoaccegraves diffeacuterents (accegraves seacutequentiel accegraves aleacuteatoire
mise en meacutemoire tampon binaire caractegravere par ligne par mot
etc)
bull Un flux (stream) est un chemin de communication entre la source
dune information et sa destination
Les flux
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bull Flux dentreacuteesortie de bytes
javaioInputStream
javaioOutputStream
bull Flux dentreacuteesortie de caractegraveres depuis la version 11 de java
javaioReader
javaioWriter
bullToutes les classes dentreacuteesortie sont dans le package javaio
bullToutes les meacutethodes peuvent geacuteneacuterer une javaioIOException
Les flux proposeacutes par java
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Classes de flux de bytes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
1048698 Les meacutethodes de lecture
public int read ()
public int read (byte b [ ])
public int read (byte b [ ] int off int len)
1048698 Exemple
InputStream s = hellip
byte buffer [ ] = new byte [1024]
try
sread (buffer)
catch (IOException e)
La classe javaioInputStream
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
import javaio
public class LitFichier
public static void main (String args [])
try
InputStream s = new FileInputStream (ctempdatatxt)
byte buffer [ ] = new byte [savailable()]
sread (buffer)
for (int i = 0 i = bufferlength i++)
Systemoutprint ( (char) buffer [i])
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de flux drsquoentreacutee
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
import javaio
public class EcritFichier
static public void main (String args [])
String Chaine = Bonjour
try
FileOutputStream f = new FileOutputStream (ctempdatatxt)
fwrite (ChainegetBytes ())
fclose ()
catch (IOException e)
Systemerrprintln (Erreur ecriture)
Exemple de flux de sortie
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Ces deux classes servent de classes de base agrave des
classes de gestion drsquoentreacuteessorties plus eacutevolueacutees
bull BufferedInputStream et BufferedOutputStream permettent de lire
et eacutecrire des donneacutees agrave travers un tampon de lectureeacutecriture pour
ameacuteliorer les performances
bull DataInputStream et DataOutputStream permettent de lireeacutecrire
des donneacutees formateacutees (byte int char float double etc)
bull etc
Exemples de lectureeacutecriture eacutevolueacutee ----------------------- LIRE ------------------------
InputStream s = new FileInputStream (fichier)
DataInputStream data = new DataInputStream (s)
double valeur = datareadDouble ()
----------------------- ECRIRE ------------------------
DataOutputStream s = new DataOutputStream (new FileOutputStream
(resultat)) int n=30
swriteInt (n)
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les classes de flux de caractegraveres
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
import javaio
public class TestBufferedReader
public static void main(String args[])
try
String ligne
BufferedReader fichier = new BufferedReader
(new
FileReader(datatxt))
while ((ligne = fichierreadLine()) = null)
Systemoutprintln(ligne)
fichierclose()
catch (IOException e)
Systemerrprintln (Erreur lecture)
Exemple de BufferedReader
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
import javaio
public class Utile
public static String lireChaine(String message) throws IOException
BufferedReader entree = new BufferedReader
(new InputStreamReader(Systemin))
Systemoutprint(message)
return entreereadLine()
public static int lireEntier(String message) throws IOException
return IntegerparseInt(lireChaine(message))
public static char lireCaractere(String message) throws IOException
return lireChaine(message)charAt(0)
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bull Buffering(BufferdReaderBufferdWriter BufferdInputStreamBufferdOutputStream) une zone tampon pour reacuteduire les accegraves en lectureeacutecriture
bull DataConversion(DataInputStreamDataOutputStream) lectureeacutecriture dans un format indeacutependant de la machine
bull File(FileReaderFileWriter FileInputStreamFileOutputStream) lire et eacutecrire agrave partir de fichiers
bull Printing(PrintWriter PrintOutputStream) contient des meacutethodes donneacutees pour imprimer suivant un format donneacute
Quelques types flux IO
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
bullLa seacuterialisation drsquoun objet est le processus de stockage
drsquoun objet complet (par exemple sur un disque)
bull Le processus inverse est la deacuteseacuterialisation
bull Un objet seacuterialiseacute est dit persistant
bull Cette fonctionnaliteacute est apparue dans la version 11 de
Java
La seacuterialisation
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Enregistrer des donneacutees sur disque neacutecessite une convention de
format pour la lectureeacutecriture (cela peut ecirctre une opeacuteration
complexe et difficile agrave maintenir)
1048698 La seacuterialisation permet de rendre un objet persistant de
maniegravere simple et naturelle
1048698 Si un objet contient drsquoautres objets seacuterialisables ceux-ci
seront automatiquement seacuterialiseacutes
1048698 La plupart des classes de base (mais pas toutes) du langage
Java sont seacuterialisables
1048698 Si la classe a eacuteteacute modifieacutee entre la seacuterialisation et la
deacuteseacuterialisation lrsquoexception javaioInvalidClassException est
deacuteclencheacutee
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Une classe est seacuterialisable si elle impleacutemente lrsquointerface
javaioSerializable
bull Des objets de type javaioObjectInputStream et javaio
ObjectOutputStream vont permettre de seacuterialiserdeacuteseacuterialiser
bull Les donneacutees membres que lrsquoon ne souhaite pas sauvegarder
doivent ecirctre deacuteclareacutees transient
bull Des meacutethodes de lectureeacutecriture peuvent ecirctre redeacutefinies le cas
eacutecheacuteant
private void writeObject (javaioObjectOutputStream out) throws
IOException
private void readObject (javaioObjectInputStream in) throws
IOExceptionClassNotFoundException
Comment seacuterialiser
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
import javaio
class Info implements Serializable
private String Nom =
private String MotPasse =
public Info(String n String m)
Nom=n MotPasse = m
public String getNom () return Nom
public String getPassword () return MotPasse
Exemple
SeacuterialisationDeacuteseacuterialisation
(14)
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
public class ExempleSerialisation
static public void main (String args [])
new ExempleSerialisation ()
public ExempleSerialisation ()
Info User = new Info (Pierrepassword)
Ecrire (User)
User = Lire ()
if (User = null)
Systemoutprintln (nom = +
UsergetNom () + mot de passe = +
UsergetPassword ()
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(24)
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
void Ecrire (Info user)
try
FileOutputStream file = new
FileOutputStream (ctravailinfotxt)
ObjectOutputStream out = new
ObjectOutputStream (file)
outwriteObject (user)
outflush ()
outclose ()
catch (IOException ex)
Systemerrprintln (Erreur decriture + ex)
agrave suivre
Exemple
SeacuterialisationDeacuteseacuterialisation
(34)
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Info Lire ()
Info User = null
try
FileInputStream file = new FileInputStream
(ctravailinfotxt)
ObjectInputStream in = new ObjectInputStream (file)
User = (Info) inreadObject()
catch (Exception ex)
Systemerrprintln (Erreur de lecture + ex)
return User
Fin classe ExempleSerialisation
Exemple
SeacuterialisationDeacuteseacuterialisation
(44)
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
GUI AWT amp SWING
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Conteneurs et composants (1)
bull Une interface graphique en Java est un assemblage
conteneurs (Container) et de composants (Component)
bull Un composant est une sous-classes de la classe
abstraite javaawtComponent
ndash Exemple les boutons les zones de textes ou de
dessin etc
bull Un conteneur est un espace dans lequel on peut
positionner plusieurs composants
ndash Sous-classe de la classe javaawtContainer
ndash Par exemple les fenecirctres les applets etc
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Conteneurs et composants (2)
Object(from lang)
Component
Container
Panel
Applet(from applet)
FileDialog
Dialog Frame
Window
Button
Canvas
Checkbox
Choice
Label
TextComponent
Scrollbar List
TextArea TextField
Hieacuterarchie drsquoheacuteritage
des principaux eacuteleacutements des
interfaces graphiques en Java
Les deux
conteneurs les
plus courants
sont le Frame et
le Panel
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Conteneurs et composants (5)
bull On ajoute un composant dans un conteneur avec la meacutethode
add()
Panel p = new Panel()
Button b = new Button()
padd(b)
bull On retire
premove(b)
bull Un composant a (notamment)
ndash une taille preacutefeacutereacutee que lrsquoon obtient avec getPreferredSize()
ndash une taille minimum que lrsquoon obtient avec getMinimunSize()
ndash une taille maximum que lrsquoon obtient avec getMaximunSize()
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Conteneurs et composants (6)
import javaawt
public class EssaiFenetre1
public static void main(String[] args)
Frame f =new Frame(Ma premiegravere fenecirctre)
Button b= new Button(coucou)
fadd(b)
fpack()
fsetVisible(true)
On demande agrave la fenecirctre
de choisir la taille
minimum avec pack() et
de se rendre visible avec
setVisible(true)
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Gestionnaire de preacutesentation (1)
bull A chaque conteneur est associeacute un gestionnaire de preacutesentation
(layout manager)
bull Le gestionnaire de preacutesentation gegravere le positionnement et le
(re)dimensionnement des composants drsquoun conteneur
bull Les principaux gestionnaire de preacutesentation de lAWT sont
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
bull Tout instance de Container reacutefeacuterence une instance de
LayoutManager
ndash Il est possible den changer gracircce agrave la meacutethode setLayout()
bull Tout conteneur possegravede un gestionnaire de preacutesentation par
deacutefaut
bull Le BorderLayout pour Window et ses descendants (Frame
Dialog hellip)
bull Le FlowLayout pour Panel et ses descendants (Applet etc)
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
FlowLayout
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
OK Ouvrir
Fermer
Redimensionnement OK Ouvrir Fermer
plus visible
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
BorderLayout
bull Division de lrsquoespace avec le BorderLayout
NORTH
WEST CENTER EAST
SOUTH
add(North new Button(Le bouton nord ))
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
BorderLayout import javaawt
public class EssaiBorderLayout extends Frame
private Button b1b2b3b4 b5
public EssaiBorderLayout()
setLayout(new BorderLayout())
b1 = new Button (Nord) b2 = new Button (Sud)
b3 = new Button (Est) b4 = new Button (Ouest)
b5 = new Button (Centre)
thisadd(b1 BorderLayoutNORTH)
thisadd(b2 BorderLayoutSOUTH)
thisadd(b3 BorderLayoutEAST)
thisadd(b4 BorderLayoutWEST)
thisadd(b5 BorderLayoutCENTER)
public static void main (String args [])
EssaiBorderLayout essai = new EssaiBorderLayout()
essaipack () essaisetVisible(true)
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
GridLayout
import javaawt
public class AppliGridLayout extends Frame
public AppliGridLayout()
super(AppliGridLayout)
thissetLayout(new GridLayout(32))
for (int i = 1 i lt 7 i++)
add(new Button(IntegertoString(i)))
thispack()
thissetVisible(true)
public static void main(String args[])
AppliGridLayout appli = new AppliGridLayout()
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
On peut ne pas utiliser de gestionnaire de disposition et eacutecrire
setLayout(null)
On donne les coordonneacutees preacutecises du composant dans le conteneur sous la forme (xylargeurhauteur) ougrave (xy) sont les coordonneacutees du coin supeacuterieur gauche du composant dans le conteneur
conteneur=thisgetContentPane()
conteneursetLayout(null)
b=new JButton()
bsetText(Test)
on fixe son emplacement et ses dimensions
bsetBounds(102010020)
conteneuradd(b)
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
import javaxswing
import javaawt
import javaio
import javaawtevent
public class MonForm extends JFrame
Container conteneur=null
JTextField t
JButton b
public MonForm()
thissetTitle(Formulaire avec bouton)
thissetSize(new Dimension(500500))
WindowAdapter win=new WindowAdapter()
public void windowClosing(WindowEvent e)Systemexit(0)
thisaddWindowListener(win)
conteneur=thisgetContentPane()
conteneursetLayout(null)
t=new JTextField(texte)
conteneuradd(t)
tsetBounds(305010040)
b=new JButton()
conteneuradd(b)
bsetText(Test)
bsetBounds(102010020)
conteneuradd(b)
baddActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
tsetText(texte changeacute)
)
public static void main(String[] args)
new MonForm()setVisible(true)
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Reacutecapitulatif
bull FlowLayout
ndash Flux composants placeacutes les uns derriegravere les autres
bull BorderLayout
ndash Ecran deacutecoupeacute en 5 zones (laquo North raquo laquo West raquo
laquo South raquo laquo East raquo laquo Center raquo)
bull GridLayout
ndash Grille une case par composant chaque case de la
mecircme taille
bull CardLayout
ndash laquo Onglets raquo on affiche un eacuteleacutement agrave la fois
bull GridBagLayout
ndash Grille complexe plusieurs cases par composant
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les eacuteveacutenements graphiques (1)
bull Lutilisateur effectue
ndash une action au niveau de linterface utilisateur (clic souris
seacutelection dun item etc)
ndash alors un eacuteveacutenement graphique est eacutemis
bull Lorsquun eacuteveacutenement se produit
ndash il est reccedilu par le composant avec lequel lutilisateur
interagit (par exemple un bouton un curseur un champ de
texte etc)
ndash Ce composant transmet cet eacuteveacutenement agrave un autre objet un
eacutecouteur qui possegravede une meacutethode pour traiter
lrsquoeacuteveacutenement (on parle de traitement drsquoeacuteveacutenement)
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les eacuteveacutenements graphiques (2)
bull La gestion des eacuteveacutenements passe par lutilisation
dobjets eacutecouteur deacuteveacutenements (les Listener) et
dobjets sources deacuteveacutenements ndash Un objet eacutecouteur est linstance dune classe impleacutementant
linterface XXXXListener
ndash Une source deacuteveacutenements est un objet pouvant recenser
des objets eacutecouteurs et leur envoyer des objets
eacuteveacutenements
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
class MonAction implements ActionListener
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public class TestBouton
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener (new MonAction ())
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les eacuteveacutenements graphiques (3)
import javaawt
import javaawtevent
public class TestBouton implements ActionListener
public TestBouton()
Frame f = new Frame (TestBouton)
Button b = new Button (Cliquer ici)
fadd (b)
fpack () fsetVisible (true)
baddActionListener ( this)
public void actionPerformed (ActionEvent e)
Systemoutprintln (Une action a eu lieu)
public static void main(String args[])
TestBouton test = new TestBouton()
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Les eacuteveacutenements graphiques (4)
bull Les eacutecouteurs sont des interfaces
bull Donc une mecircme classe peut impleacutementer plusieurs
interfaces eacutecouteur
ndash Par exemple une classe heacuteritant de Frame impleacutementera les
interfaces MouseMotionListener (pour les deacuteplacements
souris) et MouseListener (pour les clics souris)
bull Chaque composant de lrsquoAWT est conccedilu pour ecirctre la
source drsquoun ou plusieurs types deacuteveacutenements
particuliers
ndash Cela se voit notamment gracircce agrave la preacutesence dans la classe
de composant dune meacutethode nommeacutee addXXXListener()
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Cateacutegories deacuteveacutenements graphiques (1)
Cateacutegorie Nom de lrsquointerface Meacutethodes
Action ActionListener actionPerformed (ActionEvent)
Item ItemListener itemStateChanged (ItemEvent)
Mouse MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
Mouse MouseListener mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseEntered (MouseEvent) (MouseEvent)
mouseExited
mouseClicked
Key KeyListener keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
Focus FocusListener focusGained (FocusEvent)
focusLost (FocusEvent)
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Cateacutegories deacuteveacutenements graphiques (3)
Adjustment AdjustmentListener adjustmentValueChanged
(AdjustmentEvent)
Component ComponentListener componentMoved
(ComponentEvent)componentHiddent
(ComponentEvent)componentResize
(ComponentEvent)componentShown
(ComponentEvent)
Window WindowListener windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
Container ContainerListener componentAdded (ContainerEvent)
componentRemoved(ContainerEvent)
Text TextListener textValueChanged (TextEvent)
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Cateacutegories deacuteveacutenements graphiques (4)
bull ActionListener ndash Action (clic) sur un bouton retour chariot dans une zone de
texte laquo tic drsquohorloge raquo (Objet Timer)
bull WindowListener
ndash Fermeture iconisation etc des fenecirctres
bull TextListener
ndash Changement de valeur dans une zone de texte
bull ItemListener
ndash Seacutelection drsquoun item dans une liste
bull MouseListener ndash Clic enfoncementrelacircchement des boutons de la souris
etc
bull MouseMotionListener
ndash Deacuteplacement de la souris dragampdrop avec la souris etc
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Cateacutegories deacuteveacutenements graphiques (5)
bull AdjustmentListener
ndash Deacuteplacement dune eacutechelle
bull ComponentListener
ndash Savoir si un composant a eacuteteacute cacheacute afficheacute hellip
bull ContainerListener
ndash Ajout dun composant dans un Container
bull FocusListener
ndash Pour savoir si un eacuteleacutement a le focus
bull KeyListener
ndash Pour la gestion des eacuteveacutenements clavier
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Cateacutegories deacuteveacutenements graphiques (6)
import javaawt
import javaawtevent
public class EssaiActionEvent1 extends Frame
implements ActionListener
public static void main(String args[])
EssaiActionEvent1 f= new EssaiActionEvent1()
public EssaiActionEvent1()
super(Utilisation drsquoun ActionEvent)
Button b = new Button(action)
baddActionListener(this)
add(BorderLayoutCENTERb)pack()setVisible(true)
public void actionPerformed( ActionEvent e )
setTitle(bouton cliqueacute )
On enregistre
lrsquoeacutecouteur drsquoevt action
aupregraves de lrsquoobjet
source b
Lorsque lon clique
sur le bouton dans
l rsquointerface le titre de
la fenecirctre change
Impleacutementation de
linterface ActionListener
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Cateacutegories deacuteveacutenements graphiques (7)
public class EssaiActionEvent2 extends Frame
implements ActionListener
private Button b1b2
public static void main(String args[])
EssaiActionEvent2 f= new EssaiActionEvent2()
public EssaiActionEvent2()
super(Utilisation drsquoun ActionEvent)
b1 = new Button(action1)
b2 = new Button(action2)
b1addActionListener(this)
b2addActionListener(this)
add(BorderLayoutCENTERb1)
add(BorderLayoutSOUTHb2)
pack()setVisible(true)
public void actionPerformed( ActionEvent e )
if (egetSource() == b1) setTitle(action1 cliqueacute)
if (egetSource() == b2) setTitle(action2 cliqueacute)
Les 2 boutons ont le
mecircme eacutecouteur (la
fenecirctre)
egetSource() renvoie
lobjet source de
lrsquoeacuteveacutenement On
effectue un test sur
les boutons (on
compare les
reacutefeacuterences)
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes
Cateacutegories deacuteveacutenements graphiques (9)
import javaawt import javaawtevent
public class WinEvt extends Frame
implements WindowListener
public static void main(String[] args)
WinEvt f= new WinEvt()
public WinEvt()
super(Cette fenecirctre se ferme)
addWindowListener(this)
pack()setVisible(true)
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
Systemexit(0)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
WindowClosing() est
appeleacute lorsque lon
clique sur la croix de
la fenecirctre
La fenecirctre est son
propre eacutecouteur
Systemexit(0)
permet de quitter une
application java
Impleacutementer cette
interface impose
lrsquoimpleacutementation de
bcp de meacutethodes