0% ont trouvé ce document utile (0 vote)
43 vues82 pages

5 Swing 1

Ce document présente un cours avancé sur le développement d'interfaces graphiques avec Swing en Java, couvrant les objectifs spécifiques et le plan du cours. Il explique les composants de Swing, leur hiérarchie, et les packages associés, ainsi que des exemples pratiques de création de fenêtres et de gestion d'événements. Le cours met en avant l'utilisation de JFrame et des composants Swing pour construire des interfaces graphiques modernes.

Transféré par

jdsfrbxrvg
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
43 vues82 pages

5 Swing 1

Ce document présente un cours avancé sur le développement d'interfaces graphiques avec Swing en Java, couvrant les objectifs spécifiques et le plan du cours. Il explique les composants de Swing, leur hiérarchie, et les packages associés, ainsi que des exemples pratiques de création de fenêtres et de gestion d'événements. Le cours met en avant l'utilisation de JFrame et des composants Swing pour construire des interfaces graphiques modernes.

Transféré par

jdsfrbxrvg
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Développement d’interfaces graphiques avec Swing

Cours Java avancé

Cours Java avancé Développement d’interfaces graphiques avec Swing 1 / 82


Objectifs spécifiques

À la fin de ce chapitre, l’étudiant sera capable de :


Vue d’ensemble du framework Swing.
Compréhension des packages nécessaires à l’utilisation de Swing.
Création d’une fenêtre autonome avec Swing.
Exploration des composants principaux de Swing
Utilisation des boutons et gestion des événements associés..
Utilisation de JTextField, JTextArea, etc., pour la saisie de texte.
Mise en œuvre des onglets avec JTabbedPane pour organiser
l’interface.

Cours Java avancé Développement d’interfaces graphiques avec Swing 2 / 82


Plan du cours

1 Introduction à Swing
2 La présentation de Swing
3 Les packages Swing
4 Un exemple de fenêtre autonome
5 Les composants Swing
6 Les boutons
7 Les composants de saisie de texte
8 Les onglets
9 Conclusion

Cours Java avancé Développement d’interfaces graphiques avec Swing 3 / 82


Introduction à Swing

Swing fait partie de la bibliothèque Java Foundation Classes (JFC). C’est


une API dont le but est similaire à celui de l’API AWT mais dont les
modes de fonctionnement et d’utilisation sont complètement différents.
Swing a été intégré au JDK depuis sa version 1.2. Cette bibliothèque
existe séparément. pour le JDK 1.1.
La bibliothèque JFC contient :
Fl’API Swing : de nouvelles classes et interfaces pour construire des
interfaces graphiques
Accessibility API :
2D API : support du graphisme en 2D
API pour l’impression et le cliquer/glisser

Cours Java avancé Développement d’interfaces graphiques avec Swing 4 / 82


La présentation de Swing

Swing propose de nombreux composants dont certains possèdent des


fonctions étendues, une utilisation des mécanismes de gestion
d’événements performants (ceux introduits par le JDK 1.1) et une
apparence modifiable à la volée (une interface graphique qui emploie le
style du système d’exploitation Windows ou Motif ou un nouveau style
spécifique à Java nommé Metal).
Tous les éléments de Swing font partie d’un package qui a changé plusieurs
fois de nom : le nom du package dépend de la version du J.D.K. utilisée :
com.sun.java.swing : jusqu’à la version 1.1 beta 2 de Swing, de la
version 1.1 des JFC et de la version 1.2 beta 4 du J.D.K.
java.awt.swing : utilisé par le J.D.K. 1.2 beta 2 et 3
javax.swing : à partir des versions de Swing 1.1 beta 3 et J.D.K. 1.2
RC1

Cours Java avancé Développement d’interfaces graphiques avec Swing 5 / 82


La présentation de Swing

Les composants Swing forment un nouvelle hiérarchie parallèle à celle de


l’AWT. L’ancêtre de cette hiérarchie est le composant JComponent.
Presque tous ses composants sont écrits en pur Java : ils ne possèdent
aucune partie native sauf ceux qui assurent l’interface avec le système
d’exploitation : JApplet, JDialog, JFrame, et JWindow. Cela permet
aux composants de toujours avoir la même apparence quelque soit le
système sur lequel l’application s’exécute.
Tous les composants Swing possèdent les caractéristiques suivantes :
ce sont des beans
ce sont des composants légers (pas de partie native) hormis quelques
exceptions.
leurs bords peuvent être changés

Cours Java avancé Développement d’interfaces graphiques avec Swing 6 / 82


La présentation de Swing

La procédure à suivre pour utiliser un composant Swing est identique


à celle des composants de la bibliothèque AWT : créer le composant
en appelant son constructeur, appeler les méthodes du composant si
nécessaire pour le personnaliser et l’ajouter dans un conteneur.
Swing utilise la même infrastructure de classes qu’AWT, ce qui permet
de mélanger des composants Swing et AWT dans la même interface.
Il est toutefois recommandé d’éviter de les utiliser simultanément car
certains peuvent ne pas être restitués correctement.
Les composants Swing utilisent des modèles pour contenir leurs états
ou leurs données. Ces modèles sont des classes particulières qui
possèdent toutes un comportement par défaut.

Cours Java avancé Développement d’interfaces graphiques avec Swing 7 / 82


Les packages Swing

Swing contient plusieurs packages :


Package Description
javax.swing Package principal : il contient les interfaces, les principaux composants, les
modèles par défaut.
javax.swing.border Classes représentant les bordures.
javax.swing.colorchooser Classes définissant un composant pour la sélection de couleurs.
javax.swing.event Classes et interfaces pour les événements spécifiques à Swing. Les autres
événements sont ceux d’AWT (java.awt.event).
javax.swing.filechooser Classes définissant un composant pour la sélection de fichiers.
javax.swing.plaf Classes et interfaces génériques pour gérer l’apparence.
javax.swing.plaf.basic Classes et interfaces de base pour gérer l’apparence.
javax.swing.plaf.metal Classes et interfaces pour définir l’apparence Metal qui est l’apparence par
défaut.
javax.swing.table Classes définissant un composant pour la présentation de données sous forme
de tableau.
javax.swing.text Classes et interfaces de base pour les composants manipulant du texte.
javax.swing.text.html Classes permettant le support du format HTML.
javax.swing.text.html.parser Classes permettant d’analyser des données au format HTML.
javax.swing.text.rtf Classes permettant le support du format RTF.
javax.swing.tree Classes définissant un composant pour la présentation de données sous forme
d’arbre.
javax.swing.undo Classes permettant d’implémenter les fonctions annuler/refaire.

Cours Java avancé Développement d’interfaces graphiques avec Swing 8 / 82


Un exemple de fenêtre autonome

La classe de base d’une application est la classe JFrame. Son rôle est
équivalent à la classe Frame de l’AWT et elle s’utilise de la même façon.

Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3
4 p u b l i c c l a s s s w i n g 1 e x t e n d s JFrame {
5
6 p u b l i c swing1 () {
7 s u p e r ( ” t i t r e de l ’ a p p l i c a t i o n ” ) ;
8
9 W i n d o w L i s t e n e r l = new WindowAdapter ( ) {
10 p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ){
11 System . e x i t ( 0 ) ;
12 }
13 };
14
15 addWindowListener ( l ) ;
16 setSize (200 ,100);
17 s e t V i s i b l e ( true ) ;
18 }
19
20 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ){
21 JFrame f r a m e = new s w i n g 1 ( ) ;
22 }
23 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 9 / 82
Les composants Swing

l existe des composants Swing équivalents pour chacun des composants


AWT avec des constructeurs semblables. De nombreux constructeurs
acceptent comme argument un objet de type Icon, qui représente une
petite image généralement stockée au format Gif.
Le constructeur d’un objet Icon admet comme seul paramètre le nom ou
l’URL d’un fichier graphique

Cours Java avancé Développement d’interfaces graphiques avec Swing 10 / 82


Les composants Swing
Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3 p u b l i c c l a s s s w i n g 3 e x t e n d s JFrame {
4
5 p u b l i c swing3 () {
6 s u p e r ( ” t i t r e de l ’ a p p l i c a t i o n ” ) ;
7
8 W i n d o w L i s t e n e r l = new WindowAdapter ( ) {
9 p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ){
10 System . e x i t ( 0 ) ;
11 }
12 };
13
14 addWindowListener ( l ) ;
15
16 I m a g e I c o n img = new I m a g e I c o n ( ” t i p s . g i f ” ) ;
17 J B u t t o n b o u t o n = new J B u t t o n ( ”Mon b o u t o n ” , img ) ;
18
19 J P a n e l panneau = new J P a n e l ( ) ;
20 panneau . add ( b o u t o n ) ;
21 s e t C o n t e n t P a n e ( panneau ) ;
22 setSize (200 ,100);
23 s e t V i s i b l e ( true ) ;
24 }
25
26 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ){
27 JFrame f r a m e = new s w i n g 3 ( ) ;
28 }
29 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 11 / 82
La classe JFrame

