Vous êtes sur la page 1sur 89

Programmation orient objet JAVA

Sixime partie

JAVA Programmation oriente objet

Pr Hafidi Imad
1 Hafidi Imad -ENSA de Khouribga-Cours JAVA

imad.hafidi@gmail.com

AWT The Abstract Windowing Toolkit

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Conteneurs et composants 1!
Une interface graphique en Ja a est un assemb!age conteneurs "Container# et de composants "Component#$ Un composant est une partie % isib!e% de !&interface uti!isateur Ja a$
C'est une sous-c!asses de !a c!asse abstraite java.awt.Component$ E)emp!e * !es boutons+ !es ,ones de te)tes ou de dessin+ etc$

Un conteneur est un espace dans !eque! on peut positionner p!usieurs composants$


Sous-c!asse de !a c!asse java.awt.Container -a c!asse Container est e!!e-m.me une sous-c!asse de !a c!asse Component /ar e)emp!e !es fen.tres+ !es app!ets+ etc$
Hafidi Imad -ENSA de KhouribgaCours JAVA

Conteneurs et composants 2!
Object
(from la ng)

Button

Hirarchie dhritage des principaux lments des interfaces graphiques en Java

Canvas

Component

Ch eckbox Container Choice

Label

Panel List

W indow

Scrollbar

Dial og TextComponent Applet


(fro m ap pl et)

Frame

TextArea

TextField

FileDialog

Hafidi Imad -ENSA de KhouribgaCours JAVA

-es deu) conteneurs !es p!us courants sont !e Frame et !e Panel$ Un Frame repr1sente une fen.tre de haut ni eau a ec un titre+ une bordure et des ang!es de redimensionnement$
-a p!upart des app!ications uti!isent au moins un Frame comme point de d1part de !eur interface graphique$

Conteneurs et composants "!

Un Panel n&a pas une apparence propre et ne peut pas .tre uti!is1 comme fen.tre autonome$
-es Panels sont cr11s et a3out1s au) autres conteneurs de !a m.me fa4on que !es composants te!s que !es boutons -es Panels peu ent ensuite red1finir une pr1sentation qui !eur soit propre pour contenir eu)-m.mes d&autres composants$

Hafidi Imad -ENSA de KhouribgaCours JAVA

Conteneurs et composants #!
5n a3oute un composant dans un conteneur+ a ec !a m1thode add"#
Panel p = new Panel(); Button b = new Button(); p.add(b);

6e mani7re simi!aire+ un composant est retirer de son conteneur par !a m1thode remo e"# *
p.remove(b);

Un composant a "notamment# *
une tai!!e pr1f1r1e que !'on obtient a ec getPreferredSize() une tai!!e minimum que !'on obtient a ec getMinimunSize() une tai!!e ma)imum que !'on obtient a ec getMaximunSize()

Hafidi Imad -ENSA de KhouribgaCours JAVA

Conteneurs et composants $!
import java.awt.*; public class EssaiFenetre1 { public static void main(String[] args) { Frame f =new Frame("Ma premire fentre"); Button b= new Button("coucou"); f.add(b); f.pack(); f.show(); } } Cration dune fentre (un objet de la classe Frame) avec un titre Cration du bouton ayant pour label coucou Ajout du bouton dans la fentre On demande la fentre de choisir la taille minimum avec pack() et de se rendre visible avec show()
Hafidi Imad -ENSA de KhouribgaCours JAVA

%estionnaire de prsentation 1!
A chaque conteneur est associ1 un gestionnaire de pr1sentation "layout manager# -e gestionnaire de pr1sentation g7re !e positionnement et !e "re#dimensionnement des composants d'un conteneur$ -e r1-agencement des composants dans un conteneur a !ieu !ors de *
!a modification de sa tai!!e+ !e changement de !a tai!!e ou !e d1p!acement d&un des composants$ !&a3out+ !&affichage+ !a suppression ou !e masquage d&un composant$

-es principau) gestionnaires de pr1sentation de !&A;< sont * FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout

Hafidi Imad -ENSA de KhouribgaCours JAVA

%estionnaire de prsentation 2!
<out conteneur poss7de un gestionnaire de pr1sentation par d1faut$
<out instance de Container r1f1rence une instance de LayoutManager$ I! est possib!e d&en changer gr=ce > !a m1thode setLayout()$

-es gestionnaires de pr1sentation par d1faut sont *


-e BorderLayout pour Window et ses descendants "Frame+ Dialog+ @# -e FlowLayout pour Panel et ses descendants "Applet+ etc$#

Une fois insta!!1+ un gestionnaire de pr1sentation fonctionne %tout seu!% en interagissant a ec !e conteneur$

Hafidi Imad -ENSA de KhouribgaCours JAVA

&low'a(out 1!
-e A!oB-aCout est !e p!us simp!e des managers de !&A;< Destionnaire de pr1sentation uti!is1 par d1faut dans !es Panel si aucun LayoutManager n&est sp1cifi1$ Un FlowLayout peut sp1cifier *
une 3ustification > gauche+ > droite ou centr1e+ un espacement hori,onta! ou ertica! entre deu) composants$ /ar d1faut+ !es composants sont centr1s > !&int1rieur de !a ,one qui !eur est a!!ou1e$

EF

Hafidi Imad -ENSA de KhouribgaCours JAVA

&low'a(out 2!
-a strat1gie de disposition du FlowLayout est !a sui ante *
Gespecter !a taille prfre de tous !es composants contenus$ 6isposer autant de composants que !&on peut en faire tenir hori,onta!ement > !&int1rieur de !&ob3et Container$ Commencer une nou e!!e rang1e de composants si on ne peut pas !es faire tenir sur une seu!e rang1e$ Si tous !es composants ne peu ent pas tenir dans !&ob3et Container+ ce n&est pas g1r1 "c&est->-dire que !es composants peu ent ne pas apparaHtre#$

