Vous êtes sur la page 1sur 100

INTERFACE GRAPHIQUE JAVA

Ralis par: Y.HAJJI (hajji.you@gmail,com)

AWT et Swing

Conteneurs et composants (1)


Une interface graphique en Java est un assemblage

conteneurs (Container) et de composants (Component).


Un conteneur est un espace dans lequel on peut

positionner plusieurs composants.

AWT et Swing

Conteneurs et composants (2)


Object
(from la ng)

Button

Hirarchie dhritage des principaux lments des interfaces graphiques en Java

Canvas

Component

Checkbox Container Choice

Label

Panel List

Window

Scrollbar

Dialog TextComponent Applet


(from applet)

Frame

TextArea

TextField

FileDialog

AWT et Swing

Conteneurs et composants (3)


Les deux conteneurs les plus courants sont le Frame et le

Panel. Un Frame reprsente une fentre de haut niveau avec: un titre, une bordure des angles de redimensionnement.

AWT et Swing

Conteneurs et composants (5)


On ajoute un composant dans un conteneur, avec la

mthode add() :
Panel p = new Panel(); Button b = new Button(); p.add(b);
une taille prfre que lon obtient avec getPreferredSize() une taille minimum que lon obtient avec getMinimunSize() une taille maximum que lon obtient avec getMaximunSize()

AWT et Swing

Conteneurs et composants (6)


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()

AWT et Swing

Gestionnaire de prsentation (1)


A chaque conteneur est associ un gestionnaire de

prsentation (layout manager)


Le gestionnaire de prsentation gre: le positionnement le (re)dimensionnement des composants. Les principaux gestionnaires de prsentation de l'AWT sont :

FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout

AWT et Swing

Gestionnaire de prsentation (2)


Les gestionnaires de prsentation par dfaut sont :
Le BorderLayout pour Window et ses descendants (Frame, Dialog, ) Le FlowLayout pour Panel et ses descendants

AWT et Swing

FlowLayout
OK Ouvrir Redimensionnement OK Ouvrir Fermer

Fermer

plus visible

OK

Ouvrir

Redimensionnement

OK

Ouvrir

Fermer

Fermer

AWT et Swing

10

FlowLayout

Redimensionnement

Redimensionnement

AWT et Swing

11

FlowLayout

Redimensionnement

Redimensionnement

AWT et Swing

12

BorderLayout
BorderLayout divise son espace de travail en cinq zones

gographiques :
North South East West Center. Exemple

add("North", new Button("Le bouton nord !"));

AWT et Swing

13

BorderLayout
Division de lespace avec le BorderLayout

NORTH

WEST

CENTER

EAST

SOUTH

AWT et Swing

14

BorderLayout
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) ; }}

AWT et Swing

15

BorderLayout

N Redimensionnement O C S E O

AWT et Swing

16

BorderLayout
Redimensionnement

Redimensionnement

AWT et Swing

17

GridLayout
Dcoupage de la zone d'affichage en: lignes e colonnes. Les 2 paramtres sont les ranges et les colonnes. Construction d'un GridLayout : new GridLayout(3,2);
nombre de lignes nombre de colonnes

AWT et Swing

18

GridLayout
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(); } }

AWT et Swing

19

GridLayout (4)
Lors dun redimensionnement les composants changent

tous de taille mais leurs positions relatives ne changent pas.

1 3 5

2 4 6

Redimensionnement

1 3 5

2 4 6

AWT et Swing

20

GridLayout (5)

Redimensionnement

AWT et Swing

21

CardLayout Le CardLayout n'affiche qu'un composant la fois :


les composants sont considres comme empiles, la faon d'un tas

de cartes.
La prsentation CardLayout permet plusieurs composants de

partager le mme espace d'affichage de telle sorte que seul l'un d'entre eux soit visible la fois. Pour ajouter un composant un conteneur utilisant un CardLayout il faut utiliser add(String cle, Component monComposant) Permet de passer de l affichage d un composant un autre en appelant les mthodes first, last, next, previous ou show

AWT et Swing

22

GridBagLayout (1)
Le gestionnaire GridBagLayout fournit des fonctions de

prsentation complexes
bases sur une grille dont les lignes et les colonnes sont de taille

variables. permet des composants simples de prendre leur taille prfre au sein d'une cellule, au lieu de remplir toute la cellule. permet aussi l'extension d'un mme composant sur plusieurs cellules.