Frame est l’équivalent de la classe Frame de l’AWT : les principales


différences sont l’utilisation du double buffering qui améliore les
rafraichissements et l’utilisation d’un panneau de contenu (contentPane)
pour insérer des composants (ils ne sont plus insérés sans le JFrame mais
dans l’objet contentPane qui lui est associé). Elle représente une fenêtre
principale qui possède un titre, une taille modifiable et éventuellement un
menu.
La classe possède plusieurs constructeurs :

Constructeur Rôle
JFrame() Création d’une instance de fenêtre sans titre.
JFrame(String) Création d’une instance en précisant le titre.

Cours Java avancé Développement d’interfaces graphiques avec Swing 12 / 82


La classe JFrame

Par défaut, la fenêtre créée n’est pas visible. La méthode setVisible()


permet de l’afficher.

Code
1 import j a va x . swing . ∗ ;
2
3 p u b l i c c l a s s Te st JF ra me 1 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
7 f . setSize (300 ,100);
8 f . s e t V i s i b l e ( true ) ;
9 }
10 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 13 / 82


La classe JFrame

La gestion des événements est identique à celle utilisée dans l’AWT depuis
le J.D.K. 1.1.

Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3 p u b l i c c l a s s s w i n g 2 e x t e n d s JFrame {
4 p u b l i c swing2 () {
5 s u p e r ( ” t i t r e de l ’ a p p l i c a t i o n ” ) ;
6
7 W i n d o w L i s t e n e r l = new WindowAdapter ( ) {
8 p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ){
9 System . e x i t ( 0 ) ;
10 }
11 };
12 addWindowListener ( l ) ;
13 J B u t t o n b o u t o n = new J B u t t o n ( ”Mon b o u t o n ” ) ;
14 J P a n e l panneau = new J P a n e l ( ) ;
15 panneau . add ( b o u t o n ) ;
16 s e t C o n t e n t P a n e ( panneau ) ;
17 setSize (200 ,100);
18 s e t V i s i b l e ( true ) ;
19 }
20 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ){
21 JFrame f r a m e = new s w i n g 2 ( ) ;
22 }
23 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 14 / 82
La classe JFrame

Tous les composants associés à un objet JFrame sont gérés par un objet
de la classe JRootPane. Un objet JRootPane contient plusieurs Panes.
Tous les composants ajoutés au JFame doivent être ajoutés à un des Pane
du JRootPane et non au JFrame directement. C’est aussi à un de ces
Panes qu’il faut associer un layout manager si nécessaire.

Cours Java avancé Développement d’interfaces graphiques avec Swing 15 / 82


La classe JFrame

Le Pane le plus utilisé est le ContentPane. Le Layout manager par défaut


du contentPane est BorderLayout. Il est possible de le changer :

1 ...
2 f . g e t C o n t e n t P a n e ( ) . s e t L a y o u t ( new F l o w L a y o u t ( ) ) ;
3 ...

1 import j a va x . swing . ∗ ;
2
3 p u b l i c c l a s s TestJFrame2 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . setSize (300 ,100);
9 J B u t t o n b =new J B u t t o n ( ”Mon b o u t o n ” ) ;
10 f . g e t C o n t e n t P a n e ( ) . add ( b ) ;
11 f . s e t V i s i b l e ( true ) ;
12 }
13 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 16 / 82


La classe JFrame

Le JRootPane se compose de plusieurs éléments :


glassPane : un JPanel par défaut layeredPane qui se compose du
contentPane (un JPanel par défaut) et du menuBar (un objet de type
JMenuBar) Le glassPane est un JPanel transparent qui se situe au-dessus
du layeredPane. Le glassPane peut être n’importe quel composant : pour
le modifier il faut utiliser la méthode setGlassPane() en fournissant le
composant en paramètre.
Le layeredPane regroupe le contentPane et le menuBar.
Le contentPane est par défaut un JPanel opaque dont le gestionnaire de
présentation est un BorderLayout. Ce panel peut être remplacé par
n’importe quel composant grâce à la méthode setContentPane().

Attention
Attention : il ne faut pas utiliser directement la méthode setLayout() d’un
objet JFrame sinon une exception est levée.

Cours Java avancé Développement d’interfaces graphiques avec Swing 17 / 82


La classe JFrame

Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . ∗ ;
3
4 p u b l i c c l a s s TestJFrame7 {
5
6 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
7
8 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
9 f . s e t L a y o u t ( new F l o w L a y o u t ( ) ) ;
10 f . setSize (300 ,100);
11 f . s e t V i s i b l e ( true ) ;
12 }
13 }

Resultats
1 C: \ s w i n g \code>j a v a Tes tJFrame7
2 E x c e p t i o n i n t h r e a d ” main ” j a v a . l a n g . E r r o r : Do n o t u s e j a v a x . s w i n g . JFrame . s e t L a y
3 o u t ( ) u s e j a v a x . s w i n g . JFrame . g e t C o n t e n t P a n e ( ) . s e t L a y o u t ( ) i n s t e a d
4 a t j a v a x . s w i n g . JFrame . c r e a t e R o o t P a n e E x c e p t i o n ( Unknown S o u r c e )
5 a t j a v a x . s w i n g . JFrame . s e t L a y o u t ( Unknown S o u r c e )
6 a t T estJFrame7 . main ( TestJFrame7 . j a v a : 8 )

Cours Java avancé Développement d’interfaces graphiques avec Swing 18 / 82


La classe JFrame

Le menuBar permet d’attacher un menu à la JFrame. Par défaut, le


menuBar est vide. La méthode setJMenuBar() permet d’affecter un menu
à la JFrame.

Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . ∗ ;
3
4 p u b l i c c l a s s TestJFrame6 {
5
6 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
7
8 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
9 f . setSize (300 ,100);
10 J B u t t o n b =new J B u t t o n ( ”Mon b o u t o n ” ) ;
11 f . g e t C o n t e n t P a n e ( ) . add ( b ) ;
12
13 JMenuBar menuBar = new JMenuBar ( ) ;
14 f . setJMenuBar ( menuBar ) ;
15
16 JMenu menu = new JMenu ( ” F i c h i e r ” ) ;
17 menu . add ( menuItem ) ;
18 menuBar . add ( menu ) ;
19
20 f . s e t V i s i b l e ( true ) ;
21 }
22 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 19 / 82
Le comportement par défaut à la fermeture

Il est possible de préciser comment un objet JFrame, JInternalFrame, ou


JDialog réagit à sa fermeture grâce à la méthode
setDefaultCloseOperation(). Cette méthode attend en paramètre une
valeur qui peut être :

Constante Rôle
WindowConstants.DISPOSE ON CLOSE Détruit la fenêtre.
WindowConstants.DO NOTHING ON CLOSE Rend le bouton de fermeture
inactif.
WindowConstants.HIDE ON CLOSE Cache la fenêtre.

Cette méthode ne permet pas d’associer d’autres traitements. Dans ce cas,


il faut intercepter l’événement et lui associer les traitements.

Cours Java avancé Développement d’interfaces graphiques avec Swing 20 / 82


La classe JFrame

Code
1 import j a va x . swing . ∗ ;
2
3 p u b l i c c l a s s TestJFrame3 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . setSize (300 ,100);
9 J B u t t o n b =new J B u t t o n ( ”Mon b o u t o n ” ) ;
10 f . g e t C o n t e n t P a n e ( ) . add ( b ) ;
11
12 f . s e t D e f a u l t C l o s e O p e r a t i o n ( WindowConstants . DISPOSE ON CLOSE ) ;
13
14 f . s e t V i s i b l e ( true ) ;
15 }
16 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 21 / 82


La personnalisation de l’icône

La méthode setIconImage() permet de modifier l’icône de la JFrame.

Code
1 import j a va x . swing . ∗ ;
2
3 p u b l i c c l a s s TestJFrame4 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . setSize (300 ,100);
9 J B u t t o n b =new J B u t t o n ( ”Mon b o u t o n ” ) ;
10 f . g e t C o n t e n t P a n e ( ) . add ( b ) ;
11 f . s e t D e f a u l t C l o s e O p e r a t i o n ( WindowConstants . DISPOSE ON CLOSE ) ;
12
13 I m a g e I c o n image = new I m a g e I c o n ( ” book . g i f ” ) ;
14 f . s e t I c o n I m a g e ( image . g e t I m a g e ( ) ) ;
15 f . s e t V i s i b l e ( true ) ;
16
17 }
18 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 22 / 82


