Escolar Documentos
Profissional Documentos
Cultura Documentos
AWT et Swing
Object
(from la ng)
Button
Canvas
Component
Label
Panel List
W indow
Scrollbar
Frame
TextArea
TextField
FileDialog
AWT et Swing
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 et des angles de redimensionnement.
La plupart des applications utilisent au moins un Frame comme point de dpart de leur interface graphique.
Un Panel n'a pas une apparence propre et ne peut pas tre utilis comme fentre autonome.
Les Panels sont crs et ajouts aux autres conteneurs de la mme faon que les composants tels que les boutons Les Panels peuvent ensuite redfinir une prsentation qui leur soit propre pour contenir eux-mmes d'autres composants.
AWT et Swing
De manire similaire, un composant est retirer de son conteneur par la mthode remove() :
p.remove(b);
Un composant a (notamment) :
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
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 6
A chaque conteneur est associ un gestionnaire de prsentation (layout manager) Le gestionnaire de prsentation gre le positionnement et le (re)dimensionnement des composants dun conteneur. Le r-agencement des composants dans un conteneur a lieu lors de :
la modification de sa taille, le changement de la taille ou le dplacement d'un des composants. l'ajout, l'affichage, la suppression ou le masquage d'un composant.
Les principaux gestionnaires de prsentation de l'AWT sont : FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout
AWT et Swing 7
Une fois install, un gestionnaire de prsentation fonctionne "tout seul" en interagissant avec le conteneur.
AWT et Swing 8
Le FlowLayout est le plus simple des managers de l'AWT Gestionnaire de prsentation utilis par dfaut dans les Panel si aucun LayoutManager n'est spcifi. Un FlowLayout peut spcifier :
une justification gauche, droite ou centre, un espacement horizontal ou vertical entre deux composants. Par dfaut, les composants sont centrs l'intrieur de la zone qui leur est alloue.
AWT et Swing
AWT et Swing
10
OK
Ouvrir
Redimensionnement
OK
Ouvrir
Fermer
Fermer
plus visible
OK
Ouvrir
Redimensionnement
OK
Ouvrir
Fermer
Fermer
AWT et Swing
11
Redimensionnement
Redimensionnement
AWT et Swing
12
Redimensionnement
Redimensionnement
AWT et Swing
13
Le FlowLayout cache rellement et effectivement les composants qui ne rentrent pas dans le cadre. Le FlowLayout n'a d'intrt que quand il y a peu de composants. L'quivalent vertical du FlowLayout n'existe pas La prsentation FlowLayout positionne les composants ligne par ligne.
Chaque fois qu'une ligne est remplie, une nouvelle ligne est commence.
Le gestionnaire FlowLayout n'impose pas la taille des composants mais leur permet d'avoir la taille qu'ils prfrent.
AWT et Swing 14
BorderLayout divise son espace de travail en cinq zones gographiques : North, South, East, West et Center. Les composants sont ajouts par nom ces zones (un seul composant par zone).
Exemple add("North", new Button("Le bouton nord !")); Si une des zones de bordure ne contient rien, sa taille est 0.
AWT et Swing
15
NORTH
WEST
CENTER
EAST
SOUTH
AWT et Swing
16
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
17
AWT et Swing
18
Lors du redimensionnement, le composant est lui-mme redimensionn en fonction de la taille de la zone, c--d :
les zones nord et sud sont ventuellement largies mais pas allonges. les zones est et ouest sont ventuellement allonges mais pas largies, la zone centrale est tire dans les deux sens.
AWT et Swing
19
N Redimensionnement O C S E O
AWT et Swing
20
Redimensionnement
Redimensionnement
AWT et Swing
21
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
22
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
23
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
24
Redimensionnement
AWT et Swing
25
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 26
AWT et Swing
27
AWT et Swing
28
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
29
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,.
AWT et Swing
30
FlowLayout
Flux : composants placs les uns derrire les autres
BorderLayout
Ecran dcoup en 5 zones ( North , West , South , East , Center )
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
31
L'utilisateur effectue
une action au niveau de l'interface utilisateur (clic souris, slection d'un item, etc) alors un vnement graphique est mis.
AWT et Swing
32
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.
AWT et Swing
33
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 34
public class Composants extends Frame implements ActionListener{ ... addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); ... public void actionPerformed (ActionEvent e) { if(e.getSource()==binit/*bouton init*/) {... ...
AWT et Swing 35
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
36
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
37
AWT et Swing
38
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
39
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
40
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
41
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
42
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
43
FocusListener
Pour savoir si un lment a le "focus"
KeyListener
Pour la gestion des vnements clavier
AWT et Swing
44
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
45
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
46
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
47
AWT et Swing
Les classes adapteur permettent une mise en uvre simple de l'coute d'vnements graphiques.
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
48
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 49
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
50
En pratique, et notamment avec la classe WindowAdapter, on utilise trs souvent une classe anonyme
Frame f = new Frame("Ma fentre") f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });
AWT et Swing
51
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
52
Button
C'est un composant d'interface utilisateur de base de type "appuyer pour activer". Il peut tre construit avec une tiquette de texte (un label) prcisant son rle l'utilisateur. Un objet de la classe Button est une source dActionEvent Les couteurs associs des objets de la classe Button doivent implmenter interface ActionListener Il ny a quune mthode dans linterface ActionListener, c est la mthode public void actionPerformed(ActionEvent e).
Button b = new Button ("Sample") ; add (b) ; b.addActionListener (...) ;
AWT et Swing 53
CheckBox
La case cocher fournit un dispositif d'entre "actif / inactif" accompagn d'une tiquette de texte. La slection ou la dselection est notifie par un ItemEvent un couteur implmentant linterface ItemListener.
la mthode getStateChange() de ItemEvent retourne une constante : ItemEvent.DESELECTED ou ItemEvent.SELECTED. 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 54
CheckboxGroup
On peut regrouper des cases cocher dans un CheckboxGroup pour obtenir un comportement de type boutons radio
On ne peut slectionner quune seule case du groupe de cases cocher en mme temps. Slectionner une case fera que toute autre case prcdemment coche sera dslectionne
CheckboxGroup cbg = new CheckboxGroup(); Checkbox one = new Checkbox("One", cbg, false); ... add(one); ...
AWT et Swing
55
Choice
Ce composant propose une liste de choix.
On ajoute des lments dans lobjet Choice avec la mthode addItem(String nomItem).
La chane passe en paramtre sera la chane visible dans la liste
On rcupre la chane de caractre correspondant litem actuellement slectionn avec la mthode String getSelectedItem() Cet objet est source de ItemEvent, lcouteur correspondant tant un ItemListener Choice c = new Choice();
c.addItem("First"); c.addItem("Second"); ... c.addItemListener (...);
AWT et Swing 56
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
57
List
Un objet de la classe List permet de prsenter l'utilisateur plusieurs options de texte parmi lesquelles il peut slectionner un ou plusieurs lments. 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
58
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);
TextArea
La zone de texte est un dispositif d'entre de texte multi-lignes, multi-colonnes avec ventuellement la prsence ou non de scrollbars (barres de dfilement) horizontal et/ou vertical. 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
60
Texte par dfaut mis dans le TextArea Nombre de lignes Nombre de colonnes (en nbre de caractres)
AWT et Swing
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
61
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
62
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().
AWT et Swing
63
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
64
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
65
AWT et Swing
66
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
67
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 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
68
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
69
FileDialog
AWT et Swing
70
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...
AWT et Swing
71
La bibliothque Swing est une nouvelle bibliothque de composants graphiques pour Java.
Swing est intgr Java 1.2. 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
73
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
74
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
75
Un composant graphique lger (en anglais, lightweight GUI 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 76
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
77
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 java.
Ils portent des noms similaires leurs correspondants de AWT prcds d'un J.
JFrame, JPanel, JTextField, JButton, JCheckBox, JLabel, etc.
AWT et Swing
78
import java.awt.*; import javax.swing.*; public class MyApp extends JFrame { private JMenuBar barreMenus ; private JMenu couleur, dimensions ; private JMenuItem rouge, vert, hauteur, largeur ; public MyApp () { super("Une fenetre avec un menu") ; setSize(300, 200) ; //cration d'une barre de menu barreMenus = new JMenuBar() ; setJMenuBar(barreMenus) ; //ajout de la barre de menu dans la fentre //cration d'un menu Couleur et de ses options //Rouge etVert couleur = new JMenu("Couleur") ; barreMenus.add(couleur) ; rouge = new JMenuItem("Rouge") ; couleur.add(rouge) ; couleur.addSeparator() ; ;
//ajout d'une barre sparatrice avant l'option //suivante vert = new JMenuItem("Vert") ; couleur.add(vert) ; //cration d'un menu Dimensions et de ses //optionsHauteur et Largeur dimensions = new JMenu("Dimensions") ; barreMenus.add(dimensions) ; hauteur = new JMenuItem("Hauteur") ; dimensions.add(hauteur) ; dimensions.addSeparator() ; largeur = new JMenuItem("Largeur") ; dimensions.add(largeur) ; } public static void main(String args[]) { JFrame fen = new MyApp() ; fen.setVisible(true) ; } }
AWT et Swing
79
AWT et Swing
80
AWT et Swing
81
AWT et Swing
82
AWT et Swing
83
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
84
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
85
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 86
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 }
87
Avec Swing JFrame monFrame = new JFrame ("Mon Frame"); JButton monBouton = new JButton ("Mon Bouton"); Container panneauContenu = monFrame.getContentPane(); panneauContenu.add(monBouton);
AWT et Swing 88
AWT et Swing
89
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
90
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
91
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
92
AWT et Swing
93
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
94
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.
AWT et Swing
95
Donc le code indiquant ce quil faut peindre dans un composant doit tre place dans cette mthode (en la redfinissant)
AWT et Swing
98
AWT et Swing
99
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
10 0
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 public void public void public void repaint ( ) repaint (long tm) repaint (int x, int y, int width, int height) repaint (long tm, int x, int y, int width, int height)
AWT et Swing
10 1
AWT et Swing
10 2
AWT et Swing
10 3
AWT et Swing
10 4
AWT et Swing
10 5
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
10 6
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)
AWT et Swing
10 7
AWT et Swing
10 8
Classe Frame : MyFrameAWT Autres Classes pour la gestion des vnement MyActionListener
10 9
AWT et Swing
AWT et Swing
110