Le GridBagLayout est compliqu grer. Dans la plupart des cas, il est possible dviter de lutiliser en associant des objets Container utilisant des gestionnaires diffrents.

AWT et Swing

23

GridBagLayout (2)
Le gestionnaire GridBagLayout est associ un objet

GridBagConstraints
lobjet GridBagConstraints dfinit des contraintes de

positionnement, dalignements, de taille, etc. dun composant dans un conteneur gr par un GridBagLayout. On associe chaque composant que lon place dans le GridBagLayout avec un objet GridBagConstraints
Un mme objet GridBagConstraints peut-tre associ plusieurs

composants. Dfinir les objets GridBagConstraints en spcifiant les diffrents paramtres est assez fastidieux Voir la doc

AWT et Swing

24

Mise en forme complexe (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);

AWT et Swing

25

Dautres gestionnaires?
On peut imposer un objet

container de navoir pas de gestionnaire en fixant son LayoutManager la valeur null


Frame f = new Frame(); f.setLayout(null);

A la charge alors du programmeur de positionner chacun des

composants manuellement en indiquant leur position absolue dans le repre de la fentre. Cest viter, sauf dans des cas particuliers,.

Il est possible dcrire ses propres LayoutManager

AWT et Swing

26

Rcapitulatif
FlowLayout Flux : composants placs les uns derrire les autres BorderLayout Ecran dcoup en 5 zones ( North , East , Center )
West , South ,

GridLayout Grille : une case par composant, chaque case de la mme taille CardLayout Onglets : on affiche un lment la fois GridBagLayout Grille complexe : plusieurs cases par composant

AWT et Swing

27

Les vnements graphiques (1)


L'utilisateur effectue une action au niveau de l'interface utilisateur (clic souris, slection d'un item, etc) alors un vnement graphique est mis. Lorsqu'un vnement se produit il est reu par le composant avec lequel l'utilisateur interagit (par exemple un bouton, un curseur, un champ de texte, etc.). Ce composant transmet cet vnement un autre objet, un couteur qui possde une mthode pour traiter lvnement
cette mthode reoit lobjet vnement gnr de faon traiter

l'interaction de l'utilisateur.

AWT et Swing

28

Les vnements graphiques (2)


La gestion des vnements passe par l'utilisation d'objets

"couteurs d'vnements" (les Listener) et d'objets sources d'vnements.


Un objet couteur est l'instance d'une classe implmentant

l'interface EventListener (ou une interface fille). Une source d'vnements est un objet pouvant recenser des objets couteurs et leur envoyer des objets vnements.

Lorsqu'un vnement se produit, la source d'vnements envoie un objet vnement correspondant tous ses couteurs. Les objets couteurs utilisent alors l'information contenue dans l'objet vnement pour dterminer leur rponse.

AWT et Swing

29

Les vnements graphiques (3)


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();} }

AWT et Swing

30

Les vnements graphiques (4)


Les couteurs sont des interfaces Donc une mme classe peut implmenter plusieurs

interfaces couteur.
Par exemple une classe hritant de Frame implmentera les

interfaces MouseMotionListener (pour les dplacements souris) et MouseListener (pour les clics souris).

Chaque composant de lAWT est conu pour tre la

source dun ou plusieurs types d'vnements particuliers.


Cela se voit notamment grce la prsence dans la classe de

composant d'une mthode nomme addXXXListener().

AWT et Swing

31

Les vnements graphiques (5)


Lobjet vnement envoy aux couteurs et pass en

paramtres des fonctions correspondantes peut contenir des paramtres intressants pour l'application.
Par exemple, getX() et getY() sur un MouseEvent retournent les

coordonnes de la position du pointeur de la souris. Une information gnralement utile quelques soit le type dvnement est la source de cet vnement que lon obtient avec la mthode getSource().

AWT et Swing

32

Les vnements graphiques (6)

AWT et Swing

33

Catgories d'vnements graphiques (1)


Plusieurs types d'vnements sont dfinis dans le

package java.awt.event. Pour chaque catgorie d'vnements, il existe une interface qui doit tre dfinie par toute classe souhaitant recevoir cette catgorie dvnements.
Cette interface exige aussi qu'une ou plusieurs mthodes soient

dfinies. Ces mthodes sont appeles lorsque des vnements particuliers surviennent.

AWT et Swing

34

Catgories d'vnements graphiques (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)

AWT et Swing