Centrer une JFrame à l’écran

Par défaut, une JFrame est affichée dans le coin supérieur gauche de
l’écran. Pour la centrer dans l’écran, il faut procéder comme pour une
Frame : déterminer la position de la Frame en fonction de sa dimension et
de celle de l’écran et utiliser la méthode setLocation() pour affecter cette
position.

Cours Java avancé Développement d’interfaces graphiques avec Swing 23 / 82


Centrer une JFrame à l’écran

Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . ∗ ;
3
4 p u b l i c c l a s s TestJFrame5 {
5
6 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
7
8 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
9 f . setSize (300 ,100);
10 J B u t t o n b =new J B u t t o n ( ”Mon b o u t o n ” ) ;
11 f . g e t C o n t e n t P a n e ( ) . add ( b ) ;
12
13 f . s e t D e f a u l t C l o s e O p e r a t i o n ( WindowConstants . DISPOSE ON CLOSE ) ;
14
15 D i m e n s i o n dim = T o o l k i t . g e t D e f a u l t T o o l k i t ( ) . g e t S c r e e n S i z e ( ) ;
16 f . s e t L o c a t i o n ( dim . w i d t h /2 − f . g e t W i d t h ( ) / 2 , dim . h e i g h t /2 − f . g e t H e i g h t ( ) / 2 ) ;
17
18 f . s e t V i s i b l e ( true ) ;
19 }
20 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 24 / 82


Les événements associées à un JFrame

La gestion des événements associés à un objet JFrame est identique à celle


utilisée pour un objet de type Frame de AWT.

Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3
4 p u b l i c c l a s s Tes tJFrame8 {
5
6 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
7
8 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
9 f . setSize (300 ,100);
10 f . s e t V i s i b l e ( true ) ;
11 f . a d d W i n d o w L i s t e n e r ( new WindowAdapter ( ) {
12 p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ) {
13 System . e x i t ( 0 ) ;
14 }
15 }
16 );
17
18 }
19 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 25 / 82


Les étiquettes : la classe JLabel

Le composant JLabel propose les mêmes fonctionnalités que les intitulés


AWT mais ils peuvent en plus contenir des icônes .
Cette classe possède plusieurs constructeurs :

Constructeurs Rôle
JLabel() Création d’une instance sans texte ni image.
JLabel(Icon) Création d’une instance en précisant
l’image.
JLabel(Icon, int) Création d’une instance en précisant l’image
et l’alignement horizontal.
JLabel(String) Création d’une instance en précisant le
texte.
JLabel(String, Création d’une instance en précisant le
Icon, int) texte, l’image et l’alignement horizontal.
JLabel(String, int) Création d’une instance en précisant le texte
et l’alignement horizontal.
Cours Java avancé Développement d’interfaces graphiques avec Swing 26 / 82
Les étiquettes : la classe JLabel

Le composant JLabel permet d’afficher un texte et/ou une icône en


précisant leur alignement. L’icône doit être au format GIF et peut être une
animation dans ce format.

1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . ∗ ;
3
4 public c l a s s TestJLabel1 {
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
7 f . setSize (100 ,200);
8
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10 J L a b e l j L a b e l 1 =new J L a b e l ( ”Mon t e x t e d a n s J L a b e l ” ) ;
11 p a n n e l . add ( j L a b e l 1 ) ;
12
13 I m a g e I c o n i c o n e = new I m a g e I c o n ( ” book . g i f ” ) ;
14 J L a b e l j L a b e l 2 =new J L a b e l ( i c o n e ) ;
15 p a n n e l . add ( j L a b e l 2 ) ;
16
17 J L a b e l j L a b e l 3 =new J L a b e l ( ”Mon t e x t e ” , i c o n e , S w i n g C o n s t a n t s . LEFT ) ;
18 p a n n e l . add ( j L a b e l 3 ) ;
19
20 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
21 f . s e t V i s i b l e ( true ) ;
22 }
23 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 27 / 82
Les étiquettes : la classe JLabel
La classe JLabel définit plusieurs méthodes pour modifier l’apparence du composant :

Méthodes Rôle
setText() Permet d’initialiser ou de modifier le texte affiché.
setOpaque() Indique si le composant est transparent (paramètre
false) ou opaque (true).
setBackground() Indique la couleur de fond du composant (setOpaque doit
être à true).
setFont() Permet de préciser la police du texte.
setForeGround() Permet de préciser la couleur du texte.
setHorizontalAlignment() Permet de modifier l’alignement horizontal du texte et
de l’icône.
setVerticalAlignment() Permet de modifier l’alignement vertical du texte et de
l’icône.
setHorizontalTextAlignment() Permet de modifier l’alignement horizontal du texte uni-
quement.
setVerticalTextAlignment() Permet de modifier l’alignement vertical du texte unique-
ment.
setIcon() Permet d’assigner une icône.
setDisabledIcon() Permet de définir l’icône associée au JLabel lorsqu’il est
désactivé.

Cours Java avancé Développement d’interfaces graphiques avec Swing 28 / 82


Les étiquettes : la classe JLabel

L’alignement vertical par défaut d’un JLabel est centré. L’alignement


horizontal par défaut est soit à droite s’il ne contient que du texte, soit
centré s’il contient une image avec ou sans texte. Pour modifier cet
alignement, il suffit d’utiliser les méthodes ci-dessus en utilisant des
constantes en paramètres : SwingConstants.LEFT,
SwingConstants.CENTER, SwingConstants.RIGHT, SwingConstants.TOP,
SwingConstants.BOTTOM
Par défaut, un JLabel est transparent : son fond n’est pas dessiné. Pour le
dessiner, il faut utiliser la méthode setOpaque() :

Cours Java avancé Développement d’interfaces graphiques avec Swing 29 / 82


Les étiquettes : la classe JLabel

Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . ∗ ;
3
4 public c l a s s TestJLabel2 {
5
6 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
7
8 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
9
10 f . setSize (100 ,200);
11 J P a n e l p a n n e l = new J P a n e l ( ) ;
12
13 J L a b e l j L a b e l 1 =new J L a b e l ( ”Mon t e x t e d a n s J L a b e l 1 ” ) ;
14 jLabel1 . setBackground ( Color . red ) ;
15 p a n n e l . add ( j L a b e l 1 ) ;
16
17 J L a b e l j L a b e l 2 =new J L a b e l ( ”Mon t e x t e d a n s J L a b e l 2 ” ) ;
18 jLabel2 . setBackground ( Color . red ) ;
19 j L a b e l 2 . setOpaque ( t r u e ) ;
20 p a n n e l . add ( j L a b e l 2 ) ;
21
22 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
23 f . s e t V i s i b l e ( true ) ;
24 }
25 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 30 / 82


Les étiquettes : la classe JLabel

Dans l’exemple, les 2 JLabel ont le fond rouge demandé par la méthode
setBackground(). Seul le deuxième affiche un fond rouge car il est rendu
opaque avec la méthode setOpaque().
Il est possible d’associer un raccourci clavier au JLabel qui permet de
donner le focus à un autre composant. La méthode
setDisplayedMnemonic() permet de définir le raccourci clavier. Celui-ci
sera activé en utilisant la touche Alt avec le caractère fourni en paramètre.
La méthode setLabelFor() permet d’associer le composant fourni en
paramètre au raccourci.

Cours Java avancé Développement d’interfaces graphiques avec Swing 31 / 82


Les étiquettes : la classe JLabel
Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . ∗ ;
3
4 public c l a s s TestJLabel3 {
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . setSize (300 ,100);
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10 J B u t t o n b o u t o n = new J B u t t o n ( ” s a i s i r ” ) ;
11 p a n n e l . add ( b o u t o n ) ;
12 J T e x t F i e l d j E d i t = new J T e x t F i e l d ( ” v o t r e nom” ) ;
13 J L a b e l j L a b e l 1 =new J L a b e l ( ”Nom : ” ) ;
14 jLabel1 . setBackground ( Color . red ) ;
15 jLabel1 . setDisplayedMnemonic ( ’n ’ ) ;
16 jLabel1 . setLabelFor ( jEdit );
17 p a n n e l . add ( j L a b e l 1 ) ;
18 p a n n e l . add ( j E d i t ) ;
19 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
20 f . s e t V i s i b l e ( true ) ;
21 }
22 }

Dans l’exemple, à l’ouverture de la fenêtre, le focus est sur le bouton. Un appui sur Alt+’n’
donne le focus au champ de saisie.
Cours Java avancé Développement d’interfaces graphiques avec Swing 32 / 82
Les panneaux : la classe JPanel

La classe JPanel est un conteneur utilisé pour regrouper et organiser des


composants grâce à un gestionnaire de présentation (layout manager). Le
gestionnaire par défaut d’un JPanel est un objet de la classe FlowLayout.

