:: Enseignements :: Master :: M1 :: 2011-2012 :: Interface graphique I ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Fenêtres, panneaux, boutons, labels, listeners |
Nous rappelons que la javadoc est généralement disponible en local à
l'adresse /usr/local/jdk.../docs/api/index.html.
Exercice 1 - Exemple de JFrame
-
Écrire une classe SimpleFrame permettant d'afficher une
fenêtre. Nous utiliserons pour cela la classe javax.swing.JFrame.
On lui donnera simplement :
-
un titre (voir le constructeur ou setTitle())
-
une taille minimale (setSize())
Puis on l'affichera via la commande setVisible(true).
-
Changer le comportement par défaut de la fenêtre lors de
sa fermeture pour que l'application soit quittée
(JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE)).
-
Dans un second temps, ajouter à cette fenêtre un label
(JLabel), représentant une étiquette (un texte court).
Récuperer le conteneur correspondant à l'espace
client de la fenêtre avec la méthode getContentPane(),
et ajouter le label à ce conteneur.
-
Centrer le texte du JLabel en utilisant la méthode
setHorizontalAlignment.
-
L'algorithme de placement des composants de la fenêtre, est, pour une
JFrame, géré par la classe BorderLayout. En
lisant attentivement la description de la méthode
add(Component,Object) de la classe Container,
ajouter un bouton "OK" (JButton) au dessous du label.
Exercice 2 - À la découverte de nouveaux composants
-
Créer une nouvelle JFrame nommée "Découverte" et
y inclure les composants suivants :
-
un bouton (JButton)
-
un champ de texte (JTextField)
-
une zone de texte (JTextArea)
-
Ajouter une bulle d'aide contextuelle (setToolTipText())
sur le bouton ;
-
rendre le bouton inopérant (setEnabled()) ;
-
changer la couleur du texte et du fond du bouton ;
-
ajouter un texte dans le champ de texte et dans la zone de texte ;
-
rendre le champ de texte non éditable ;
-
ajouter une bordure au champ de texte
(avec la méthode setBorder())
en fournissant un objet de type java.swing.border.Border
créé via une méthode de la classe java.swing.BorderFactory,
par exemple la méthode createLineBorder(Color color,
int thickness) ;
-
Modifier la forme que le curseur prend quand il passe au dessus de la
zone de texte, pour qu'il garde l'aspect d'une flèche.
Exercice 3 - Associer des actions aux boutons
Le but de cet exercice est de créer une fenêtre
contenant un bouton de label "Test" qui, lorsqu'il
reçoit un clic, affiche "Test clic" sur la sortie standard
-
Créer la fenêtre et le bouton ;
-
créer une classe (elle doit être anonyme) implémentant l'interface
ActionListener et effectuant l'affichage
dans la méthode actionPerformed(ActionEvent) ;
-
relier le listener au bouton grâce à
la méthode addActionListener(ActionListener) du bouton.
Utiliser la même technique avec trois boutons,
"Un", "Deux" et "Trois", qui permettent de changer
le titre de la fenêtre principale de l'application en
respectivement "*Un*", "*Deux*" et "*Trois*".
Produire un code qui permette de rajouter facilement un bouton.
Exercice 4 - Auditeurs
Créer une fenêtre contenant un bouton intitulé "Add". À chaque clic
sur ce bouton, il faudra ajouter un bouton dans la fenêtre, les uns à
la suite des autres, numérotés à leurs créations. Quand on clique sur
l'un d'entre eux, cela le fait disparaître.
Ajouter (à la suite de "Add") un bouton "Reset" qui retire tous les boutons ajoutés.
Exercice 5 - À la maison ...
On souhaite créer un panneau contenant quatre cases à cocher
(
JCheckBox) étiquettées "zorro", "ivanhoé", "spiderman" et
"moi".
On veut faire en sorte qu'il n'y ait qu'une seule case
sélectionnée à la fois.
Il y a deux possibilités :
-
faire en sorte que lorsque l'on sélectionne une case,
les autres soient automatiquement désélectionnées ;
-
faire en sorte de décocher la case sélectionnée
avant de sélectionner la nouvelle.
Il est possible d'obtenir tous les fils d'un Container
(un JPanel est un Container)
à l'aide des méthodes getComponentCount() et
getComponent(int).
Dans cet exercice, il est demandé de ne pas utiliser la classe
ButtonGroup mais d'en reprogrammer le comportement.
© Université de Marne-la-Vallée