EE

Hafidi Imad -ENSA de KhouribgaCours JAVA

&low'a(out "!
OK Ouvrir Redimensionnement OK Ouvrir Fermer

Fermer

plus visible

OK

Ouvrir

Redimensionnement

OK

Ouvrir

Fermer

Fermer

EI

Hafidi Imad -ENSA de KhouribgaCours JAVA

&low'a(out )!

Redimensionnement

Redimensionnement

E(

Hafidi Imad -ENSA de KhouribgaCours JAVA

&low'a(out #!

Redimensionnement

Redimensionnement

E0

Hafidi Imad -ENSA de KhouribgaCours JAVA

&low'a(out $!
-e FlowLayout cache r1e!!ement et effecti ement !es composants qui ne rentrent pas dans !e cadre$ -e FlowLayout n&a d&int1r.t que quand i! C a peu de composants$ -&1qui a!ent ertica! du FlowLayout n&e)iste pas -a pr1sentation FlowLayout positionne !es composants !igne par !igne$
Chaque fois qu&une !igne est remp!ie+ une nou e!!e !igne est commenc1e$

-e gestionnaire FlowLayout n&impose pas !a tai!!e des composants mais !eur permet d&a oir !a tai!!e qu&i!s pr1f7rent$

E2

Hafidi Imad -ENSA de KhouribgaCours JAVA

*order'a(out 1!
BorderLayout di ise son espace de tra ai! en cinq ,ones g1ographiques * North+ South+ East+ West et Center$ -es composants sont a3out1s par nom > ces ,ones "un seu! composant par ,one#$
E)emp!e add("North", new Button("Le bouton nord !")); Si une des ,ones de bordure ne contient rien+ sa tai!!e est F$

E8

Hafidi Imad -ENSA de KhouribgaCours JAVA

*order'a(out 2!
6i ision de !'espace a ec !e Jorder-aCout

NORTH

WEST

CENTER

EAST

SOUTH

E9

Hafidi Imad -ENSA de KhouribgaCours JAVA

*order'a(out "!
import java.awt.*; public class EssaiBorderLayout extends Frame { private Button b1,b2,b3,b4, 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"); this.add(b1, BorderLayout.NORTH); this.add(b2 , BorderLayout.SOUTH); this.add(b3, BorderLayout.EAST); this.add(b4, BorderLayout.WEST); this.add(b5, BorderLayout.CENTER); } public static void main (String args []) { EssaiBorderLayout essai = new EssaiBorderLayout(); essai.pack (); essai.setVisible(true) ; }}
E: Hafidi Imad -ENSA de KhouribgaCours JAVA

*order'a(out )!
Strat1gie de disposition du BorderLayout
S&i! C a un composant dans !a partie p!ac1e dans !a partie NORTH+ i! r1cup7re sa taille prfre+ respecte sa hauteur prfre si possib!e et fi)e sa !argeur > !a tota!it1 de !a !argeur disponib!e de !&ob3et Container$ S&i! C a un composant dans !a partie p!ac1e dans !a partie SOUTH+ i! fait parei! que dans !e cas de !a partie NORTH$ S&i! C a un composant dans !a partie p!ac1e dans !a partie EAST+ i! r1cup7re sa taille prfre+ respecte sa largeur prfre si possib!e et fi)e sa hauteur > !a tota!it1 de !a hauteur encore disponib!e$ S&i! C a un composant dans !a partie p!ac1e dans !a partie EST+ i! fait parei! que dans !e cas de !a partie EAST$ S&i! C a un composant dans !a partie !ENTER+ i! !ui donne !a p!ace qui reste+ s&i! en reste encore$

E?

Hafidi Imad -ENSA de KhouribgaCours JAVA

*order'a(out #!
-ors du redimensionnement+ !e composant est !ui-m.me redimensionn1 en fonction de !a tai!!e de !a ,one+ c->-d *
!es ,ones nord et sud sont 1 entue!!ement 1!argies mais pas a!!ong1es$ !es ,ones est et ouest sont 1 entue!!ement a!!ong1es mais pas 1!argies+ !a ,one centra!e est 1tir1e dans !es deu) sens$

IF

Hafidi Imad -ENSA de KhouribgaCours JAVA

*order'a(out +!

N Redimensionnement O C S E O

IE

Hafidi Imad -ENSA de KhouribgaCours JAVA

*order'a(out ,!
Redimensionnement

Redimensionnement

II

Hafidi Imad -ENSA de KhouribgaCours JAVA

%rid'a(out 1!
-e GridLayout dispose !es composants dans une gri!!e$
61coupage de !a ,one d&affichage en !ignes et en co!onnes qui d1finissent des ce!!u!es de dimensions 1ga!es$ Chaque composant > !a m.me tai!!e
quand i!s sont a3out1s dans !es ce!!u!es !e remp!issage s 'effectue de gauche > droite et de haut en bas$

-es I param7tres sont !es rang1es et !es co!onnes$ Construction d&un Drid-aCout * new GridLayout(3,2);
nombre de lignes nombre de colonnes

