5 Swing 1
5 Swing 1
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
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
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.
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 }
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.
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 }
Attention
Attention : il ne faut pas utiliser directement la méthode setLayout() d’un
objet JFrame sinon une exception est levée.
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 )
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
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.
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 }
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 }
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.
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 }
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 }
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
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é.
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 }
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.
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
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 :
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
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
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.
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.
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 }
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.
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 }
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 }
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.
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 }
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 }
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 }
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 }
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 }
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.
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 }
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 }
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 }
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.
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.
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 }
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.
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.