Cours Java avancé Développement d’interfaces graphiques avec Swing 33 / 82


Les boutons
I
l existe plusieurs boutons définis par Swing.

Cours Java avancé Développement d’interfaces graphiques avec Swing 34 / 82


La classe AbstractButton

C’est une classe abstraite dont héritent les boutons Swing JButton,
JMenuItem et JToggleButton.
Cette classe définit de nombreuses méthodes dont les principales sont :

Cours Java avancé Développement d’interfaces graphiques avec Swing 35 / 82


La classe AbstractButton

Méthode Rôle
addActionListener Associer un écouteur sur un événement de type ActionEvent.
addChangeListener Associer un écouteur sur un événement de type ChangeEvent.
addItemListener Associer un écouteur sur un événement de type ItemEvent.
doClick() Déclencher un clic par programmation.
getText() Obtenir le texte affiché par le composant.
setDisabledIcon() Associer une icône affichée lorsque le composant a l’état
désélectionné.
setDisabledSelectedIcon() Associer une icône affichée lors du passage de la souris sur le
composant à l’état désélectionné.
setEnabled() Activer/désactiver le composant.
setMnemonic() Associer un raccourci clavier.
setPressedIcon() Associer une icône affichée lorsque le composant est cliqué.
setRolloverIcon() Associer une icône affichée lors du passage de la souris sur le
composant.
setRolloverSelectedIcon() Associer une icône affichée lors du passage de la souris sur le
composant à l’état sélectionné.
setSelectedIcon() Associer une icône affichée lorsque le composant a l’état
sélectionné.
setText() Mettre à jour le texte du composant.
isSelected() Indiquer si le composant est dans l’état sélectionné.
setSelected() Définir l’état du composant (sélectionné ou non selon la va-
leur fournie en paramètre).
Cours Java avancé Développement d’interfaces graphiques avec Swing 36 / 82
La classe AbstractButton

Tous les boutons peuvent afficher du texte et/ou une image.


Il est possible de préciser une image différente lors du passage de la souris
sur le composant et lors de l’enfoncement du bouton : dans ce cas, il faut
créer trois images pour chacun des états (normal, enfoncé et survolé).
L’image normale est associée au bouton grâce au constructeur, l’image
enfoncée grâce à la méthode setPressedIcon() et l’image lors d’un survol
grâce à la méthode setRolloverIcon(). Il suffit enfin d’appeler la méthode
setRolloverEnable() avec en paramètre la valeur true.

Cours Java avancé Développement d’interfaces graphiques avec Swing 37 / 82


La classe AbstractButton
Code
1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3 p u b l i c c l a s s s w i n g 4 e x t e n d s JFrame {
4 p u b l i c swing4 () {
5 s u p e r ( ” t i t r e de l ’ a p p l i c a t i o n ” ) ;
6 W i n d o w L i s t e n e r l = new WindowAdapter ( ) {
7 p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ){
8 System . e x i t ( 0 ) ;
9 }
10 };
11 addWindowListener ( l ) ;
12 I m a g e I c o n i m a g e N o r m a l e = new I m a g e I c o n ( ” a r r o w . g i f ” ) ;
13 I m a g e I c o n i m a g e P a s s a g e = new I m a g e I c o n ( ” a r r o w r . g i f ” ) ;
14 I m a g e I c o n i m a g e E n f o n c e e = new I m a g e I c o n ( ” a r r o w y . g i f ” ) ;
15 J B u t t o n b o u t o n = new J B u t t o n ( ”Mon b o u t o n ” , i m a g e N o r m a l e ) ;
16 bouton . s e t P r e s s e d I c o n ( imageEnfoncee ) ;
17 bouton . s e t R o l l o v e r I c o n ( imagePassage ) ;
18 bouton . s e t R o l l o v e r E n a b l e d ( t r u e ) ;
19 g e t C o n t e n t P a n e ( ) . add ( bouton , ” C e n t e r ” ) ;
20 J P a n e l panneau = new J P a n e l ( ) ;
21 panneau . add ( b o u t o n ) ;
22 s e t C o n t e n t P a n e ( panneau ) ;
23 setSize (200 ,100);
24 s e t V i s i b l e ( true ) ;
25 }
26 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ){
27 JFrame f r a m e = new s w i n g 4 ( ) ;
28 }
29 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 38 / 82
Frame Title
Un bouton peut recevoir des événements de type ActionEvents (le bouton a été activé),
ChangeEvents, et ItemEvents.

Fermeture de l’application lors de l’activation du bouton


1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3 p u b l i c c l a s s TestJButton3 {
4 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
5 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
6 f . setSize (300 ,100);
7 J P a n e l p a n n e l = new J P a n e l ( ) ;
8 J B u t t o n b o u t o n 1 = new J B u t t o n ( ” Bouton1 ” ) ;
9 b o u t o n 1 . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r ( ) {
10 public void actionPerformed ( ActionEvent e ) {
11 System . e x i t ( 0 ) ;
12 }
13 }
14 );
15 p a n n e l . add ( b o u t o n 1 ) ;
16 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
17 f . s e t V i s i b l e ( true ) ;
18 }
19 }

Pour de plus amples informations sur la gestion des événements, voir le chapitre correspondant.
Cours Java avancé Développement d’interfaces graphiques avec Swing 39 / 82
La classe JButton

JButton est un composant qui représente un bouton : il peut contenir un


texte et/ou une icône.
Les constructeurs sont :
Constructeur Rôle
JButton() Créer un bouton sans texte ni icône.
JButton(String) Créer un bouton en précisant le texte du
bouton.
JButton(Icon) Créer un bouton en précisant une icône.
JButton(String, Créer un bouton en précisant un texte et une
Icon) icône.

Cours Java avancé Développement d’interfaces graphiques avec Swing 40 / 82


La classe JButton

Il ne gère pas d’état. Toutes les indications concernant le contenu du


composant JLabel sont valables pour le composant JButton.

un bouton avec une image


1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3 p u b l i c c l a s s s w i n g 3 e x t e n d s JFrame {
4 p u b l i c swing3 () {
5 s u p e r ( ” t i t r e de l ’ a p p l i c a t i o n ” ) ;
6 W i n d o w L i s t e n e r l = new WindowAdapter ( ) {
7 p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ){
8 System . e x i t ( 0 ) ;
9 }
10 };
11 addWindowListener ( l ) ;
12 I m a g e I c o n img = new I m a g e I c o n ( ” t i p s . g i f ” ) ;
13 J B u t t o n b o u t o n = new J B u t t o n ( ”Mon b o u t o n ” , img ) ;
14 J P a n e l panneau = new J P a n e l ( ) ;
15 panneau . add ( b o u t o n ) ;
16 s e t C o n t e n t P a n e ( panneau ) ;
17 setSize (200 ,100);
18 s e t V i s i b l e ( true ) ;
19 }
20 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ){
21 JFrame f r a m e = new s w i n g 3 ( ) ;
22 }
23 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 41 / 82
La classe JButton

L’image gif peut être une animation.


Dans un conteneur de type JRootPane, il est possible de définir un bouton par défaut grâce à sa
méthode setDefaultButton().

définition d’un bouton par défaut dans un JFrame


1 import j a va x . swing . ∗ ;
2 i m p o r t j a v a . awt . ∗ ;
3 p u b l i c c l a s s TestJButton2 {
4 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
5 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
6 f . setSize (300 ,100);
7 J P a n e l p a n n e l = new J P a n e l ( ) ;
8 J B u t t o n b o u t o n 1 = new J B u t t o n ( ” Bouton 1 ” ) ;
9 p a n n e l . add ( b o u t o n 1 ) ;
10 J B u t t o n b o u t o n 2 = new J B u t t o n ( ” Bouton 2 ” ) ;
11 p a n n e l . add ( b o u t o n 2 ) ;
12 J B u t t o n b o u t o n 3 = new J B u t t o n ( ” Bouton 3 ” ) ;
13 p a n n e l . add ( b o u t o n 3 ) ;
14 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
15 f . getRootPane ( ) . s e t D e f a u l t B u t t o n ( bouton3 ) ;
16 f . s e t V i s i b l e ( true ) ;
17 }
18 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 42 / 82


La classe JButton

Le bouton par défaut est activé par un appui sur la touche Entrée alors
que le bouton actif est activé par un appui sur la barre d’espace.
La méthode isDefaultButton() de JButton permet de savoir si le
composant est le bouton par défaut.

Cours Java avancé Développement d’interfaces graphiques avec Swing 43 / 82


La classe JToggleButton

ette classe définit un bouton à deux états : c’est la classe mère des
composants JCheckBox et JRadioButton.
La méthode setSelected() héritée de AbstractButton permet de mettre à
jour l’état du bouton. La méthode isSelected() permet de connaı̂tre cet
état.