I(

Hafidi Imad -ENSA de KhouribgaCours JAVA

%rid'a(out "!
import java.awt.*; public class AppliGridLayout extends Frame { public AppliGridLayout() { super("AppliGridLayout"); this.setLayout(new GridLayout(3,2)); for (int i = 1; i < 7; i++) add(new Button(Integer.toString(i))); this.pack(); this.show(); } public static void main(String args[]) { AppliGridLayout appli = new AppliGridLayout(); } }
I0

Hafidi Imad -ENSA de KhouribgaCours JAVA

%rid'a(out )!
-ors d'un redimensionnement !es composants changent tous de tai!!e mais !eurs positions re!ati es ne changent pas$

1 3 5

2 4 6

Redimensionnement

1 3 5

2 4 6

I2

Hafidi Imad -ENSA de KhouribgaCours JAVA

%rid'a(out #!

Redimensionnement

I8

Hafidi Imad -ENSA de KhouribgaCours JAVA

Card'a(out
-e CardLayout n&affiche qu&un composant > !a fois *
!es composants sont consid1r1es comme empi!1es+ > !a fa4on d&un tas de cartes$

-a pr1sentation CardLayout permet > p!usieurs composants de partager !e m.me espace d&affichage de te!!e sorte que seu! !&un d&entre eu) soit isib!e > !a fois$ /our a3outer un composant > un conteneur uti!isant un CardLayout i! faut uti!iser add(String cle, Component monComposant) /ermet de passer de ! 'affichage d 'un composant > un autre en appe!ant !es m1thodes first, last, next, previous ou show

I9

Hafidi Imad -ENSA de KhouribgaCours JAVA

%rid*ag'a(out 1!
-e gestionnaire GridBagLayout fournit des fonctions de pr1sentation comp!e)es
bas1es sur une gri!!e dont !es !ignes et !es co!onnes sont de tai!!e ariab!es$ permet > des composants simp!es de prendre !eur tai!!e pr1f1r1e au sein d&une ce!!u!e+ au !ieu de remp!ir toute !a ce!!u!e$ permet aussi !&e)tension d&un m.me composant sur p!usieurs ce!!u!es$

-e GridBagLayout est comp!iqu1 > g1rer$


6ans !a p!upart des cas+ i! est possib!e d'1 iter de !'uti!iser en associant des ob3ets Container uti!isant des gestionnaires diff1rents$
I: Hafidi Imad -ENSA de KhouribgaCours JAVA

%rid*ag'a(out 2!
-e gestionnaire DridJag-aCout est associ1 > un ob3et DridJagConstraints
!'ob3et "ri#$ag!onstraints d1finit des contraintes de positionnement+ d'a!ignements+ de tai!!e+ etc$ d'un composant dans un conteneur g1r1 par un "ri#$ag%a&out$ 5n associe chaque composant que !'on p!ace dans !e "ri#$ag%a&out a ec un ob3et "ri#$ag!onstraints
Un m.me ob3et "ri#$ag!onstraints peut-.tre associ1 > p!usieurs composants$ 61finir !es ob3ets "ri#$ag!onstraints en sp1cifiant !es diff1rents param7tres est asse, fastidieu)@ Voir !a doc
I? Hafidi Imad -ENSA de KhouribgaCours JAVA

-ise en .orme comple/e 1!