35

Catgories d'vnements graphiques (3)

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)

AWT et Swing

36

Catgories d'vnements graphiques (4)


ActionListener Action (clic) sur un bouton, retour chariot dans une zone de texte, tic dhorloge (Objet Timer) WindowListener Fermeture, iconisation, etc. des fentres TextListener Changement de valeur dans une zone de texte ItemListener Slection dun item dans une liste

AWT et Swing

37

Catgories d'vnements graphiques (5)


MouseListener Clic, enfoncement/relchement des boutons de la souris, etc. MouseMotionListener Dplacement de la souris, drag&drop avec la souris, etc. AdjustmentListener Dplacement d'une chelle ComponentListener Savoir si un composant a t cach, affich ContainerListener Ajout d'un composant dans un Container

AWT et Swing

38

Catgories d'vnements graphiques (6)


FocusListener Pour savoir si un lment a le "focus" KeyListener Pour la gestion des vnements clavier

AWT et Swing

39

Catgories d'vnements graphiques (7)


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 !"); }}

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

AWT et Swing

40

Catgories d'vnements graphiques (8)


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"); }}

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)

AWT et Swing

41

Catgories d'vnements graphiques (9)


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){} }

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

AWT et Swing

42

Les adapteurs (1)


Les classes

adapteur permettent une mise en simple de l'coute d'vnements graphiques.

uvre

Ce sont des classes qui implmentent les couteurs d'vnements

possdant le plus de mthodes, en dfinissant un corps vide pour chacune d'entre elles. Plutt que d'implmenter l'intgralit d'une interface dont une seule mthode est pertinente pour rsoudre un problme donn, une alternative est de sous-classer l'adapteur appropri et de redfinir juste les mthodes qui nous intressent.
Par exemple pour la gestion des vnements fentres...

AWT et Swing

43

Les adapteurs (2)


Solution en implmentant linterface class Terminator implements WindowListener { public void windowClosing (WindowEvent e) {System.exit(0);} public void windowClosed (WindowEvent e) {} public void windowIconified (WindowEvent e) {} public void windowOpened (WindowEvent e) {} public void windowDeiconified (WindowEvent e) {} public void windowActivated (WindowEvent e) {} public void windowDeactivated (WindowEvent e) {} } Solution en utilisant un WindowAdapter class Terminator extends WindowAdapter { public void windowClosing (WindowEvent e) {System.exit(0);} }

AWT et Swing

44

Les adapteurs (3)


Il existe 7 classes d'adapteurs (autant que d'interfaces

d'couteurs possdant plus d'une mthode) :


ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter

AWT et Swing

45

Les adapteurs (4)


En pratique, et notamment avec la classe

WindowAdapter, on utilise trs souvent une classe anonyme

Frame f = new Frame("Machin") f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

AWT et Swing

46

Les composants graphiques (1)


Button Canvas (zone de dessin) Checkbox

(case cocher) CheckboxGroup Label Choice (Slecteur) List Scrollbar (barre de dfilement) TextField (zone de saisie d1 ligne) TextArea (zone de saisie multilignes)

AWT et Swing

47

Les composants graphiques (2)


Button C'est un composant d'interface de type "appuyer pour activer". Un objet de la classe Button. Les couteurs associs la classe Button doivent implmenter interface ActionListener. Une seul mthode mthode public void actionPerformed(ActionEvent e).

Button b = new Button ("Sample") ; add (b) ; b.addActionListener (...) ;

AWT et Swing

48

Les composants graphiques (3)


CheckBox La case cocher fournit un dispositif d'entre "actif / inactif". La slection ou la dselection est notifie par un ItemEvent. Ecouteur implmente linterface ItemListener.
le mthode getItem() de ItemEvent renvoie la chane contenant

l'tiquette de la case cocher considre.


Checkbox one = new Checkbox("One", false); add(one); one.addItemListener(...);

AWT et Swing

49

Les composants graphiques (6)


Label Un Label affiche une seule ligne de texte (tiquette) non modifiable. En gnral, les tiquettes ne traitent pas d'vnements.

Label l = new Label ("Bonjour !"); add(l);

AWT et Swing

50

Les composants graphiques (7)


List Un objet de la classe List prsente plusieurs options de texte Source dActionEvent et dItemEvent mthode String getSelectedItem() et String[] getSelectedItems() pour rcuprer des items.