Cours Java avancé Développement d’interfaces graphiques avec Swing 44 / 82


La classe ButtonGroup
La classe ButtonGroup permet de gérer un ensemble de boutons en garantissant qu’un seul
bouton du groupe sera sélectionné.
Pour utiliser la classe ButtonGroup, il suffit d’instancier un objet et d’ajouter des boutons
(objets héritant de la classe AbstractButton) grâce à la méthode add(). Il est préférable
d’utiliser des objets de la classe JToggleButton ou d’une de ses classes filles car elles sont
capables de gérer leurs états.

1 import j a va x . swing . ∗ ;
2 p u b l i c c l a s s TestGroupButton1 {
3 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
4 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
5 f . setSize (300 ,100);
6 J P a n e l p a n n e l = new J P a n e l ( ) ;
7 B u t t o n G r o up g r o u p e = new B u tt o nG r o up ( ) ;
8 J R a d i o B u t t o n b o u t o n 1 = new J R a d i o B u t t o n ( ” Bouton 1 ” ) ;
9 g r o u p e . add ( b o u t o n 1 ) ;
10 p a n n e l . add ( b o u t o n 1 ) ;
11 J R a d i o B u t t o n b o u t o n 2 = new J R a d i o B u t t o n ( ” Bouton 2 ” ) ;
12 g r o u p e . add ( b o u t o n 2 ) ;
13 p a n n e l . add ( b o u t o n 2 ) ;
14 J R a d i o B u t t o n b o u t o n 3 = new J R a d i o B u t t o n ( ” Bouton 3 ” ) ;
15 g r o u p e . add ( b o u t o n 3 ) ;
16 p a n n e l . add ( b o u t o n 3 ) ;
17 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
18 f . s e t V i s i b l e ( true ) ;
19 }
20 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 45 / 82


Les cases à cocher : la classe JCheckBox

Les constructeurs sont les suivants :

Constructeur Rôle
JCheckBox(String) Précise l’intitulé de la case à cocher.
JCheckBox(String, boolean) Précise l’intitulé et l’état (sélectionné ou non).
JCheckBox(Icon) Spécifie l’icône utilisée.
JCheckBox(Icon, boolean) Spécifie l’icône et l’état du bouton.
JCheckBox(String, Icon) Précise l’intitulé et l’icône.
JCheckBox(String, Icon, boolean) Précise l’intitulé, l’icône et l’état.

Un groupe de cases à cocher peut être défini avec la classe ButtonGroup. Dans ce cas, un seul
composant du groupe peut être sélectionné. Pour l’utiliser, il faut créer un objet de la classe
ButtonGroup et utiliser la méthode add() pour ajouter un composant au groupe.

Cours Java avancé Développement d’interfaces graphiques avec Swing 46 / 82


Les cases à cocher : la classe JCheckBox

Code
1 import j a va x . swing . ∗ ;
2
3 p u b l i c c l a s s TestJCheckBox1 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . setSize (300 ,100);
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10
11 JCheckBox b o u t o n 1 = new JCheckBox ( ” Bouton 1 ” ) ;
12 p a n n e l . add ( b o u t o n 1 ) ;
13 JCheckBox b o u t o n 2 = new JCheckBox ( ” Bouton 2 ” ) ;
14 p a n n e l . add ( b o u t o n 2 ) ;
15 JCheckBox b o u t o n 3 = new JCheckBox ( ” Bouton 3 ” ) ;
16 p a n n e l . add ( b o u t o n 3 ) ;
17
18 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
19 f . s e t V i s i b l e ( true ) ;
20 }
21 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 47 / 82


Les boutons radio : la classe JRadioButton

Un objet de type JRadioButton représente un bouton radio d’un groupe de


boutons . A un instant donné, un seul des boutons radio associés à un
même groupe peut être sélectionné. La classe JRadioButton hérite de la
classe AbstractButton.
Un bouton radio possède un libellé et éventuellement une icône qui peut
être précisée, pour chacun des états du bouton, en utilisant les méthodes
setIcon(), setSelectedIcon() et setPressedIcon().

Cours Java avancé Développement d’interfaces graphiques avec Swing 48 / 82


Les boutons radio : la classe JRadioButton

Code
1 import j a va x . swing . ∗ ;
2
3 p u b l i c c l a s s TestJRadioButton1 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . setSize (300 ,100);
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10 J R a d i o B u t t o n b o u t o n 1 = new J R a d i o B u t t o n ( ” Bouton 1 ” ) ;
11 p a n n e l . add ( b o u t o n 1 ) ;
12 J R a d i o B u t t o n b o u t o n 2 = new J R a d i o B u t t o n ( ” Bouton 2 ” ) ;
13 p a n n e l . add ( b o u t o n 2 ) ;
14 J R a d i o B u t t o n b o u t o n 3 = new J R a d i o B u t t o n ( ” Bouton 3 ” ) ;
15 p a n n e l . add ( b o u t o n 3 ) ;
16
17 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
18 f . s e t V i s i b l e ( true ) ;
19 }
20 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 49 / 82


Les boutons radio : la classe JRadioButton

La méthode isSelected() permet de savoir si le bouton est sélectionné ou non.


La classe JRadioButton possède plusieurs constructeurs :

Constructeur Rôle
JRadioButton() Créer un bouton non sélectionné sans libellé.
JRadioButton(Icon) Créer un bouton non sélectionné sans libellé avec
l’icône fournie en paramètre.
JRadioButton(Icon, Créer un bouton sans libellé avec l’icône et l’état
boolean) fournis en paramètres.
JRadioButton(String) Créer un bouton non sélectionné avec le libellé
fourni en paramètre.
JRadioButton(String, Créer un bouton avec le libellé et l’état fournis
boolean) en paramètres.
JRadioButton(String, Icon) Créer un bouton non sélectionné avec le libellé
et l’icône fournis en paramètres.
JRadioButton(String, Icon, Créer un bouton avec le libellé, l’icône et l’état
boolean) fournis en paramètres.

Un groupe de boutons radio est encapsulé dans un objet de type ButtonGroup.

Cours Java avancé Développement d’interfaces graphiques avec Swing 50 / 82


Les boutons radio : la classe JRadioButton

Il faut ajouter tous les JRadioButton du groupe en utilisant la méthode


add() de la classe ButtonGroup. Lors de la sélection d’un bouton, c’est
l’objet de type ButtonGroup qui se charge de déselectionner le bouton
précédemment sélectionné dans le groupe.
Un groupe n’a pas l’obligation d’avoir un bouton sélectionné

Code
1 import j a v a . awt . B o r d e r L a y o u t ;
2 import j a v a . awt . C o n t a i n e r ;
3 import j a v a . awt . G r i d L a y o u t ;
4 import javax . swing . BorderFactory ;
5 import j a v a x . s w i n g . Bu t to n G ro u p ;
6 import j a v a x . s w i n g . JFrame ;
7 import javax . swing . JPanel ;
8 import j a va x . swing . JRadioButton ;
9 import javax . swing . border . Border ;
10
11 p u b l i c c l a s s T e s t J R a d i o B u t t o n e x t e n d s JFrame {
12 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
13 T e s t J R a d i o B u t t o n app = new T e s t J R a d i o B u t t o n ( ) ;
14 app . i n i t ( ) ;
15 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 51 / 82


Les boutons radio : la classe JRadioButton

Code suite...
1 public void i n i t () {
2 t h i s . s e t T i t l e ( ” Test r a d i o boutons ” ) ;
3
4 t h i s . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE ) ;
5 J P a n e l p a n e l = new J P a n e l ( new G r i d L a y o u t ( 0 , 1 ) ) ;
6 Border border = BorderFactory . c r e a t e T i t l e d B o r d e r ( ” S l e c t i o n ” ) ;
7 panel . setBorder ( border ) ;
8 B u t t o n Gr o up g r o u p = new B ut t o nG r ou p ( ) ;
9 J R a d i o B u t t o n r a d i o 1 = new J R a d i o B u t t o n ( ” C h o i x 1 ” , t r u e ) ;
10 J R a d i o B u t t o n r a d i o 2 = new J R a d i o B u t t o n ( ” C h o i x 2 ” ) ;
11 J R a d i o B u t t o n r a d i o 3 = new J R a d i o B u t t o n ( ” C h o i x 3 ” ) ;
12 g r o u p . add ( r a d i o 1 ) ;
13 p a n e l . add ( r a d i o 1 ) ;
14 g r o u p . add ( r a d i o 2 ) ;
15 p a n e l . add ( r a d i o 2 ) ;
16 g r o u p . add ( r a d i o 3 ) ;
17 p a n e l . add ( r a d i o 3 ) ;
18 Container contentPane = t h i s . getContentPane ( ) ;
19 c o n t e n t P a n e . add ( p a n e l , B o r d e r L a y o u t . CENTER ) ;
20 t h i s . s e t S i z e (300 , 150);
21 this . s e t V i s i b l e ( true ) ;
22 }
23 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 52 / 82