super("AppliComplexeLayout"); setLayout(new BorderLayout()); Panel pnorth = new Panel(); pnorth.add(b1); pnorth.add(b2); pnorth.add(b3); pnorth.add(b4); this.add(pnorth,BorderLayout.NORTH); Panel pcenter = new Panel(); pcenter.setLayout(new GridLayout(2,2)); pcenter.add(gr1); pcenter.add(gr2); pcenter.add(gr3); pcenter.add(gr4); this.add(pcenter,BorderLayout.CENTER); Panel psouth = new Panel(); psouth.setLayout(new FlowLayout()); psouth.add(ch); psouth.add(tf); this.add(psouth, BorderLayout.SOUTH);
(F Hafidi Imad -ENSA de KhouribgaCours JAVA

01autres gestionnaires2
5n peut imposer > un ob3et K container L de n'a oir pas de gestionnaire en fi)ant son -aCoutManager > !a a!eur nu!!
Frame f = new Frame(); f.setLayout(null);

A !a charge a!ors du programmeur de positionner chacun des composants K manue!!ement L en indiquant !eur position abso!ue dans !e rep7re de !a fen.tre$ C'est > 1 iter+ sauf dans des cas particu!iers+$

I! est possib!e d'1crire ses propres -aCoutManager@

(E

Hafidi Imad -ENSA de KhouribgaCours JAVA

3capitulati.
A!oB-aCout
A!u) * composants p!ac1s !es uns derri7re !es autres

Jorder-aCout
Ecran d1coup1 en 2 ,ones "K North L+ K;est L+ K South L+ K East L+ K Center L#

Drid-aCout
Dri!!e * une case par composant+ chaque case de !a m.me tai!!e

Card-aCout
K 5ng!ets L * on affiche un 1!1ment > !a fois

DridJag-aCout
Dri!!e comp!e)e * p!usieurs cases par composant
(I Hafidi Imad -ENSA de KhouribgaCours JAVA

'es 4nements graphi5ues 1!


-&uti!isateur effectue
une action au ni eau de !&interface uti!isateur "c!ic souris+ s1!ection d&un item+ etc# a!ors un 'nement grap(i)ue est 1mis$

-orsqu&un 1 1nement se produit


i! est re4u par !e composant a ec !eque! !&uti!isateur interagit "par e)emp!e un bouton+ un curseur+ un champ de te)te+ etc$#$ Ce composant transmet cet 1 1nement > un autre ob3et+ un couteur qui poss7de une m1thode pour traiter !'1 1nement
cette m1thode re4oit !'ob3et 1 1nement g1n1r1 de fa4on > traiter !&interaction de !&uti!isateur$
(( Hafidi Imad -ENSA de KhouribgaCours JAVA

'es 4nements graphi5ues 2!


-a gestion des 1 1nements passe par !&uti!isation d&ob3ets %1couteurs d&1 1nements% "!es Listener# et d&ob3ets sources d&1 1nements$
Un ob3et 1couteur est !&instance d&une c!asse imp!1mentant !&interface EventListener "ou une interface Nfi!!eO#$ Une source d&1 1nements est un ob3et pou ant recenser des ob3ets 1couteurs et !eur en oCer des ob3ets 1 1nements$

-orsqu&un 1 1nement se produit+


!a source d&1 1nements en oie un ob3et 1 1nement correspondant > tous ses 1couteurs$ -es ob3ets 1couteurs uti!isent a!ors !&information contenue dans !&ob3et 1 1nement pour d1terminer !eur r1ponse$
(0 Hafidi Imad -ENSA de KhouribgaCours JAVA

'es 4nements graphi5ues "!


import java.awt.*; import java.awt.event.*; class MonAction implements ActionListener { public void actionPerformed (ActionEvent e) { System.out.println ("Une action a eu lieu") ;} } public class TestBouton { public TestBouton(){ Frame f = new Frame ("TestBouton"); Button b = new Button ("Cliquer ici"); f.add (b) ; f.pack (); f.setVisible (true) ; b.addActionListener (new MonAction ());} public static void main(String args[]) { TestBouton test = new TestBouton();} }
(2 Hafidi Imad -ENSA de KhouribgaCours JAVA

'es 4nements graphi5ues )!


-es 1couteurs sont des interfaces 6onc une m.me c!asse peut imp!1menter p!usieurs interfaces 1couteur$
/ar e)emp!e une c!asse h1ritant de Arame imp!1mentera !es interfaces MouseMotionListener "pour !es d1p!acements souris# et MouseListener "pour !es c!ics souris#$

Chaque composant de !'A;< est con4u pour .tre !a source d'un ou p!usieurs tCpes d&1 1nements particu!iers$

(8

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es 4nements graphi5ues #!


-'ob3et 1 1nement en oC1 au) 1couteurs et pass1 en param7tres des fonctions correspondantes peut contenir des param7tres int1ressants pour !&app!ication$
/ar e)emp!e+ getX() et getY() sur un MouseEvent retournent !es coordonn1es de !a position du pointeur de !a souris$ Une information g1n1ra!ement uti!e que!ques soit !e tCpe d'1 1nement est !a source de cet 1 1nement que !'on obtient a ec !a m1thode getSource"#$

(9

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es 4nements graphi5ues $!

(:

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues 1!


/!usieurs tCpes d&1 1nements sont d1finis dans !e pacPage java.awt.event$ /our chaque cat1gorie d&1 1nements+ i! e)iste une interface qui doit .tre d1finie par toute c!asse souhaitant rece oir cette cat1gorie d'1 1nements$
Cette interface e)ige aussi qu&une ou p!usieurs m1thodes soient d1finies$ Ces m1thodes sont appe!1es !orsque des 1 1nements particu!iers sur iennent$

(?

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues 2!

Catgorie Action Item Mouse Mouse

Nom de linterface ActionListener ItemListener MouseMotionListener MouseListener

Key

KeyListener

Focus

FocusListener

Mthodes actionPerformed (ActionEvent) itemStateChanged (ItemEvent) mouseDragged (MouseEvent) mouseMoved (MouseEvent) mousePressed (MouseEvent) mouseReleased (MouseEvent) mouseEntered (MouseEvent) (MouseEvent) mouseExited mouseClicked keyPressed (KeyEvent) keyReleased (KeyEvent) keyTyped (KeyEvent) focusGained (FocusEvent) focusLost (FocusEvent)

0F

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues "!

Adjustment Component

AdjustmentListener ComponentListener

Window

WindowListener

Container Text

ContainerListener TextListener

adjustmentValueChanged (AdjustmentEvent) componentMoved (ComponentEvent)componentHiddent (ComponentEvent)componentResize (ComponentEvent)componentShown (ComponentEvent) windowClosing (WindowEvent) windowOpened (WindowEvent) windowIconified (WindowEvent windowDeiconified (WindowEvent) windowClosed (WindowEvent) windowActivated (WindowEvent) windowDeactivated (WindowEvent) componentAdded (ContainerEvent) componentRemoved(ContainerEvent) textValueChanged (TextEvent)

0E

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues )!


Action-istener
Action "c!ic# sur un bouton+ retour chariot dans une ,one de te)te+ K tic d'hor!oge L "5b3et <imer#

;indoB-istener
Aermeture+ iconisation+ etc$ des fen.tres

<e)t-istener
Changement de a!eur dans une ,one de te)te

Item-istener
S1!ection d'un item dans une !iste

0I

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues #!


Mouse-istener
C!ic+ enfoncementQre!=chement des boutons de !a souris+ etc$

MouseMotion-istener
61p!acement de !a souris+ dragRdrop a ec !a souris+ etc$

Ad3ustment-istener
61p!acement d&une 1che!!e

Component-istener
Sa oir si un composant a 1t1 cach1+ affich1 @

Container-istener
A3out d&un composant dans un Container
0( Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues $!


Aocus-istener
/our sa oir si un 1!1ment a !e %focus%

KeC-istener
/our !a gestion des 1 1nements c!a ier

00

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues +!


import java.awt.*; import java.awt.event.*; public class EssaiActionEvent1 extends Frame implements ActionListener { public static void main(String args[]) {EssaiActionEvent1 f= new EssaiActionEvent1();} public EssaiActionEvent1() { super("Utilisation dun ActionEvent"); Button b = new Button("action"); b.addActionListener(this); add(BorderLayout.CENTER,b);pack();show(); } public void actionPerformed( ActionEvent e ) { setTitle("bouton cliqu !"); }}
02

Implmentation de l'interface ActionListener On enregistre lcouteur devt action auprs de lobjet source "b" Lorsque l'on clique sur le bouton dans l interface, le titre de la fentre change

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues ,!


public class EssaiActionEvent2 extends Frame implements ActionListener { private Button b1,b2; public static void main(String args[]) {EssaiActionEvent2 f= new EssaiActionEvent2();} public EssaiActionEvent2(){ super("Utilisation dun ActionEvent"); b1 = new Button("action1"); b2 = new Button("action2"); b1.addActionListener(this); b2.addActionListener(this); add(BorderLayout.CENTER,b1); add(BorderLayout.SOUTH,b2); pack();show(); } public void actionPerformed( ActionEvent e ) { if (e.getSource() == b1) setTitle("action1 cliqu"); if (e.getSource() == b2) setTitle("action2 cliqu"); }}
08

Les 2 boutons ont le mme couteur (la fentre) e.getSource()" renvoie l'objet source de lvnement. On effectue un test sur les boutons (on compare les rfrences)

Hafidi Imad -ENSA de KhouribgaCours JAVA

Catgories d64nements graphi5ues 7!


import java.awt.*; import java.awt.event.*; public class WinEvt extends Frame implements WindowListener { public static void main(String[] args) { WinEvt f= new WinEvt();} public WinEvt() { super("Cette fentre se ferme"); addWindowListener(this); pack();show();} public void windowOpened(WindowEvent e){} public void windowClosing(WindowEvent e) {System.exit(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){} }
09

Implmenter cette interface impose limplmentation de bcp de mthodes La fentre est son propre couteur WindowClosing() est appel lorsque l'on clique sur la croix de la fentre "System.exit(0)" permet de quitter une application java
Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 1!


Jutton Can as ",one de dessin# ChecPbo) "case > cocher# ChecPbo)Droup -abe! Choice "S1!ecteur# -ist Scro!!bar "barre de d1fi!ement# <e)tAie!d ",one de saisie d'E !igne# <e)tArea ",one de saisie mu!ti!ignes#

0:

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 2!


Jutton
C&est un composant d&interface uti!isateur de base de tCpe %appuCer pour acti er%$ I! peut .tre construit a ec une 1tiquette de te)te "un !abe!# pr1cisant son rS!e > !&uti!isateur$ Un ob3et de !a c!asse Jutton est une source d'ActionE ent -es 1couteurs associ1s > des ob3ets de !a c!asse Jutton doi ent imp!1menter interface ActionListener Il ny a quune mthode dans linterface ActionListener, c est la mthode public void actionPerformed(ActionEvent e).
0?

Button b = new Button ("Sample") ; add (b) ; Hafidi b.addActionListener (...) ; Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues "!


ChecPJo)
-a case > cocher fournit un dispositif d&entr1e %actif Q inactif% accompagn1 d&une 1tiquette de te)te$ -a s1!ection ou !a d1se!ection est notifi1e par un ItemEvent > un 1couteur imp!1mentant !'interface ItemListener$
!a m1thode getStateChange"# de ItemE ent retourne une constante * ItemE ent$6ESE-EC<E6 ou ItemE ent$SE-EC<E6$ !e m1thode getItem() de ItemE ent ren oie !a chaHne contenant !&1tiquette de !a case > cocher consid1r1e$
Checkbox one = new Checkbox("One", false); add(one); one.addItemListener(...);
2F Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues )!


CheckboxGroup
5n peut regrouper des cases > cocher dans un ChecPbo)Droup pour obtenir un comportement de tCpe boutons radio
5n ne peut s1!ectionner qu'une seu!e case du groupe de cases > cocher en m.me temps$ S1!ectionner une case fera que toute autre case pr1c1demment coch1e sera d1s1!ectionn1e