List l =new List (4, false); l.add("item1"); nombre d'items visibles (ici 4 lments seront visible en mme temps) slections multiples possibles ou non. Ici, avec la valeur false, non possible

AWT et Swing

51

Les composants graphiques (8)


TextField Le champ de texte est un dispositif d'entre de texte sur une seule ligne. Il est source dActionEvent On peut dfinir un champ de texte comme tant ditable ou non. Mthodes void setText(String text) et String getText() pour mettre ou retirer du texte dans le TextField
TextField f = new TextField ("Une ligne seulement ...", 30); add(f);

Texte par dfaut mis dans le TextField

Nombre de caractres visibles dans le TextField

AWT et Swing

52

Les composants graphiques (9)


TextArea La zone de texte est un dispositif d'entre de texte multi-lignes, multi-colonnes. Il peut tre ou non ditable. Mthode setText(), getText() et append() (pour ajouter du texte la fin d un texte existant dj dans le TextArea)

TextArea t = new TextArea ("Hello !", 4, 30,TextArea.SCROLLBARS_BOTH); add(t); Valeur constante prcisant la prsence ou labsence de scrollbar

Texte par dfaut mis dans le TextArea Nombre de lignes Nombre de colonnes (en nbre de caractres)

AWT et Swing

53

Les composants graphiques (10)


Menu : menu droulant de base, qui peut tre ajoute une barre de menus (MenuBar) ou un autre menu. Les lments de ces menus sont
des MenuItem ils sont rajouts un menu En rgle gnrale, ils sont associs un ActionListener.

AWT et Swing

54

Les composants graphiques (11)


PopupMenu des menus autonomes pouvant s'afficher instantanment sur un autre composant.
Ces menus doivent tre ajouts un composant parent (par exemple

un Frame), grce la mthode add(...). Pour afficher un PopupMenu, il faut utiliser la mthode show(...).

AWT et Swing

55

Les composants graphiques (12)


Canvas Il dfinit un espace vide
Sa taille par dfaut est zro par zro (Ne pas oublier de la modifier avec

un setSize(...) ) et il na pas de couleur.


pour forcer un canvas (ou tout autre composant) avoir une certaine taille il faut redfinir les mthodes getMinimumSize() et getPreferredSize().

On peut capturer tous les vnements dans un Canvas.


Il peut donc tre associ de nombreux couteurs : KeyListener,

MouseMotionListener, MouseListener. On lutilise en gnral pour dfinir une zone de dessin

AWT et Swing

56

Les composants graphiques (13)


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){}}

AWT et Swing

57

Les composants graphiques (14)


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(); } } 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.

AWT et Swing

58

Les composants graphiques (15)


Contrle des couleurs d'un composant Deux mthodes permettent de dfinir les couleurs 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 deux mthodes utilisent un argument instance de la classe

java.awt.Color.
La gamme complte de couleurs prdfinies est liste dans la page de

documentation relative la classe Color.


Il est aussi possible de crer une couleur spcifique (RGB)
int r = 255, g = 255, b = 0 ; Color c = new Color (r, g, b) ;

AWT et Swing

59

Les composants graphiques (16)


Contrle des polices de caractres La police utilise pour afficher du texte dans un composant peut tre dfinie avec setFont(...) avec comme argument une instance de java.awt.Font.
Font f = new Font ("TimesRoman", Font.PLAIN, 14) ;

Les constantes de style de police sont en ralit des valeurs

entires, parmi celles cites ci-aprs :


Font.BOLD Font.ITALIC Font.PLAIN Font.BOLD + Font.ITALIC

Les tailles en points doivent tre dfinies avec une valeur entire.

AWT et Swing

60

Conteneurs particuliers (1)


Dialog Un objet Dialog ressemble un objet Frame mais ne sert qu' afficher des messages devant tre lus par l'utilisateur.
Il n'a pas de boutons permettant de le fermer ou de l'iconiser. On y associe habituellement un bouton de validation. Il est rutilisable pour afficher tous les messages au cours de

l'excution d'un programme.


Un objet Dialog dpend d'un objet Frame (ou hritant de Frame)
ce Frame est pass comme premier argument au constructeur).

Un Dialog n'est pas visible lors de sa cration. Utiliser la mthode

show() pour la rendre visible (il existe une mthode hide() pour la cacher).

AWT et Swing

61

Conteneurs particuliers (2)