Les boutons radio : la classe JRadioButton

Code
1 import j a v a . awt . B o r d e r L a y o u t ;
2 import j a v a . awt . C o n t a i n e r ;
3 import j a v a . awt . G r i d L a y o u t ;
4 import j a v a . awt . e v e n t . KeyEvent ;
5 import javax . swing . BorderFactory ;
6 import j a v a x . s w i n g . Bu t to n G ro u p ;
7 import j a v a x . s w i n g . JFrame ;
8 import javax . swing . JPanel ;
9 import j a va x . swing . JRadioButton ;
10 import javax . swing . border . Border ;
11
12 p u b l i c c l a s s T e s t J R a d i o B u t t o n e x t e n d s JFrame {
13 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
14 T e s t J R a d i o B u t t o n app = new T e s t J R a d i o B u t t o n ( ) ;
15 app . i n i t ( ) ;
16 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 53 / 82


Les boutons radio : la classe JRadioButton
Code suite...
1 public void i n i t () {
2 t h i s . s e t T i t l e ( ” Test r a d i o boutons ” ) ;
3 t h i s . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE ) ;
4 J P a n e l p a n e l = new J P a n e l ( new G r i d L a y o u t ( 0 , 1 ) ) ;
5 Border border = BorderFactory . c r e a t e T i t l e d B o r d e r ( ” S l e c t i o n ” ) ;
6 panel . setBorder ( border ) ;
7 B u t t o n G r o up g r o u p = new B ut t o nG r ou p ( ) ;
8 J R a d i o B u t t o n r a d i o 1 = new J R a d i o B u t t o n ( ” C h o i x 1 ” ) ;
9 r a d i o 1 . setMnemonic ( KeyEvent . VK 1 ) ;
10 r a d i o 1 . setActionCommand ( ” C h o i x 1 ” ) ;
11 radio1 . setSelected ( true ) ;
12 J R a d i o B u t t o n r a d i o 2 = new J R a d i o B u t t o n ( ” C h o i x 2 ” ) ;
13 r a d i o 2 . setMnemonic ( KeyEvent . VK 2 ) ;
14 r a d i o 2 . setActionCommand ( ” C h o i x 2 ” ) ;
15 J R a d i o B u t t o n r a d i o 3 = new J R a d i o B u t t o n ( ” C h o i x 3 ” ) ;
16 r a d i o 3 . setMnemonic ( KeyEvent . VK 3 ) ;
17 r a d i o 3 . setActionCommand ( ” C h o i x 3 ” ) ;
18 g r o u p . add ( r a d i o 1 ) ;
19 p a n e l . add ( r a d i o 1 ) ;
20 g r o u p . add ( r a d i o 2 ) ;
21 p a n e l . add ( r a d i o 2 ) ;
22 g r o u p . add ( r a d i o 3 ) ;
23 p a n e l . add ( r a d i o 3 ) ;
24 Container contentPane = t h i s . getContentPane ( ) ;
25 c o n t e n t P a n e . add ( p a n e l , B o r d e r L a y o u t . CENTER ) ;
26 t h i s . s e t S i z e (300 , 150);
27 this . s e t V i s i b l e ( true ) ;
28 }
29 }
Cours Java avancé Développement d’interfaces graphiques avec Swing 54 / 82
Les boutons radio : la classe JRadioButton

Lors de la sélection d’un bouton du groupe, il y a plusieurs événements qui


peuvent être émis :
Un événement de type Action
Un événement de type Item émis par le bouton sélectionné
Un événement de type Item émis par le bouton désélectionné s’il y en
a un

Cours Java avancé Développement d’interfaces graphiques avec Swing 55 / 82


Les boutons radio : la classe JRadioButton

Code
1 import j a v a . awt . B o r d e r L a y o u t ;
2 import j a v a . awt . C o n t a i n e r ;
3 import j a v a . awt . G r i d L a y o u t ;
4 import j a v a . awt . e v e n t . A c t i o n E v e n t ;
5 import j a v a . awt . e v e n t . A c t i o n L i s t e n e r ;
6 import j a v a . awt . e v e n t . I t e m E v e n t ;
7 import j a v a . awt . e v e n t . I t e m L i s t e n e r ;
8 import j a v a . awt . e v e n t . KeyEvent ;
9 import javax . swing . BorderFactory ;
10 import j a v a x . s w i n g . Bu t to n G ro u p ;
11 import j a v a x . s w i n g . JFrame ;
12 import javax . swing . JPanel ;
13 import j a va x . swing . JRadioButton ;
14 import javax . swing . border . Border ;
15
16 p u b l i c c l a s s T e s t J R a d i o B u t t o n e x t e n d s JFrame i m p l e m e n t s A c t i o n L i s t e n e r , I t e m L i s t e n e r {
17 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
18 T e s t J R a d i o B u t t o n app = new T e s t J R a d i o B u t t o n ( ) ;
19 app . i n i t ( ) ;
20 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 56 / 82


Les boutons radio : la classe JRadioButton
Code suite...
1 public void i n i t () {
2 t h i s . s e t T i t l e ( ” Test r a d i o boutons ” ) ;
3
4 t h i s . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE ) ;
5 J P a n e l p a n e l = new J P a n e l ( new G r i d L a y o u t ( 0 , 1 ) ) ;
6 Border border = BorderFactory . c r e a t e T i t l e d B o r d e r ( ” S l e c t i o n ” ) ;
7 panel . setBorder ( border ) ;
8 B u t t o n G r o up g r o u p = new B ut t o nG r ou p ( ) ;
9
10 J R a d i o B u t t o n r a d i o 1 = new J R a d i o B u t t o n ( ” C h o i x 1 ” ) ;
11 r a d i o 1 . setMnemonic ( KeyEvent . VK 1 ) ;
12 r a d i o 1 . setActionCommand ( ” C h o i x 1 ” ) ;
13 radio1 . setSelected ( true ) ;
14
15 J R a d i o B u t t o n r a d i o 2 = new J R a d i o B u t t o n ( ” C h o i x 2 ” ) ;
16 r a d i o 2 . setMnemonic ( KeyEvent . VK 2 ) ;
17 r a d i o 2 . setActionCommand ( ” C h o i x 2 ” ) ;
18
19 J R a d i o B u t t o n r a d i o 3 = new J R a d i o B u t t o n ( ” C h o i x 3 ” ) ;
20 r a d i o 3 . setMnemonic ( KeyEvent . VK 3 ) ;
21 r a d i o 3 . setActionCommand ( ” C h o i x 3 ” ) ;
22
23 g r o u p . add ( r a d i o 1 );
24 p a n e l . add ( r a d i o 1 );
25 g r o u p . add ( r a d i o 2 );
26 p a n e l . add ( r a d i o 2 );
27 g r o u p . add ( r a d i o 3 );
28 p a n e l . add ( r a d i o 3 );

Cours Java avancé Développement d’interfaces graphiques avec Swing 57 / 82


Les boutons radio : la classe JRadioButton
Code suite...
1 radio1 . addActionListener ( this );
2 radio2 . addActionListener ( this );
3 radio3 . addActionListener ( this );
4 radio1 . addItemListener ( this );
5 radio2 . addItemListener ( this );
6 radio3 . addItemListener ( this );
7
8 Container contentPane = t h i s . getContentPane ( ) ;
9 c o n t e n t P a n e . add ( p a n e l , B o r d e r L a y o u t . CENTER ) ;
10 t h i s . s e t S i z e (300 , 150);
11 this . s e t V i s i b l e ( true ) ;
12 }
13
14 @Override
15 public void actionPerformed ( ActionEvent e ) {
16 System . o u t . p r i n t l n ( ” C l i c s u r l e b o u t o n : ” + e . getActionCommand ( ) ) ;
17 }
18
19 @Override
20 p u b l i c void itemStateChanged ( ItemEvent e ) {
21 System . o u t . p r i n t ( ” Bouton ” + ( ( J R a d i o B u t t o n ) e . g e t I t e m ( ) ) . getActionCommand ( ) ) ;
22 i f ( e . g e t S t a t e C h a n g e ( ) == I t e m E v e n t . DESELECTED)
23 System . o u t . p r i n t l n ( ” d e s e l e c t i o n n e ” ) ;
24 i f ( e . g e t S t a t e C h a n g e ( ) == I t e m E v e n t . SELECTED)
25 System . o u t . p r i n t l n ( ” s e l e c t i o n n e ” ) ;
26 }
27 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 58 / 82