CheckboxGroup cbg = new CheckboxGroup(); Checkbox one = new Checkbox("One", cbg, false); ... add(one); ...
2E Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues #!


Choice
Ce composant propose une !iste de choi)$
5n a3oute des 1!1ments dans !'ob3et Choice a ec !a m1thode addItem"String nomItem#$ -a chaHne pass1e en param7tre sera !a chaHne isib!e dans !a !iste 5n r1cup7re !a chaHne de caract7re correspondant > !'item actue!!ement s1!ectionn1 a ec !a m1thode String getSe!ectedItem"# Cet ob3et est source de ItemE ent+ !'1couteur correspondant 1tant un Item-istener
Choice c = new Choice(); c.addItem("First"); c.addItem("Second"); ... c.addItemListener (...);
2I Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues $!


-abe!
Un Label affiche une seu!e !igne de te)te "1tiquette# non modifiab!e$ En g1n1ra!+ !es 1tiquettes ne traitent pas d&1 1nements$
Label l = new Label ("Bonjour !"); add(l);

2(

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues +!


-ist
Un ob3et de !a c!asse -ist permet de pr1senter > !&uti!isateur p!usieurs options de te)te parmi !esque!!es i! peut s1!ectionner un ou p!usieurs 1!1ments$ Source d'ActionE ent et d'ItemE ent m1thode String getSe!ectedItem"# et StringTU getSe!ectedItems"# pour r1cup1rer des items$
List l =new List (4, false); l.add("item1"); nombre d'items visibles (ici 4 lments seront visible en mme temps)
20

slections multiples possibles ou non. Ici, avec la valeur false, non possible
Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues ,!


<e)tAie!d
-e champ de te)te est un dispositif d&entr1e de te)te sur une seu!e !igne$ I! est source d'ActionE ent 5n peut d1finir un champ de te)te comme 1tant 1ditab!e ou non$ M1thodes oid set<e)t"String te)t# et String get<e)t"# pour mettre ou retirer du te)te dans !e <e)tAie!d TextField f = new TextField ("Une ligne seulement ...", 30);
add(f);

Texte par dfaut mis dans le TextField


22

Nombre de caractres visibles dans le TextField


Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 7!


<e)tArea
-a ,one de te)te est un dispositif d&entr1e de te)te mu!ti-!ignes+ mu!ti-co!onnes a ec 1 entue!!ement !a pr1sence ou non de K scro!!bars L "barres de d1fi!ement# hori,onta! etQou ertica!$ I! peut .tre ou non 1ditab!e$ M1thode set<e)t"#+ get<e)t"# et append"# "pour a3outer du te)te > !a fin d 'un te)te e)istant d13> dans !e <e)tArea#
TextArea t = new TextArea ("Hello !", 4, 30,TextArea.SCROLLBARS_BOTH); add(t); Valeur constante prcisant la prsence ou labsence de scrollbar Hafidi Imad -ENSA de KhouribgaCours JAVA