FileDialog Cest une sous-classe de Dialog ; par dfaut elle nest pas visible. C'est un dispositif de slection de fichier : on peut prciser si cest en vue dune sauvegarde ou du chargement dun fichier Un FileDialog ne gre gnralement pas d'vnements. Comme pour un objet Dialog, un FileDialog dpend dun objet Frame Un FileDialog est une fentre modale : partir du moment ou la fentre a t rendue visible par la mthode show(...), la main nest rendu lutilisateur que quand un fichier a t slectionn.

AWT et Swing

62

Conteneurs particuliers (3) FileDialog

AWT et Swing

63

Conteneurs particuliers (4)


ScrollPane C'est un conteneur gnral de type Panel
tout comme un Panel il ne peut pas tre utilis de faon indpendante il fournit des barres de dfilement (scrollbars) verticales et/ou

horizontales
Un ScrollPane ne peut contenir qu'un seul composant Ce conteneur nest pas trs intressant mais est cit pour

information.

Avec Swing que nous allons voir dans la suite, ne

nouveaux trs intressants composants font leur apparition...

SWING

AWT et Swing

65

Introduction Swing (1)


Swing est intgr Java 1.2.

La bibliothque Swing est une nouvelle bibliothque de

composants graphiques pour Java.


Swing peut tre tlcharg sparment pour une utilisation avec

des versions de Java antrieures (1.1.5+)

Cette bibliothque s'ajoute celle qui tait utilise

jusqu'alors (AWT) pour des raisons de compatibilit.


Swing fait cependant double emploi dans beaucoup de cas avec

AWT. L'ambition de Sun est que, progressivement, les dveloppeurs ralisent toutes leurs interfaces avec Swing et laissent tomber les anciennes API graphiques.

AWT et Swing

66

Composants graphiques lourds (1)


Un composant graphique lourd (heavyweight GUI

component) s'appuie sur le gestionnaire de fentres local, celui de la machine sur laquelle le programme s'excute.
awt ne comporte que des composants lourds. Ce choix technique a t initialement fait pour assurer la portabilit.

AWT et Swing

67

Composants graphiques lourds (2)


Exemple : Un bouton de type java.awt.Button intgr dans une application Java sur la plate-forme Unix est reprsent grce un vrai bouton Motif (appel son pair - peer en anglais). Java communique avec ce bouton Motif en utilisant la Java Native Interface. Cette communication induit un cot. C'est pourquoi ce bouton est appel composant lourd.

AWT et Swing

68

Composants lgers de Swinglightweight GUI Un composant graphique lger (en anglais,


component) est un composant graphique indpendant du gestionnaire de fentre local.
Un composant lger ressemble un composant du gestionnaire de

fentre local mais n'en est pas un : un composant lger mule les composants de gestionnaire de fentre local. Un bouton lger est un rectangle dessin sur une zone de dessin qui contient une tiquette et ragit aux vnements souris. Tous les composants de Swing, excepts JApplet, JDialog, JFrame et JWindow sont des composants lgers.

AWT et Swing

69

Atouts de Swing
Plus de composants, offrant plus de possibilits. Les composants Swing dpendent moins de la plate-

forme :
Il est plus facile d'crire une application qui satisfasse au slogan

"Write once, run everywhere" Swing peut pallier aux faiblesses (bogues ?) de chaque gestionnaire de fentre.

AWT et Swing

70

Look & Feel (1)


Les programmeurs peuvent choisir l'aspect qu'ils dsirent

pour leur application


en effet ceux-ci sont sont muls. On parle de pluggable look and feel ou plaf. Exemple : Une application excute sur un systme Windows

ayant l'aspect d'une application Motif. Ce choix peut mme intervenir en cours d'excution.

AWT et Swing

71

Look & Feel (2)


Sun a choisi de crer son propre look-and-feel, il permet de donner une "identit graphique" aux applications Java.
Cest le look-and-feel Metal.

Un inconvnient est que pour des raisons de copyright tous les look-and-feel ne sont pas disponibles sur toutes les plate-formes.

AWT et Swing

72

Conventions de nommage
Les composants Swing sont situs dans le paquetage

javax.swing et ses sous paquetages.


Un certain nombre de paquetages d'extensions du langage java

1.1 (par opposition aux paquetages standards java) sont regroups sous javax.
Cette convention permet de tlcharger ces paquetages dans un

environnement navigateur avec une machine virtuelle java 1.1. Ces navigateurs ne sont, en effet, pas autoriss tlcharger des paquetages dont le nom commence par java.

