Part1

103
Caractéristiques de Java Un langage Orienté Objet pas de variables ni de fonctions globales, types primitifs et objet Simple syntaxe C/C++ (types primitifs, instructions de test et boucles, …) sûr pas de pointeurs, vérification du code à l ’exécution et des accès résea et/ou fichiers Robuste ramasse miettes, fortement typé, gestion des exceptions Indépendant d ’une architecture Portabilité assurée par la présence d ’un interpréteur de bytecode sur chaque machine Environnement riche classes standard complètes classes pour les communications réseau fonctions graphiques évoluées

Transcript of Part1

Page 1: Part1

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

Page 2: Part1

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

Page 3: Part1

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

Page 4: Part1

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

Page 5: Part1

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

Page 6: Part1

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

Page 7: Part1

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

Page 8: Part1

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

Page 9: Part1

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

Page 10: Part1

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

Page 11: Part1

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

Page 12: Part1

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

Page 13: Part1

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

Page 14: Part1

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

Page 15: Part1

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

Page 16: Part1

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

Page 17: Part1

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

Page 18: Part1

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

Page 19: Part1

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

Page 20: Part1

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

Page 21: Part1

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

Page 22: Part1

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

Page 23: Part1

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

Page 24: Part1

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

Page 25: Part1

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

Page 26: Part1

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

Page 27: Part1

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

Page 28: Part1

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

Page 29: Part1

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

Page 30: Part1

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

Page 31: Part1

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

Page 32: Part1

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

Page 33: Part1

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

Page 34: Part1

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

Page 35: Part1

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

Page 36: Part1

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

Page 37: Part1

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

Page 38: Part1

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

Page 39: Part1

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

Page 40: Part1

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

Page 41: Part1

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

Page 42: Part1

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

Page 43: Part1

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

Page 44: Part1

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

Page 45: Part1

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

Page 46: Part1

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

Page 47: Part1

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

Page 48: Part1

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

Page 49: Part1

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

Page 50: Part1

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

Page 51: Part1

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

Page 52: Part1

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

Page 53: Part1

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

Page 54: Part1

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

Page 55: Part1

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

Page 56: Part1

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

Page 57: Part1

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

Page 58: Part1

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

Page 59: Part1

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

Page 60: Part1

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

Page 61: Part1

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

Page 62: Part1

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

Page 63: Part1

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

Page 64: Part1

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

Page 65: Part1

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

Page 66: Part1

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

Page 67: Part1

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

Page 68: Part1

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

Page 69: Part1

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

Page 70: Part1

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

Page 71: Part1

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

Page 72: Part1

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

Page 73: Part1

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

Page 74: Part1

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

Page 75: Part1

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

Page 76: Part1

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

Page 77: Part1

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

Page 78: Part1

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

Page 79: Part1

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

Page 80: Part1

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

Page 81: Part1

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

Page 82: Part1

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

Page 83: Part1

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

Page 84: Part1

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

Page 85: Part1

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

Page 86: Part1

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

Page 87: Part1

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

Page 88: Part1

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

Page 89: Part1

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

Page 90: Part1

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

Page 91: Part1

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

Page 92: Part1

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

Page 93: Part1

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

Page 94: Part1

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

Page 95: Part1

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

Page 96: Part1

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

Page 97: Part1

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

Page 98: Part1

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

Page 99: Part1

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

Page 100: Part1

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

Page 101: Part1

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

Page 102: Part1

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

Page 103: Part1

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