Vous êtes sur la page 1sur 12

Anne Tasso

7
e
dition
Le livre de
Java
premier langage
tasso titre 7/07/11 9:46 Page 2
Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, 2011, ISBN : 978-2-212-13307-3
partie n 3 Outils et techniques orients objet
390 ditions Eyrolles
Grce au panneau Inspecteur, nous pourrons nommer les composants et modier leur hirar-
chie sil se trouve quun composant contienne dautres composants.
Vous vous familiariserez rapidement avec lutilisation de ces panneaux et en cernerez limpor-
tance ds la mise en place du premier exemple prsent la section suivante, Une premire
application avec NetBeans .
Une premire application avec NetBeans
La cration dune application Java munie dune interface de communication graphique
seffectue en deux tapes.
1. Choisir, placer et nommer lcran les objets permettant linteraction avec lutilisateur.
Il sagit, par exemple, de dnir sil est prfrable de proposer lutilisateur un choix
doptions sous la forme dun menu ou dun ensemble de cases cocher.
2. crire, pour chaque lment dinteraction choisi, les actions mener. Par exemple, si lappli-
cation afche un bouton Quitter, il convient dcrire en Java, linstruction System.exit(0)
lintrieur de la fonction qui traite ce bouton.
Examinons sur un exemple simple et bien connu , savoir calculer le primtre dun
cercle , comment raliser chacune de ces tapes.
Cahier des charges
Lobjectif est de crer et dafcher la fentre reprsente la gure 12-13.
La fentre est compose de plusieurs lments graphiques :
un champ de saisie (voir gure 12-13-) qui permet lutilisateur de transmettre lappli-
cation la valeur du rayon du cercle dont il souhaite connatre le primtre ;
un bouton pour valider la saisie dune valeur pour le rayon puis, calculer le primtre
du cercle (voir gure 12-13-) ;
Figure 12-13 Calculer le primtre dun cercle
LivreTasso.book Page 390 Mardi, 16. aot 2011 4:35 16
ditions Eyrolles 391
chapitre n 12 Crer une interface graphique
deux zones de texte (voir gure 12-13-) pour placer une information spcique
( Rayon : et Primtre : ). Ces textes resteront identiques tout au long de lexcution
de lapplication ;
une zone (voir gure 12-13-) pour afcher le primtre du cercle aprs validation. La
valeur sera modie chaque fois que lutilisateur saisira une nouvelle valeur.
Mise en place des lments graphiques
La mise en place des composants graphiques dans la fentre dapplication seffectue par un
simple glisser-dposer des composants du panneau Palette vers le fond de la fentre (JFrame)
visible sur le panneau Design.
Les champs de texte
Dans le panneau Palette, les champs de texte sont reprsents par le composant Label
(JLabel). Les lments sont placs dans la fentre de lapplication, comme le montre la
gure 12-14-.
Observez que pour chaque champ de texte ajout, le nom du composant ajout safche dans
le panneau Inspecteur (voir gure 12-14-).
Figure 12-14 Les champs de texte sont des composants de type Label.
LivreTasso.book Page 391 Mardi, 16. aot 2011 4:35 16
partie n 3 Outils et techniques orients objet
392 ditions Eyrolles
Le nom des objets placs dans la fentre porte, par dfaut, le nom du composant quil repr-
sente suivi dun chiffre qui correspond son numro dordre de cration. Ce nom est port
deux fois par le composant, dans la fentre Inspecteur et dans la fentre Design :
Dans le panneau Inspecteur, ce nom reprsente le nom de lobjet utilis par le code source
autognr. Pour rendre ce code plus lisible et faciliter la programmation ultrieure, vous
devez modier ces noms.
Ainsi, nous appelons jLabel1, rayonLabel, jLabel2, perimetreLabel, jLabel3
et resultatLabel les objets utiliss dans ce premier exemple. Pour cela, vous devez,
dans le panneau Inspecteur, cliquer deux fois sur chaque lment jLabel1, jLabel2,
etc., en laissant un petit temps dattente entre les deux clics. Cela fait, le nom du compo-
sant slectionn est surlign en bleu et vous pouvez alors modier son nom. Le composant
change dnitivement de nom aprs validation par la touche Entre du clavier (voir
gure 12-14-).
Dans le panneau Design, ce nom reprsente le texte afch par le composant lors de lex-
cution du programme (voir gure 12-15-). Vous devez remplacer ces noms par du texte
correspondant ce que vous souhaitez obtenir comme information. Ainsi, tels quils sont
situs dans le panneau, le texte jLabel1 doit tre remplac par Rayon : , jLabel2 par
Primtre : et jLabel3 par 0.
Figure 12-15 Nommer les composants dans le panneau Inspector ()
et modier le texte afcher dans le panneau Design ()
LivreTasso.book Page 392 Mardi, 16. aot 2011 4:35 16
ditions Eyrolles 393
chapitre n 12 Crer une interface graphique
Le champ resultatLabel afche le rsultat de lopration qui consiste calculer le
primtre dun cercle. La premire fois que lapplication est lance, la valeur du rayon
nest pas encore donne. Cest pourquoi, nous afchons comme valeur par dfaut 0.
Lorsque vous modiez le nom dun composant par lintermdiaire du panneau Inspecteur,
NetBeans se charge alors de modier le nom de toutes les occurrences de ce composant qui
pourraient se trouver dans le code source associ.
Le champ de saisie
Les champs de saisie sont reprsents, dans le panneau Palette, par le composant Text Field
(JTextField). Le champ de saisie est plac dans la fentre de lapplication, juste aprs le
champ de texte rayonLabel, comme le montre la gure 12-13-.
Dans le panneau Inspecteur, nous nommons le champ de saisie jTextField1, saisie-
Rayon et plaons comme valeur dafchage par dfaut, la valeur 0.
Les composants JTextField et JLabel ont par dfaut un alignement horizontal gauche
(texte ferr gauche). Pour modier cette proprit, il suft douvrir le panneau Proprits en
cliquant droit sur le composant modier et en slectionnant litem Proprits du menu
contextuel qui apparat alors.
Dans le panneau Proprits (voir gure 12-16), slectionnez la proprit horizontalAlignment
sur la colonne de gauche et choisissez la valeur Right dans la menu qui apparat, lorsque lon
clique sur la colonne de droite.
Figure 12-16 Modier la proprit horizontalAlignment du champ de saisie saisieRayon
LivreTasso.book Page 393 Mardi, 16. aot 2011 4:35 16
partie n 3 Outils et techniques orients objet
394 ditions Eyrolles
Le bouton
Pour nir, plaons le bouton de validation dans la fentre dapplication, comme le montre la
gure 12-13-.
Les boutons sont reprsents, dans le panneau Palette, par le composant Button (JButton).
Dans le panneau Inspecteur, nous nommons le bouton jButton1, calculerBtn et plaons
comme texte dafchage Calculer.
Ainsi, lorsque tous les composants sont placs dans la fentre dapplication, nous obtenons le
panneau Inspecteur prsent en gure 12-17.
Ajustement et positionnement des composants
An de rendre linterface plus agrable lil, faisons en sorte que tous les composants soient
de mme largeur. Pour cela, il suft de :
Slectionner les composants soit dans le panneau Inspecteur, soit directement dans le pan-
neau Design en maintenant la touche Maj enfonce, chaque slection pour raliser une
slection multiple.
Cliquer droit sur la slection et choisir litem Mme Taille puis Mme Largeur (voir
gure 12-18).
Le menu contextuel apparaissant au clic droit, sur un ou plusieurs composants de lapplica-
tion, permet de modier la taille et la position des lments les uns par rapport aux autres ou
par rapport au fond de la fentre (item Ancre).
Enn, pour modier la taille de la fentre de votre application, placez le curseur de la souris en
bas droite de la zone grise reprsentant le fond de votre interface. Lorsque apparat un
curseur en forme dangle droit, vous pouvez procder de deux faons diffrentes :
1. Cliquer et tirer langle pour augmenter ou diminuer la taille de la fentre.
2. Double-cliquer sur langle. Une bote de dialogue apparat afchant la largeur et la hauteur de
la fentre de lapplication. Vous pouvez modier directement ces valeurs.
Figure 12-17 Le panneau Inspecteur de lapplication CercleSwing.java
LivreTasso.book Page 394 Mardi, 16. aot 2011 4:35 16
ditions Eyrolles 395
chapitre n 12 Crer une interface graphique
Dnir le comportement des objets graphiques
Tous les lments graphiques sont maintenant en place, mais lapplication ne ralise pas
encore de calcul. Pour cela, nous allons devoir entrer dans le code de lapplication an dy
insrer les instructions qui vont permettre de calculer puis dafcher le primtre du cercle.
Le code autognr par NetBeans
Dans un premier temps, examinons le code construit par NetBeans (voir gure 12-19) dans le
panneau Source.
Le code, tel quil se prsente lorsquon clique sur longlet Source, semble relativement simple.
En ralit, il est plus complexe quil ny parat. Une grande partie du code est cache. Pour le
visualiser, il vous suft de cliquer sur les signes + se trouvant en marge gauche de lditeur.
Sans entrer dans le dtail du code gnr par NetBeans, nous allons dcomposer sa structure
(voir gure 12-19- ) pour mieux comprendre son fonctionnement.
Les composants graphiques crs par simple glisser-dposer de la bibliothque vers le fond
de lapplication sont dclars comme proprit de lapplication, la n de la dnition de
la classe CercleSwing. Nous retrouvons ici les noms calculBtn, perimetreLabel,
etc., que nous avons pris soin de dnir dans le panneau Inspector ltape prcdente
(voir la section Mise en place des lments graphiques ).
Figure 12-18 Ajuster la taille des composants
Comment centrer le bouton Calculer dans la fentre dapplication ?
Pour centrer le bouton Calculer :
1. Slectionnez lintgralit des composants de lapplication puis cliquez droit sur la slection.
2. Choisissez litem Aligner puis Center to Column.
LivreTasso.book Page 395 Mardi, 16. aot 2011 4:35 16
partie n 3 Outils et techniques orients objet
396 ditions Eyrolles
La fonction main() est, comme nous en avons pris lhabitude tout au long de ce livre, le
point dentre du programme. Ici, les instructions qui la composent sont cependant un peu
plus complexes. Nous allons tenter de les rendre comprhensibles en les examinant plus
prcisment.
La fonction main() utilise deux outils dont nous navons pas encore parl : invoke-
Later() et Runnable.
Ces deux outils font rfrence la notion de thread que lon traduit en franais par units
de traitement .
Un thread est une portion de code, un traitement spcique capable de sexcuter en mme
temps que dautres traitements.
Figure 12-19 Code source de lapplication CercleSwing gnr par NetBeans
LivreTasso.book Page 396 Mardi, 16. aot 2011 4:35 16
ditions Eyrolles 397
chapitre n 12 Crer une interface graphique
Les applications construites laide dinterfaces graphiques utilisent la notion de thread
puisquelles excutent plusieurs traitements en mme temps et ce, de faon indpendante.
Ces traitements sont, par exemple, la saisie dune valeur dans un champ de saisie en
mme temps que lafchage dune aide contextuelle dans une fentre ddie.
Pour excuter les diffrents thread, la librairie graphique Swing utilise une pile dvne-
ments an de rpartir dans le temps leur traitement. La librairie Swing propose galement
plusieurs mthodes pour traiter cette pile. Ici, par exemple, la mthode utilise est
invokeLater(), laquelle permet de traiter les vnements de faon asynchrone pour
viter de bloquer les ventuels autres threads en attente.
La mthode invokeLater() demande, en paramtre, la portion de code traiter de
faon asynchrone. Cest ce qui est ralis par la suite dinstructions :
new Runnable() {
public void run() {
new CercleSwing().setVisible(true);
}
}
Runnable est une classe abstraite, une interface dont le mode de comportement dni
par le programmeur doit tre crit au sein de la mthode run().
Les notions de classe abstraite et dinterface sont dcrites au chapitre 9, Dessiner des
objets , section Les vnements .
Pour notre application, le comportement excuter en mode asynchrone consiste appeler
le constructeur CercleSwing(). La classe CercleSwing hritant des qualits et mtho-
des de la classe JFrame (extends javax.swing.JFrame), lobjet issu du constructeur
est une fentre qui devient visible grce lappel de la mthode setVisible(true).
Plus classiquement, nous aurions pu crire la fonction main() comme suit :
public static void main(String args[]) {
// Dfinition du thread et de son comportement
Runnable traitement = new Runnable() {
public void run() {
// Cration dune fentre dfinie par la classe
// CercleSwing
CercleSwing fenetre = new CercleSwing();
// Rendre visible la fentre
fenetre.setVisible(true);
};
};
// Traiter le thread traitement en mode asynchrone
java.awt.EventQueue.invokeLater(traitement);
}
LivreTasso.book Page 397 Mardi, 16. aot 2011 4:35 16
partie n 3 Outils et techniques orients objet
398 ditions Eyrolles
Le constructeur CercleSwing() appelle la mthode initComponents(), laquelle
est entirement gnre par NetBeans.
La mthode initComponents() nest pas directement visible lorsquon clique sur
longlet Source. Pour examiner lintgralit du code, cliquez sur le signe + situ en marge
gauche, la hauteur du texte Generated Code.
Nous ne nous attarderons pas sur ce code. Il est long, fastidieux et ce seul chapitre ne sufrait
pas le dcrire entirement. Pour simplier, il suft juste de comprendre que lensemble
des instructions qui le composent permet le placement et lafchage des composants tels
que vous les avez souhaits dans le panneau Design.
Associer une action un bouton
Une fois compris le code autognr par NetBeans, examinons comment raliser le calcul du
primtre dun cercle. Celui-ci seffectue lorsquon clique sur le bouton Calculer. Pour asso-
cier laction de calcul au clic sur le bouton, nous devons ajouter un gestionnaire dvnements
au bouton Calculer (nomm calculerBtn).
La notion dvnements est traite la section Les vnements du chapitre 9,
Dessiner des objets .
Sous NetBeans, lajout dun gestionnaire sur un composant graphique seffectue comme suit
(voir gure 12-20).
Dans le panneau Design, slectionnez le bouton Calculer.
Cliquez droit sur le composant.
Slectionnez litem vnements, puis Action, puis actionPerformed, dans lenchanement de
menu et sous menus qui apparaissent.
La fentre Source safche et laisse apparatre une nouvelle mthode :
private void calculerBtnActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
}
Figure 12-20 Associer un vnement au bouton Calculer
LivreTasso.book Page 398 Mardi, 16. aot 2011 4:35 16
ditions Eyrolles 399
chapitre n 12 Crer une interface graphique
Les instructions qui ralisent le calcul du primtre dun cercle sont insrer dans la mthode
calculerBtnActionPerformed() cre par NetBeans. Ces instructions sont au nombre
de trois :
Rcuprer la valeur du rayon saisie dans le champ de saisie saisieRayon.
Calculer le primtre.
Afcher le primtre dans le champ de texte resultatLabel.
Ces instructions scrivent en Java :
// Rcuprer la valeur du rayon saisie dans le champ de saisie
// saisieRayon
double rayon = Double.parseDouble(saisieRayon.getText());
// Calculer le primtre
double perimetre = 2* Math.PI* rayon;
// Afficher le primtre dans le champ de texte resultatLabel
resultatLabel.setText(Double.toString(perimetre));
Les deux principales mthodes retenir sont : getText() et setText().
La mthode getText()retourne, sous forme de chane de caractres, la valeur saisie par
lutilisateur dans le champ de saisie sur lequel est applique la mthode. Ici, il sagit du champ
saisieRayon. La valeur retourne par la mthode est de type String alors que le rayon est
une valeur numrique de type double. Lutilisation de la mthode parseDouble() permet
la transformation dune chane de caractres en valeur de type double.
linverse, la mthode setText() afche le texte plac en paramtre dans le champ de texte
sur lequel est appliqu la mthode. Ici, il sagit du texte correspondant la valeur calcule du
primtre. Cette valeur est numrique, la mthode toString() transforme cette valeur en
une chane de caractres.
La mthode toString() est galement tudie la section Rechercher le code Uni-
code dun caractre donn du chapitre 4, Faire des rptitions .
Les trois lignes de code prsentes ci-avant sont insrer dans la fonction calculerBtn
ActionPerformed() comme suit :
private void calculerBtnActionPerformed(java.awt.event.ActionEvent
evt) {
// Rcuprer la valeur du rayon saisie dans le champ de saisie
// saisieRayon
double rayon = Double.parseDouble(saisieRayon.getText());
// Calculer le primtre
double perimetre = 2 * Math.PI * rayon;
// Afficher le primtre dans le champ de texte resultatLabel
resultatLabel.setText(Double.toString(perimetre));
}
LivreTasso.book Page 399 Mardi, 16. aot 2011 4:35 16
partie n 3 Outils et techniques orients objet
400 ditions Eyrolles
La mthode calculerBtnActionPerformed() est une mthode particulire que lon
nomme dans le jargon de la programmation vnementielle, un gestionnaire dvnements.
Excuter lapplication
Pour voir enn safcher lapplication CercleSwing, vous devez lancer lexcution du
programme. Pour cela, cliquez sur le petit triangle vert situ au centre de la barre doutils de
NetBeans ou appuyez sur la touche F6 de votre clavier.
Si aucune erreur de compilation ou dexcution nest dtecte, vous devez voir apparatre la
fentre avec un rayon et un primtre gaux 0 (voir gure 12-21-). Aprs saisie dune
valeur pour le rayon et validation en cliquant sur le bouton Calculer, le rsultat safche la
suite du label Primtre : (voir gure 12-21-).
Gestion de bulletins de notes
Pour parfaire nos connaissances en construction dapplications Java munies dinterfaces
graphiques conviviales, nous vous proposons de crer une application permettant la cration et
la gestion de bulletins de notes dtudiants.
Figure 12-21 Excution de lapplication CercleSwing.java
LivreTasso.book Page 400 Mardi, 16. aot 2011 4:35 16

Vous aimerez peut-être aussi