Ils portent des noms similaires leurs correspondants de

AWT prcds d'un J.


JFrame, JPanel, JTextField, JButton, JCheckBox, JLabel, etc.

AWT et Swing

73

Aperu des composants Swing (1)

AWT et Swing

74

Aperu des composants Swing (2)

AWT et Swing

75

Aperu des composants Swing (3)

AWT et Swing

76

Aperu des composants Swing (4)

AWT et Swing

77

Principaux paquetages Swing (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

AWT et Swing

78

Principaux paquetages Swing (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

AWT et Swing

79

JFrame Anctre commun : classe JComponent


java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--javax.swing.JComponent

Le JFrame Un objet JFrame a un comportement par dfaut associ une tentative de fermeture de la fentre.
Contrairement la classe Frame, qui ne ragissait pas par dfaut, l'action de

fermeture sur un JFrame rend par dfaut la fentre invisible. Ce comportement par dfaut peut tre modifi par setDefaultCloseOperation().

AWT et Swing

80

JFrame 4 comportements sont possibles lors de la fermeture de la


fentre DO_NOTHING_ON_CLOSE HIDE_ON_CLOSE DISPOSE_ON_CLOSE EXIT_ON_CLOSE

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); } dtermine que lapplication sera termine } Lorsquon fermera la fentre

AWT et Swing

81

JFrame d'un JFrame n'est plus confondu avec le cadre lui-mme. jLe conteneur
Il possde une couche de contenu, dans laquelle on peut ajouter les composants graphiques et dont on peut changer le gestionnaire de prsentation. Cette couche est obtenue par la mthode 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);

AWT et Swing

82

Quelques composants Swing (3)


La classe ImageIcon et linterface Icon Les objets de cette classe permettent de dfinir des icnes partir dimages (gif, jpg, etc.) qui peuvent tre ajouts au classique texte 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);

AWT et Swing

83

Quelques composants Swing (4)


JTextPane un diteur de texte qui permet la gestion de texte format, le retour la ligne automatique (word wrap), l'affichage d'images. JPasswordField un champ de saisie de mots de passe : la saisie est invisible et l'affichage de chaque caractre tap est remplac par un caractre d'cho (* par dfaut). JEditorPane un JTextComponent pour afficher et diter du code HTML 3.2 et des formats tels que RTF.

AWT et Swing

84

Exemple de JEditorPane 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());}; } }

AWT et Swing

85

Quelques composants Swing (5)


Des bordures peuvent tre dessines autour de tous

composants graphiques. Swing en dfinit 9 types :


AbstractBorder : ne fait rien BevelBorder : une bordure 3D en surpaisseur ou en creux CompoundBorder : permet de composer des plusieurs bordures EmptyBorder EtchedBorder LineBorder : bordures d'une seule couleur) MatteBorder SoftBevelBorder : une bordure 3D aux coins arrondis TitledBorder : une bordure permettant l'inclusion dune chane de

caractres

AWT et Swing

86

Quelques composants Swing (6)

AWT et Swing

87

Quelques composants Swing (7)


JLayeredPane un conteneur qui permet de ranger ses composants en couches (ou transparents). Cela permet de dessiner les composants, selon un certain ordre: premier plan, plan mdian, arrire plan, etc. Pour ajouter un composant, il faut spcifier la couche sur laquelle il doit tre dessin
monJlayeredPane.add (monComposant, new Integer(5)); des layer sont dfinis en natif et des constantes pour y accder existent dans la classe.

AWT et Swing

88

Quelques composants Swing (8)


ToolTipText permet de crer des aides en lignes qui apparaissent lorsque la souris passe sur un composant.
JButton monBouton = new JButton ("Un bouton"); monBouton.setToolTipText ("Aide de mon bouton");

Reprsenter des listes : classe JList Reprsenter des arbres : classe JTree Reprsenter des tables (Excel) : classe JTable Ces quelques nouveauts ne sont qu'un aperu de ce

que propose Swing.


Il y a beaucoup de composants, de nouveaux gestionnaires de

prsentation, de nouveaux vnements graphiques que lon ne peut prsenter et dtailler dans le cadre de ce cours.

DESSINER AVEC JAVA

AWT et Swing

90

Dessiner avec lAWT (1) Rendu dclench par le systme