Texte par dfaut mis dans le TextArea Nombre de lignes


28

Nombre de colonnes (en nbre de caractres)

'es composants graphi5ues 18!


Menu *
menu d1rou!ant de base+ qui peut .tre a3out1e > une barre de menus "MenuBar# ou > un autre menu$ -es 1!1ments de ces menus sont
des MenuItem i!s sont ra3out1s > un menu En r7g!e g1n1ra!e+ i!s sont associ1s > un ActionListener$ des CheckBoxMenuItem, ie. des 1!1ments de menus > cocher i!s permettent de proposer des s1!ections de tCpe %acti 1 Q d1sacti 1 % dans un menu$

29

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 11!


PopupMenu
des menus autonomes pou ant s&afficher instantan1ment sur un autre composant$
Ces menus doi ent .tre a3out1s > un composant parent "par e)emp!e un Frame#+ gr=ce > !a m1thode add(...). /our afficher un PopupMenu+ i! faut uti!iser !a m1thode show(...)$

2:

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 12!


Canvas
I! d1finit un espace ide
Sa tai!!e par d1faut est ,1ro par ,1ro "Ne pas oub!ier de !a modifier a ec un setSize(...) # et i! n'a pas de cou!eur$ pour forcer un can as "ou tout autre composant# > a oir une certaine tai!!e i! faut red1finir !es m1thodes getMinimumSi,e"# et get/referredSi,e"#$

5n peut capturer tous !es 1 1nements dans un Can as$


I! peut donc .tre associ1 > de nombreu) 1couteurs * KeyListener+ MouseMotionListener+ MouseListener$ 5n !'uti!ise en g1n1ra! pour d1finir une ,one de dessin

2?

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 1"!


class Ctrait extends Canvas implements MouseListener { Point pt; public Ctrait() { addMouseListener(this); } public void paint(Graphics g) {g.drawLine(0,0,pt.x,pt.y); g.setColor(Color.red); g.drawString("("+pt.x+";"+pt.y+")",pt.x,pt.y+5);} public Dimension getMinimumSize() {return new Dimension(200,100);} public Dimension getPreferredSize() {return getMinimumSize();} public void mouseClicked(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e) {pt=e.getPoint();repaint();} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){}}
8F Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 1)!


import java.awt.*; import java.awt.event.*; public class Dessin extends Frame { public static void main(String[] args) { Dessin f= new Dessin(); } public Dessin() { super("Fentre de dessin"); Ctrait c= new Ctrait(); add(BorderLayout.CENTER,c); pack(); show(); } }
8E

Utilisation de la classe prcdente (Ctrait) par une autre classe. Voir le fichier Dessin.java pour voir la manire exacte dont les 2 classes sont dfinies et utilises.

Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 1#!


ContrS!e des cou!eurs d&un composant
6eu) m1thodes permettent de d1finir !es cou!eurs d&un composant
setForeground (Color c) : la couleur de lencre avec laquelle on crira sur le composant setBackground (Color c) : la couleur du fond

Ces deu) m1thodes uti!isent un argument instance de !a c!asse java.awt.Color$


-a gamme comp!7te de cou!eurs pr1d1finies est !ist1e dans !a page de documentation re!ati e > !a c!asse Color$

I! est aussi possib!e de cr1er une cou!eur sp1cifique "GDJ#


int r = 255, g = 255, b = 0 ; Color c = new Color (r, g, b) ;
8I Hafidi Imad -ENSA de KhouribgaCours JAVA

'es composants graphi5ues 1$!


ContrS!e des po!ices de caract7res
-a po!ice uti!is1e pour afficher du te)te dans un composant peut .tre d1finie a ec setFont(...) a ec comme argument une instance de java.awt.Font$
Font f = new Font ("TimesRoman", Font.PLAIN, 14) ;

-es constantes de stC!e de po!ice sont en r1a!it1 des a!eurs enti7res+ parmi ce!!es cit1es ci-apr7s *
Font.BOLD Font.ITALIC Font.PLAIN Font.BOLD + Font.ITALIC

-es tai!!es en points doi ent .tre d1finies a ec une a!eur enti7re$
8( Hafidi Imad -ENSA de KhouribgaCours JAVA

Conteneurs particuliers (1)


6ia!og
Un ob3et Dialog ressemb!e > un ob3et Frame mais ne sert qu&> afficher des messages de ant .tre !us par !&uti!isateur$
I! n&a pas de boutons permettant de !e fermer ou de !&iconiser$ 5n C associe habitue!!ement un bouton de a!idation$ I! est r1uti!isab!e pour afficher tous !es messages au cours de !&e)1cution d&un programme$

Un ob3et Dialog d1pend d&un ob3et Arame "ou h1ritant de Arame#


ce Arame est pass1 comme premier argument au constructeur#$

Un Dialog n&est pas isib!e !ors de sa cr1ation$ Uti!iser !a m1thode shoB"# pour !a rendre isib!e "i! e)iste une m1thode hide"# pour !a cacher#$
80 Hafidi Imad -ENSA de KhouribgaCours JAVA

Conteneurs particuliers (2)


Ai!e6ia!og
C'est une sous-c!asse de 6ia!og V par d1faut e!!e n'est pas isib!e$ C&est un dispositif de s1!ection de fichier * on peut pr1ciser si c'est en ue d'une sau egarde ou du chargement d'un fichier Un FileDialog ne g7re g1n1ra!ement pas d&1 1nements$ Comme pour un ob3et 6ia!og+ un Ai!e6ia!og d1pend d'un ob3et Arame Un Ai!e6ia!og est une fen.tre moda!e * > partir du moment ou !a fen.tre a 1t1 rendue isib!e par !a m1thode shoB"$$$#+ !a main n'est rendu > !'uti!isateur que quand un fichier a 1t1 s1!ectionn1$