Les boutons radio : la classe JRadioButton

La méthode getSelection() de la classe ButtonGroup renvoie le modèle du


bouton radio sélectionné encapsulé dans un objet de type ButtonModel.
Pour déterminer le bouton sélectionné, il faut parcourir les boutons du
groupe et comparer leurs modèles.

Code
1 p u b l i c s t a t i c J R a d i o B u t t o n g e t B o u t o n S e l e c t i o n n e ( B u tt o nG r o up g r o u p ) {
2 JRadioButton r e s u l t = n u l l ;
3 f o r ( Enumeration e = group . getElements ( ) ; e . hasMoreElements ( ) ; ) {
4 JRadioButton bouton = ( JRadioButton ) e . nextElement ( ) ;
5 i f ( b o u t o n . g e t M o d e l ( ) == g r o u p . g e t S e l e c t i o n ( ) ) {
6 r e s u l t = bouton ;
7 break ;
8 }
9 }
10 return r e s u l t ;
11 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 59 / 82


Les composants de saisie de texte

Swing possède plusieurs composants pour permettre la saisie de texte.

Cours Java avancé Développement d’interfaces graphiques avec Swing 60 / 82


La classe JTextComponent

La classe abstraite JTextComponent est la classe mère de tous les


composants permettant la saisie de texte.
Les données du composant (le modèle dans le motif de conception MVC)
sont encapsulées dans un objet qui implémente l’interface Document.
Deux classes implémentant cette interface sont fournies en standard :
PlainDocument pour du texte simple et StyledDocument pour du texte
riche pouvant contenir entre autres plusieurs polices de caractères, des
couleurs, des images, ...
La classe JTextComponent possède de nombreuses méthodes dont les
principales sont :

Cours Java avancé Développement d’interfaces graphiques avec Swing 61 / 82


La classe JTextComponent

Méthode Rôle
void copy() Copier le contenu du texte et le mettre dans le presse-papier système.
void cut() Couper le contenu du texte et le mettre dans le presse-papier système.
Document getDocument() Renvoyer l’objet de type Document qui encapsule le texte saisi.
String Renvoyer le texte sélectionné dans le composant.
getSelectectedText()
int getSelectionEnd() Renvoyer la position de la fin de la sélection.
int Renvoyer la position du début de la sélection.
getSelectionStart()
String getText() Renvoyer le texte saisi.
String getText(int, Renvoyer une portion du texte débutant à partir de la position donnée par le premier pa-
int) ramètre et la longueur donnée dans le second paramètre.
boolean isEditable() Renvoyer un booléen qui précise si le texte est éditable ou non.
void paste() Coller le contenu du presse-papier système dans le composant.
void select(int, int) Sélectionner une portion du texte dont les positions de début et de fin sont fournies en
paramètres.
void Déplacer le curseur dans le texte à la position précisée en paramètre.
setCaretPosition(int)
void Permettre de préciser si les données du composant sont éditables ou non.
setEditable(boolean)
void Modifier la position de la fin de la sélection.
setSelectionEnd(int)
void Modifier la position du début de la sélection.
setSelectionStart(int)
void setText(String) Modifier le contenu du texte.

Toutes ces méthodes sont donc accessibles grâce à l’héritage pour tous les composants de saisie
de texte proposés par Swing.

Cours Java avancé Développement d’interfaces graphiques avec Swing 62 / 82


La classe JTextField

La classe javax.Swing.JTextField est un composant qui permet la saisie d’une seule ligne de
texte simple. Son modèle utilise un objet de type PlainDocument.

Code
1 import j a va x . swing . ∗ ;
2
3 public class JTextField1 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . s e t S i z e (300 , 100);
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10
11 JTextField t e s t F i e l d 1 = new J T e x t F i e l d ( ”mon t e x t e ” ) ;
12
13 p a n n e l . add ( t e s t F i e l d 1 ) ;
14 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
15 f . s e t V i s i b l e ( true ) ;
16 }
17 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 63 / 82


Frame Title

La propriété horizontalAligment permet de préciser l’alignement du texte


dans le composant en utilisant les valeurs JTextField.LEFT ,
JTextField.CENTER ou JTextField.RIGHT.

Cours Java avancé Développement d’interfaces graphiques avec Swing 64 / 82


La classe JPasswordField

La classe JPasswordField permet la saisie d’un texte dont tous les


caractères saisis seront affichés sous la forme d’un caractère particulier (’*’
par défaut). Cette classe hérite de la classe JTextField.

Code
1 i m p o r t j a v a . awt . D i m e n s i o n ;
2
3 import j a va x . swing . ∗ ;
4
5 public cla ss JPasswordField1 {
6
7 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
8
9 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
10 f . s e t S i z e (300 , 100);
11 J P a n e l p a n n e l = new J P a n e l ( ) ;
12
13 JPasswordField p a s s w o r d F i e l d 1 = new J P a s s w o r d F i e l d ( ” ” ) ;
14 p a s s w o r d F i e l d 1 . s e t P r e f e r r e d S i z e ( new D i m e n s i o n ( 1 0 0 , 2 0 ) ) ;
15
16 p a n n e l . add ( p a s s w o r d F i e l d 1 ) ;
17 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
18 f . s e t V i s i b l e ( true ) ;
19 }
20 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 65 / 82


La classe JPasswordField

La méthode setEchoChar(char) permet de préciser le caractère qui sera


montré lors de la saisie.
Il ne faut pas utiliser la méthode getText() qui est déclarée deprecated
mais la méthode getPassword() pour obtenir la valeur du texte saisi.

Cours Java avancé Développement d’interfaces graphiques avec Swing 66 / 82


La classe JPasswordField

Code
1 i m p o r t j a v a . awt . D i m e n s i o n ;
2 i m p o r t j a v a . awt . e v e n t . ∗ ;
3 import j a va x . swing . ∗ ;
4
5 p u b l i c c l a s s J P a s s w o r d F i e l d 2 implements A c t i o n L i s t e n e r {
6 JPasswordField passwordField1 = nu ll ;
7
8 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
9 J P a s s w o r d F i e l d 2 j p f 2 = new J P a s s w o r d F i e l d 2 ( ) ;
10 jpf2 . init ();
11 }
12
13 public void i n i t () {
14 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
15 f . s e t S i z e (300 , 100);
16 J P a n e l p a n n e l = new J P a n e l ( ) ;
17 p a s s w o r d F i e l d 1 = new J P a s s w o r d F i e l d ( ” ” ) ;
18 p a s s w o r d F i e l d 1 . s e t P r e f e r r e d S i z e ( new D i m e n s i o n ( 1 0 0 , 2 0 ) ) ;
19 p a n n e l . add ( p a s s w o r d F i e l d 1 ) ;
20 J B u t t o n b o u t o n 1 = new J B u t t o n ( ” A f f i c h e r ” ) ;
21 bouton1 . a d d A c t i o n L i s t e n e r ( t h i s ) ;
22 p a n n e l . add ( b o u t o n 1 ) ;
23 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
24 f . s e t V i s i b l e ( true ) ;
25 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 67 / 82


La classe JPasswordField

Code
1 public void actionPerformed ( ActionEvent e ) {
2
3 System . o u t . p r i n t l n ( ” t e x t e s a i s i e = ” + S t r i n g . c o p y V a l u e O f ( p a s s w o r d F i e l d 1 . g e t P a s s w o r d ( ) ) ) ;
4 }
5
6}

Les méthodes copy() et cut() sont redéfinies pour n’émettre qu’un bip.
Elles empêchent l’exportation du contenu du champ.

Cours Java avancé Développement d’interfaces graphiques avec Swing 68 / 82


La classe JFormattedTextField

Le JDK 1.4 propose la classe JFormattedTextField pour faciliter la


création d’un composant de saisie personnalisé. Cette classe hérite de la
classe JTextField.

Cours Java avancé Développement d’interfaces graphiques avec Swing 69 / 82


La classe JEditorPane

Ce composant permet la saisie de texte riche multilignes. Ce type de texte


peut contenir des informations de mise en pages et de formatage. En
standard, Swing propose le support des formats RTF et HTML.

Cours Java avancé Développement d’interfaces graphiques avec Swing 70 / 82