Le systme demande un composant de se peindre quand :
le composant est rendu visible pour la premire fois sur lcran le composant a t redimensionn le rendu du composant a t endommag et doit maintenant tre rpar

(par exemple, quelque chose qui cachait une partie du composant a t dplac. Cette partie nouveau visible doit tre repeinte)

Rendu dclench par lapplication Le composant dcide de se repeindre pour reflter un changement dans son tat interne

AWT et Swing

91

Dessiner avec lAWT (2)


La demande de repeinte du composant demande par lintermdiaire de la mthode public void paint (Graphics g)
quelle soit dclenche par le systme ou par lapplication

Donc le code indiquant ce quil faut peindre dans un

composant doit tre place dans cette mthode (en la redfinissant)

AWT et Swing

92

Dessiner avec lAWT (3)


Quand lAWT appelle cette mthode lobjet Graphic est pr-configur avec un tat appropri pour dessiner sur ce composant particulier lobjet color de cet objet Graphic prend pour valeur celle du foreground du composant son objet font celle de la proprit font du composant son objet translation est fix de sorte que les coordonnes (0,0) reprsente le coin suprieur gauche du composant son objet clip rectangle est fix la zone qui a besoin dtre repeinte

AWT et Swing

93

Dessiner avec lAWT (4)


De manire gnrale, il faut viter de placer du code

servant pour le dessin/redessin des composants en dehors de la mthode paint()


pour viter que ce genre de code soit appel un moment

inappropri (par exemple avant que le composant ne soit visible ou ait accs un objet Graphics valide)

AWT et Swing

94

Dessiner avec lAWT (5)


Il faut galement viter dans un programme de faire un

appel directe la mthode paint()


L AWT fournit un certain nombre de mthodes pour appeler la

mthode paint() indirectement


public void repaint ( ) public void repaint (long tm) public void repaint (int x, int y, int width, int height) public void repaint (long tm, int x, int y, int width, int height)

AWT et Swing

95

Dessiner avec lAWT (6)


Oprations ralises dans un rendu dclench par le

systme
lAWT dtermine si le re-dessin concerne tout ou partie du

composant lAWT appelle la mthode paint() sur le composant

AWT et Swing

96

Dessiner avec lAWT (7)


Oprations ralises dans un rendu dclench par une

application
le programme dtermine si le re-dessin concerne tout ou partie du

composant en rponse un changement dtat interne le programme appelle repaint() sur le composant qui a besoin d tre repeint. lAWT provoque lappel de la mthode update() sur le composant si ce composant ne redfinit pas update(), limplmentation par dfaut dupdate() nettoie larrire plan du composant et appelle paint() .

AWT et Swing

97

Dessiner avec lAWT (8)


pour rsumer (I) Pour la majorit des programmes le code pour le rendu graphique du composant doit tre plac dans la mthode paint(). Les programmes peuvent faire dclencher un futur appel paint() en appelant repaint() mais ne doit gnralement pas appeler paint() directement. Sur des composants avec un rendu complexe, la mthode repaint() devrait tre invoque avec des arguments pour dfinir un rectangle de clipping

AWT et Swing

98

Dessiner avec lAWT (9)


pour rsumer (II) Un appel repaint() provoquant dabord un appel update(), qui est ensuite suivi d un appel paint() par dfaut, les composants lourds peuvent redfinir update() pour raliser du dessin incrmental (le dessin incrmental nest pas possible avec les composant lgers) Les classes drives de java.awt.Container qui redfinissent paint() devrait toujours invoquer dans le corps de cette mthode super.paint() pour sassurer que tous ses composants sont redessins. Les composants avec un rendu graphique complexe devraient utilises le rectangle de clipping pour restreindre la zone redessiner

AWT et Swing

99

Aperu sur le dessin avec Swing (1)


Comme pour lAWT, en Swing on va utiliser les mthodes

paint() et repaint(). Swing supporte de plus quelques proprits additionnelles


le double buffering la transparence le chevauchement des composants

AWT et Swing

100

Aperu sur le dessin avec Swing (2)


Pour tenir compte des spcificits des composants

Swing, la mthode paint() va appeler 3 mthodes distinctes dans lordre suivant


protected void paintComponent(Graphics g) protected void paintBorder(Graphics g) protected void paintChildren(Graphics g)

Par consquent, un programme Swing devrait redfinir paintComponent() et non paint() Gnralement, il nest pas ncessaire de redfinir les 2 autres mthodes.