82

Hafidi Imad -ENSA de KhouribgaCours JAVA

Conteneurs particuliers (3)


Ai!e6ia!og

88

Hafidi Imad -ENSA de KhouribgaCours JAVA

9wing

$+

Hafidi Imad -ENSA de Khouribga-Cours JAVA

:ntroduction ; Swing (1)


-a bib!ioth7que Swing est une nou e!!e bib!ioth7que de composants graphiques pour Ja a$
Swing est int1gr1 > Ja a E$I$ Swing peut .tre t1!1charg1 s1par1ment pour une uti!isation a ec des ersions de Ja a ant1rieures "E$E$2W#

Cette bib!ioth7que s&a3oute > ce!!e qui 1tait uti!is1e 3usqu&a!ors "AWT# pour des raisons de compatibi!it1$
Swing fait cependant doub!e emp!oi dans beaucoup de cas a ec AWT$ -&ambition de Sun est que+ progressi ement+ !es d1 e!oppeurs r1a!isent toutes !eurs interfaces a ec Swing et !aissent tomber !es anciennes A/I graphiques$

8:

Hafidi Imad -ENSA de KhouribgaCours JAVA

Composants graphi5ues lourds 1!


Un composant graphique !ourd "heavyweight GUI component# s&appuie sur !e gestionnaire de fen.tres !oca!+ ce!ui de !a machine sur !aque!!e !e programme s&e)1cute$
awt ne comporte que des composants !ourds$ Ce choi) technique a 1t1 initia!ement fait pour assurer !a portabi!it1$

8?

Hafidi Imad -ENSA de KhouribgaCours JAVA

Composants graphi5ues lourds 2!


E)emp!e *
Un bouton de tCpe java.awt.Button int1gr1 dans une app!ication Ja a sur !a p!ate-forme Uni) est repr1sent1 gr=ce > un rai bouton Motif "appe!1 son pair - peer en ang!ais#$ Ja a communique a ec ce bouton Motif en uti!isant !a Ja a Nati e Interface$ Cette communication induit un coXt$ C&est pourquoi ce bouton est appe!1 composant !ourd$

9F

Hafidi Imad -ENSA de KhouribgaCours JAVA

Composants lgers de 9wing


Un composant graphique !1ger "en ang!ais+ lightweight GUI component# est un composant graphique ind1pendant du gestionnaire de fen.tre !oca!$
Un composant !1ger ressemb!e > un composant du gestionnaire de fen.tre !oca! mais n&en est pas un * un composant !1ger 1mu!e !es composants de gestionnaire de fen.tre !oca!$ Un bouton !1ger est un rectang!e dessin1 sur une ,one de dessin qui contient une 1tiquette et r1agit au) 1 1nements souris$ <ous !es composants de Swing+ e*cepts JApplet+ JDialog+ JFrame et JWindow sont des composants !1gers$

9E

Hafidi Imad -ENSA de KhouribgaCours JAVA

Atouts de 9wing
/!us de composants+ offrant p!us de possibi!it1s$ -es composants SBing d1pendent moins de !a p!ate-forme *
I! est p!us faci!e d&1crire une app!ication qui satisfasse au s!ogan "Write once, run everywhere"

9I

Hafidi Imad -ENSA de KhouribgaCours JAVA

Con4entions de nommage
-es composants Swing sont situ1s dans !e paquetage javax.swing et ses sous paquetages$
Un certain nombre de paquetages d&e)tensions du !angage 3a a E$E "par opposition au) paquetages standards java# sont regroup1s sous javax$
Cette con ention permet de t1!1charger ces paquetages dans un en ironnement na igateur a ec une machine irtue!!e 3a a E$E$ Ces na igateurs ne sont+ en effet+ pas autoris1s > t1!1charger des paquetages dont !e nom commence par ja'a$

I!s portent des noms simi!aires > !eurs correspondants de A;< pr1c1d1s d&un J$
JFrame+ JPanel+ JTextField+ JButton+ JCheckBox+ JLabel+ etc$
9( Hafidi Imad -ENSA de KhouribgaCours JAVA

Aper<u des composants 9wing 1!

90

Hafidi Imad -ENSA de KhouribgaCours JAVA

Aper<u des composants 9wing 2!

92

Hafidi Imad -ENSA de KhouribgaCours JAVA

Aper<u des composants 9wing "!

98

Hafidi Imad -ENSA de KhouribgaCours JAVA

Aper<u des composants 9wing )!

99

Hafidi Imad -ENSA de KhouribgaCours JAVA

Principau/ pa5uetages 9wing 1!


javax.swing
le paquetage gnral

javax.swing.border
pour dessiner des bordures autour des composants

javax.swing.colorchooser
classes et interfaces utilises par le composant JColorChooser

javax.swing.event
les vnements gnrs par les composants Swing

javax.swing.filechooser
classes et interfaces utilises par le composant JFileChooser
9: Hafidi Imad -ENSA de KhouribgaCours JAVA

Principau/ pa5uetages 9wing 2!


javax.swing.table
classes et interfaces pour grer les JTable

javax.swing.text
classes et interfaces pour la gestion des composants texte

javax.swing.tree
classes et interfaces pour grer les JTree

javax.swing.undo
pour la gestion de undo/redo dans une application
9? Hafidi Imad -ENSA de KhouribgaCours JAVA

J&rame
Anc.tre commun * c!asse JComponent
3a a$!ang$5b3ect Y W--3a a$aBt$Component Y W--3a a$aBt$Container Y W--3a a)$sBing$JComponent