La classe JEditorPane
affichage de la page de Google avec gestion des hyperliens
1 i m p o r t j a v a . n e t . URL ;
2 import j a va x . swing . ∗ ;
3 import j a va x . swing . event . ∗ ;
4
5 public c l a s s JEditorPane1 {
6
7 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
8 f i n a l JEditorPane e d i t e u r ;
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10
11 try {
12 e d i t e u r = new J E d i t o r P a n e ( new URL( ” h t t p : / / g o o g l e . f r ” ) ) ;
13 editeur . setEditable ( false );
14 e d i t e u r . a d d H y p e r l i n k L i s t e n e r ( new H y p e r l i n k L i s t e n e r ( ) {
15 public void hyperlinkUpdate ( HyperlinkEvent e ) {
16 i f ( e . g e t E v e n t T y p e ( ) == H y p e r l i n k E v e n t . EventType . ACTIVATED) {
17 URL u r l = e . getURL ( ) ;
18 i f ( u r l == n u l l )
19 return ;
20 try {
21 e d i t e u r . s e t P a g e ( e . getURL ( ) ) ;
22 } catch ( E x c e p t i o n ex ) {
23 ex . p r i n t S t a c k T r a c e ( ) ;
24 }
25 }
26 }
27 });

Cours Java avancé Développement d’interfaces graphiques avec Swing 71 / 82


La classe JEditorPane
affichage de la page de Google avec gestion des hyperliens
1 p a n n e l . add ( e d i t e u r ) ;
2 } c a t c h ( E x c e p t i o n e1 ) {
3 e1 . p r i n t S t a c k T r a c e ( ) ;
4 }
5 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
6 f . s e t S i z e (500 , 300);
7 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
8 f . s e t V i s i b l e ( true ) ;
9 }
10 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 72 / 82


La classe JTextArea

La classe JTextArea est un composant qui permet la saisie de texte simple en mode multiligne.
Le modèle utilisé par ce composant est le PlainDocument : il ne peut donc contenir que du texte
brut sans éléments multiples de formatage.
JTexteArea propose plusieurs méthodes pour ajouter du texte dans son modèle :
soit fournir le texte en paramètre du constructeur utilisé
soit utiliser la méthode setText() qui permet d’initialiser le texte du composant
soit utiliser la méthode append() qui permet d’ajouter du texte à la fin de celui contenu
dans le composant
soit utiliser la méthode insert() qui permet d’insérer du texte dans le composant à une
position données en caractères
La méthode replaceRange() permet de remplacer la partie de texte occupant les index donnés en
paramètres par la chaı̂ne fournie.
La propriété rows permet de définir le nombre de lignes affichées par le composant : cette
propriété peut donc être modifiée lors d’un redimensionnement du composant. La propriété
lineCount en lecture seule permet de savoir le nombre de lignes qui composent le texte. Il ne
faut pas confondre ces deux propriétés.

Cours Java avancé Développement d’interfaces graphiques avec Swing 73 / 82


La classe JTextArea

Code
1 import j a va x . swing . ∗ ;
2
3 p u b l i c c l a s s JTextArea1 {
4
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . s e t S i z e (300 , 100);
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10
11 JTextArea t e x t A r e a 1 = new J T e x t A r e a ( ”mon t e x t e ” ) ;
12
13 p a n n e l . add ( t e x t A r e a 1 ) ;
14 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
15 f . s e t V i s i b l e ( true ) ;
16 }
17 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 74 / 82


La classe JTextArea

Par défaut, la taille du composant augmente au fur et à mesure de


l’augmentation de la taille du texte qu’il contient. Pour éviter cet effet, il
faut encapsuler le JTextArea dans un JScrollPane.

Cours Java avancé Développement d’interfaces graphiques avec Swing 75 / 82


La classe JTextArea
Code
1 i m p o r t j a v a . awt . D i m e n s i o n ;
2 import j a va x . swing . ∗ ;
3
4 p u b l i c c l a s s JTextArea1 {
5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6
7 JFrame f = new JFrame ( ”ma f e n e t r e ” ) ;
8 f . s e t S i z e (300 , 100);
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10 JTextArea t e x t A r e a 1 = new J T e x t A r e a ( ”mon t e x t e ” ) ;
11 J S c r o l l P a n e s c r o l l P a n e = new J S c r o l l P a n e ( t e x t A r e a 1 ) ;
12 s c r o l l P a n e . s e t P r e f e r r e d S i z e ( new D i m e n s i o n ( 2 0 0 , 7 0 ) ) ;
13 p a n n e l . add ( s c r o l l P a n e ) ;
14 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
15 f . s e t V i s i b l e ( true ) ;
16 }
17 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 76 / 82


Les onglets

La classe javax.swing.JTabbedPane encapsule un ensemble d’onglets.


Chaque onglet est constitué d’un titre, d’un composant et éventuellement
d’une image.
Pour utiliser ce composant, il faut :
instancier un objet de type JTabbedPane
créer le composant de chaque onglet
ajouter chaque onglet à l’objet JTabbedPane en utilisant la méthode
addTab()

Cours Java avancé Développement d’interfaces graphiques avec Swing 77 / 82


Les onglets
Code
1 i m p o r t j a v a . awt . D i m e n s i o n ;
2 i m p o r t j a v a . awt . e v e n t . KeyEvent ;
3 import j a va x . swing . ∗ ;
4
5 p u b l i c c l a s s TestJTabbedPane1 {
6 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
7 JFrame f = new JFrame ( ” T e s t JTabbedPane ” ) ;
8 f . s e t S i z e (320 , 150);
9 J P a n e l p a n n e l = new J P a n e l ( ) ;
10 JTabbedPane o n g l e t s = new JTabbedPane ( S w i n g C o n s t a n t s . TOP ) ;
11
12 JPanel o n g l e t 1 = new J P a n e l ( ) ;
13 JLabel t i t r e O n g l e t 1 = new J L a b e l ( ” O n g l e t 1 ” ) ;
14 onglet1 . add ( t i t r e O n g l e t 1 ) ;
15 onglet1 . s e t P r e f e r r e d S i z e ( new D i m e n s i o n ( 3 0 0 , 8 0 ) ) ;
16 onglets . addTab ( ” o n g l e t 1 ” , o n g l e t 1 ) ;
17
18 JPanel o n g l e t 2 = new J P a n e l ( ) ;
19 JLabel t i t r e O n g l e t 2 = new J L a b e l ( ” O n g l e t 2 ” ) ;
20 onglet2 . add ( t i t r e O n g l e t 2 ) ;
21 onglets . addTab ( ” o n g l e t 2 ” , o n g l e t 2 ) ;
22
23 o n g l e t s . setOpaque ( t r u e ) ;
24 p a n n e l . add ( o n g l e t s ) ;
25 f . g e t C o n t e n t P a n e ( ) . add ( p a n n e l ) ;
26 f . s e t V i s i b l e ( true ) ;
27 }
28 }

Cours Java avancé Développement d’interfaces graphiques avec Swing 78 / 82


Les onglets

A partir du JDK 1.4, il est possible d’ajouter un raccourci clavier sur


chacun des onglets en utilisant la méthode setMnemonicAt(). Cette
méthode attend deux paramètres : l’index de l’onglet concerné (le premier
commence à 0) et la touche du clavier associée sous la forme d’une
constance KeyEvent.VK xxx. Pour utiliser ce raccourci, il suffit d’utiliser la
touche désignée en paramètre de la méthode avec la touche Alt.

Cours Java avancé Développement d’interfaces graphiques avec Swing 79 / 82


Les onglets

La classe JTabbedPane possède plusieurs méthodes qui permettent de définir le contenu de


l’onglet :

Méthode Rôle
addTab(String, Permet d’ajouter un nouvel onglet dont le titre et le com-
Component) posant sont fournis en paramètres. Cette méthode possède
plusieurs surcharges qui permettent de préciser une icône et
une bulle d’aide.
insertTab(String, Icon, Permet d’insérer un onglet dont la position est précisée dans
Component, String, int) le dernier paramètre.
remove(int) Permet de supprimer l’onglet dont l’index est fourni en pa-
ramètre.
setTabPlacement Permet de préciser le positionnement des onglets dans
le composant JTabbedPane. Les valeurs possibles sont les
constantes TOP, BOTTOM, LEFT, et RIGHT définies dans la classe
JTabbedPane.

La méthode getSelectedIndex() permet d’obtenir l’index de l’onglet courant. La méthode


setSelectedIndex() permet de définir l’onglet courant.

Cours Java avancé Développement d’interfaces graphiques avec Swing 80 / 82


Conclusion

Swing est une API puissante pour développer des interfaces graphiques en
Java.
Fournit une grande variété de composants pour créer des applications
riches.
Permet une gestion fine des événements utilisateurs.
Bien que Swing soit ancien, il reste une bonne base pour comprendre
le développement d’IHM en Java.

Cours Java avancé Développement d’interfaces graphiques avec Swing 81 / 82


Questions et Discussions

Avez-vous des questions sur les différents composants de Swing ?


Voulez-vous voir des exemples plus complexes ?

Cours Java avancé Développement d’interfaces graphiques avec Swing 82 / 82

Vous aimerez peut-être aussi