-e JArame
Un objet JFrame a un comportement par d1faut associ1 > une tentati e de fermeture de !a fen.tre$
Contrairement > !a c!asse Frame+ qui ne r1agissait pas par d1faut+ !&action de fermeture sur un JFrame rend par d1faut !a fen.tre in isib!e$ Ce comportement par d1faut peut .tre modifi1 par setDefaultCloseOperation()$
:F Hafidi Imad -ENSA de KhouribgaCours JAVA

J&rame
0 comportements sont possib!es !ors de !a fermeture de !a fen7tre +O,NOTH-N",ON,!%OSE H-+E,ON,!%OSE +-SPOSE,ON,!%OSE E.-T,ON,!%OSE
import javax.swing.*; public class Simple { public static void main(String[] args) { JFrame cadre = new JFrame("Ma fenetre"); cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); cadre.setSize(300, 200); cadre.setVisible(true); } d1termine que !'app!ication sera termin1e } -orsqu'on fermera !a fen.tre
:E Hafidi Imad -ENSA de KhouribgaCours JAVA

J&rame -e conteneur d&un JFrame n&est p!us confondu a ec !e cadre !ui-m.me$


Il poss7de une couche de contenu+ dans !aque!!e on peut a3outer !es composants graphiques et dont on peut changer !e gestionnaire de pr1sentation$ Cette couche est obtenue par !a m1thode getContentPane();
Avec AWT Frame monFrame = new Frame ("Mon Frame"); Button monBouton = new Button ("Mon Bouton"); monFrame.add(monBouton);

Avec Swing JFrame monFrame = new JFrame ("Mon Frame"); JButton monBouton = new JButton ("Mon Bouton"); Container panneauContenu = monFrame.getContentPane(); panneauContenu.add(monBouton);
:I

Hafidi Imad -ENSA de KhouribgaCours JAVA

=uel5ues composants 9wing "!


-a c!asse ImageIcon et !'interface Icon
-es ob3ets de cette c!asse permettent de d1finir des icSnes > partir d'images "gif+ 3pg+ etc$# qui peu ent .tre a3out1s au c!assique te)te d&un JLabel+ d&un JButton+ etc$
Icon monIcone = new ImageIcon("Image.gif"); // Un JLabel JLabel monLabel = new JLabel("Mon Label"); monLabel.setIcon(monIcone); monLabel.setHorizontalAlignment(JLabel.RIGHT); // Un JButton JButton monBouton = new JButton("Mon bouton", monIcone);

:(

Hafidi Imad -ENSA de KhouribgaCours JAVA

=uel5ues composants 9wing )!


JTextPane
un 1diteur de te)te qui permet !a gestion de te)te format1+ !e retour > !a !igne automatique "Bord Brap#+ !&affichage d&images$

JPasswordField
un champ de saisie de mots de passe * !a saisie est in isib!e et !&affichage de chaque caract7re tap1 est remp!ac1 par un caract7re d&1cho "Z par d1faut#$

JEditorPane
un JTextComponent pour afficher et 1diter du code H<M($I et des formats te!s que G<A$
Hafidi Imad -ENSA de KhouribgaCours JAVA

:0

>/emple de J>ditorPane
import javax.swing.*; import java.awt.*; public class EditeurWEB { public static void main(String[] args) { JFrame monFrame = new JFrame ("Mon Frame"); monFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { JEditorPane monEditeur = new JEditorPane("http://www.google.fr"); Container panneauContenu = monFrame.getContentPane(); panneauContenu.setLayout(new FlowLayout()); panneauContenu.add(monEditeur); monFrame.pack(); monFrame.show();} catch (Exception e) {System.out.println(e.getMessage());}; } }
Hafidi Imad -ENSA de KhouribgaCours JAVA

:2

=uel5ues composants 9wing #!


6es bordures peu ent .tre dessin1es autour de tous composants graphiques$ SBing en d1finit ? tCpes *
AbstractJorder * ne fait rien Je e!Jorder * une bordure (6 en sur1paisseur ou en creu) CompoundJorder * permet de composer des p!usieurs bordures EmptCJorder EtchedJorder -ineJorder * bordures d&une seu!e cou!eur# MatteJorder SoftJe e!Jorder * une bordure (6 au) coins arrondis <it!edJorder * une bordure permettant !&inc!usion d'une chaHne de caract7res
:8 Hafidi Imad -ENSA de KhouribgaCours JAVA

=uel5ues composants 9wing $!

:9

Hafidi Imad -ENSA de KhouribgaCours JAVA

=uel5ues composants 9wing +!


JLayeredPane
un conteneur qui permet de ranger ses composants en couches "ou transparents#$ Ce!a permet de dessiner !es composants+ se!on un certain ordre* premier p!an+ p!an m1dian+ arri7re p!an+ etc$ /our a3outer un composant+ i! faut sp1cifier !a couche sur !aque!!e i! doit .tre dessin1
monJlayeredPane.add (monComposant, new Integer(5));

des K !aCer L sont d1finis en natif et des constantes pour C acc1der e)istent dans !a c!asse$

::

Hafidi Imad -ENSA de KhouribgaCours JAVA

=uel5ues composants 9wing ,!


<oo!<ip<e)t
permet de cr1er des aides en !ignes qui apparaissent !orsque !a souris passe sur un composant$
JButton monBouton = new JButton ("Un bouton"); monBouton.setToolTipText ("Aide de mon bouton");

Gepr1senter des !istes * c!asse JList Gepr1senter des arbres * c!asse JTree Gepr1senter des tab!es "E)ce!# * c!asse JTable Ces que!ques nou eaut1s ne sont qu&un aper4u de ce que propose SBing$
I! C a beaucoup de composants+ de nou eau) gestionnaires de pr1sentation+ de nou eau) 1 1nements graphiques que !'on ne peut pr1senter et d1tai!!er dans !e cadre de ce cours$
:? Hafidi Imad -ENSA de KhouribgaCours JAVA

Vous aimerez peut-être aussi