tasso 1/08/08 14:00 Page 1 Anne Tasso Maître de ... · Java avec une interface graphique...

12
Anne Tasso Le livre de Java premier langage Avec 80 exercices corrigés Le livre de Java premier langage Avec 80 exercices corrigés Un best-seller qui a déjà conquis des milliers d'étudiants ! 5 e édition 5 e édition Un best-seller qui a déjà conquis des milliers d'étudiants ! Sur le CD-Rom offert avec ce livre : · J2SE avec JDK6 et NetBeans 6.1 : tous les outils pour créer des applications Java avec une interface graphique conviviale, sous Windows, Linux et Mac · Corrigé du projet et des exercices · Code source de tous les exemples de l'ouvrage

Transcript of tasso 1/08/08 14:00 Page 1 Anne Tasso Maître de ... · Java avec une interface graphique...

Anne Tasso

Le livre de

Javapremier langage

Avec 80 exercices corrigés

Le livre deJavapremier langage

Avec 80 exercices corrigés

Un best-seller

qui a déjà conquis

des milliers d'étudiants !

5e édition5e édition

Un best-seller

qui a déjà conquis

des milliers d'étudiants !

Sur le CD-Rom offert avec ce livre :

· J2SE avec JDK6 et NetBeans 6.1 :tous les outils pour créer des applications Java avec une interface graphique conviviale, sous Windows, Linux et Mac

· Corrigé du projet et des exercices

· Code source de tous les exemples de l'ouvrage

Apprendre Java en douceurVous avez décidé de vous initier à la programmation et souhaitez opter pour un langage largement utilisé dans le monde profes-sionnel ? Java se révèle un choix idéal comme vous le découvrirez dans ce livre conçu pour les vrais débutants en programmation.

Vous apprendrez d’abord, à travers des exemples simples en Java, à maîtriser les notions communes à tous les langages : variables,types de données, boucles et instructions conditionnelles, etc. Vous franchirez un nouveau pas en découvrant par la pratique lesconcepts de la programmation orientée objet (classes, objets, héritage), puis le fonctionnement des librairies graphiques AWT etSwing (fenêtres, gestion de la souris, tracé de graphiques). Vous découvrirez enfin comment réaliser des applications Java dotéesd'interfaces graphiques conviviales grâce au logiciel libre NetBeans.

Chaque chapitre est accompagné de deux types de travaux pratiques : des exercices, dont le corrigé est fourni sur le CD-Romd’accompagnement, et un projet développé au fil de l’ouvrage, qui vous montrera comment combiner toutes les techniques deprogrammation étudiées pour construire une véritable application Java.À qui s’adresse ce livre ?• Aux étudiants de 1er cycle universitaire (IUT, Deug...) ou d’écoles d’ingénieurs.• Aux vrais débutants en programmation : passionnés d’informatique et programmeurs autodidactes, concepteurs de sites Web

souhaitant aller au-delà de HTML et JavaScript, etc.• Aux enseignants et formateurs à la recherche d’une méthode pédagogique et d’un support de cours structuré pour enseigner Java à

des débutants.Au sommaire

Introduction. Qu’est-ce qu’un programme ? • Construire un algorithme • Premier exemple de programme en Java • Exécution du pro-gramme • Présentation du projet détaillé dans l’ouvrage (application de gestion de compte bancaire). Techniques de base de la pro-grammation. Stocker une information • Types de données • Variables et opérateur d’affection • Expressions et opérateurs arithmé-tiques • Les entrées-sorties, la classe Scanner • Affichage et saisie des données • Instructions if-else et switch • Boucles do…while, whileet for. Initiation à la programmation orientée objet. De l’algorithme paramétré à l’écriture de fonctions • Fonctions Java prédéfi-nies • Construire ses propres fonctions • Variables locales et variables de classe • Passage de paramètres par valeur • Classes et objets• Exemple : la classe String et ses méthodes • Construire et utiliser ses propres classes • Les données de type static • Passage de para-mètres par référence • La notion d’encapsulation des données • Constructeurs d’objets • Héritage et polymorphisme. Programmationobjet avancée et interfaces graphiques. Tableaux à une et deux dimensions • Programmation dynamique : listes et dictionnaires• Types génériques • L’archivage des données : fichiers texte et fichiers d’objets • Gestion des exceptions • Programmation d’interfacesgraphiques : la librairie AWT et la librairie Swing • Construire une fenêtre • Dessiner dans une fenêtre • Gérer les événements liés auclavier et à la souris • Créer une interface graphique avec NetBeans • Gestion de bulletins de notes • Un éditeur pour dessiner. Annexe.Guide d’utilisation du CD-Rom • Installation d'un environnement de développement sous Windows, Mac et Linux • Utilisation des outilsde développement.

Sur le CD-Rom offert avec ce livre• J2SE avec JDK6 et NetBeans 6.1 : tous les outils pour créer des applications Java avec une interface graphique conviviale,

sous Windows, Linux et Mac• Corrigés du projet et des exercices• Code source de tous les programmes

Plate-forme requise : PC avec processeur Pentium 233 MHz ou plus • Windows Vista, XP, 2000 ou NT • Linux Red Hat 2.1 ou plus• Mac OS X 10.5 ou 10.4 • 128 Mo RAM recommandés • 400 Mo d'espace disque pour l'installation minimale.

Sur le site www.editions-eyrolles.com• Dialoguez avec l'auteur

97

82

21

21

23

76

0

Code

édite

ur :

G123

76 •

ISBN

: 97

8-2-

212-

1237

6-0

29,90 €

A.

Tass

o

Anne TassoMaître de conférences à l'université de Marne-la-Vallée, Anne Tasso enseigne le langage de programmation Java,en formation initiale et continue, au sein du département SRC (Services et réseaux de communication) de l'IUTde Marne-la-Vallée. Elle est également l'auteur des ouvrages Initiation à JSP et Apprendre à programmer enActionScript 3, tous deux parus aux éditions Eyrolles.

5e éd

ition

5e éd

ition

Le l

ivre deJa

vapr

emie

rla

ngag

etasso 1/08/08 14:00 Page 1

partie n° 3 Outils et techniques orientés objet

382 © Éditions Eyrolles

Grâce au panneau Inspector, nous pourrons nommer les composants et modifier leur hiérarchies’ils contiennent d’autres composants.

Vous vous familiariserez rapidement avec l’utilisation de ces panneaux et en cernerez l’impor-tance dès la mise en place du premier exemple présenté à la section suivante, « Une premièreapplication avec NetBeans ».

Une première application avec NetBeansLa création d’une application Java munie d’une interface de communication graphiques’effectue en deux étapes.

1. Choisir, placer et nommer à l’écran les objets permettant l’interaction avec l’utilisateur.Il s’agit, par exemple, de définir s’il est préférable de proposer à l’utilisateur un choixd’options sous la forme d’un menu ou d’un ensemble de cases à cocher.

2. Écrire, pour chaque élément d’interaction choisi, les actions à mener. Par exemple, si l’appli-cation affiche un bouton Quitter, il convient d’écrire en Java, l’instruction System.exit(0)à l’intérieur de la fonction qui traite ce bouton.

Examinons sur un exemple simple et « bien connu », à savoir « calculer le périmètre d’uncercle », comment réaliser chacune de ces étapes.

Cahier des charges

L’objectif est de créer et d’afficher la fenêtre représentée à la figure 12-13.

La fenêtre est composée de plusieurs éléments graphiques :

● un champ de saisie (voir figure 12-13-�) qui permet à l’utilisateur de transmettre à l’appli-cation la valeur du rayon du cercle dont il souhaite connaître le périmètre ;

● un bouton pour valider la saisie d’une valeur pour le rayon puis, calculer le périmètredu cercle (voir figure 12-13-�) ;

● deux zones de texte (voir figure 12-13-�) pour placer une information spécifique(« Rayon : » et « Périmètre : »). Ces textes resteront identiques tout au long de l’exécutionde l’application ;

Figure 12-13 Calculer le périmètre d’un cercle

© Éditions Eyrolles 383

chapitre n° 12 Créer une interface graphique

● une zone (voir figure 12-13-�) pour afficher le périmètre du cercle après validation. Lavaleur sera modifiée à chaque fois que l’utilisateur saisira une nouvelle valeur.

Mise en place des éléments graphiques

La mise en place des composants graphiques dans la fenêtre d’application s’effectue par unsimple glisser-déposer des composants du panneau Palette vers le fond de la fenêtre (JFrame)visible sur le panneau Design.

Les champs de texte

Dans le panneau Palette, les champs de texte sont représentés par le composant Label(JLabel). Les éléments sont placés dans la fenêtre de l’application, comme le montre lafigure 12-14-�.

Observez que pour chaque champ de texte ajouté, le nom du composant ajouté s’affiche dansle panneau Inspector (voir figure 12-14-�).

Le nom des objets placés dans la fenêtre comporte, par défaut, le nom du composant qu’ilreprésente suivi d’un chiffre qui correspond à son numéro d’ordre de création. Ce nom estporté deux fois par le composant, dans le panneau Inspector et dans le panneau Design :

● Dans le panneau Inspector, ce nom représente le nom de l’objet utilisé par le code sourceautogénéré. Pour rendre ce code plus lisible et faciliter la programmation ultérieure, vousdevez modifier ces noms.

Figure 12-14 Les champs de texte sont des composants de type Label.

partie n° 3 Outils et techniques orientés objet

384 © Éditions Eyrolles

Ainsi, nous appelons jLabel1, rayonLabel, jLabel2, perimetreLabel, jLabel3et resultatLabel les objets utilisés dans ce premier exemple. Pour cela, vous devez,dans le panneau Inspector, cliquer deux fois sur chaque élément jLabel1, jLabel2, etc.,en laissant un petit temps d’attente entre les deux clics. Cela fait, le nom du composantsélectionné est surligné en bleu et vous pouvez alors modifier son nom. Le composantchange définitivement de nom après validation par la touche Entrée du clavier (voirfigure 12-15-�).

Lorsque vous modifiez le nom d’un composant par l’intermédiaire du panneau Inspector, Net-Beans se charge alors de modifier le nom de toutes les occurrences de ce composant qui pour-raient se trouver dans le code source associé.

● Dans le panneau Design, ce nom représente le texte affiché par le composant lors de l’exé-cution du programme (voir figure 12-15-�). Vous devez remplacer ces noms par du textecorrespondant à ce que vous souhaitez obtenir comme information. Ainsi, tels qu’ils sontsitués dans le panneau, le texte jLabel1 doit être remplacé par Rayon : , jLabel2 parPérimètre : et jLabel3 par 0.

Le champ resultatLabel affiche le résultat de l’opération qui consiste à calculer lepérimètre d’un cercle. La première fois que l’application est lancée, la valeur du rayonn’est pas encore donnée, c’est pourquoi nous affichons 0 comme valeur par défaut.

Figure 12-15 Nommer les composants dans le panneau Inspector (�) et modifier le texte à afficher dans le panneau Design (�)

© Éditions Eyrolles 385

chapitre n° 12 Créer une interface graphique

Le champ de saisie

Les champs de saisie sont représentés, dans le panneau Palette, par le composant Text Field(JTextField). Le champ de saisie est placé dans la fenêtre de l’application, juste après lechamp de texte rayonLabel, comme le montre la figure 12-13-�.

Dans le panneau Inspector, nous nommons les champs de saisie jTextField1 et saisieRayon et indiquons comme valeur d’affichage par défaut, la valeur 0.

Les composants JTextField et JLabel ont par défaut un alignement horizontal à gauche(texte ferré à gauche). Pour modifier cette propriété, il suffit d’ouvrir le panneau Properties encliquant droit sur le composant à modifier et en sélectionnant l’item Properties du menucontextuel qui apparaît alors.

Dans le panneau Properties (voir figure 12-16), sélectionnez la propriété horizontalAlignmentsur la colonne de gauche et choisissez la valeur Right dans la menu qui apparaît lorsque l’onclique sur la colonne de droite.

Le bouton

Pour finir, plaçons le bouton de validation dans la fenêtre d’application, comme le montre lafigure 12-13-.

Les boutons sont représentés, dans le panneau Palette, par le composant Button (JButton).Dans le panneau Inspector, nous nommons le bouton jButton1, calculerBtn et plaçonscomme texte d’affichage Calculer.

Figure 12-16 Modifier la propriété horizontalAlignment du champ de saisie saisieRayon

partie n° 3 Outils et techniques orientés objet

386 © Éditions Eyrolles

Ainsi, lorsque tous les composants sont placés dans la fenêtre d’application, nous obtenons lepanneau Inspector présenté en figure 12-17.

Ajustement et positionnement des composants

Afin de rendre l’interface plus agréable à l’œil, faisons en sorte que tous les composants soientde même largeur. Pour cela, il suffit de :

1. sélectionner les composants soit dans le panneau Inspector, soit directement dans le pan-neau Design en maintenant la touche Maj enfoncée pour réaliser une sélection multiple ;

2. cliquer droit sur la sélection et choisir l’item Same Size puis Same width (voir figure 12-18).

Figure 12-17 Le panneau Inspector de l’application CercleSwing.java

Figure 12-18 Ajuster la taille des composants

© Éditions Eyrolles 387

chapitre n° 12 Créer une interface graphique

Le menu contextuel apparaissant suite au clic droit, sur un ou plusieurs composants de l’appli-cation, permet de modifier la taille et la position des éléments les uns par rapport aux autres oupar rapport au fond de la fenêtre (item Anchor).

Enfin, pour modifier la taille de la fenêtre de votre application, placez le curseur de la souris enbas à droite de la zone grise représentant le fond de votre interface. Lorsque apparaît uncurseur en forme d’angle droit, vous pouvez procéder de deux façons différentes :

1. Cliquer et tirer l’angle pour augmenter ou diminuer la taille de la fenêtre.

2. Double-cliquer sur l’angle. Une boîte de dialogue apparaît alors, affichant la largeur et lahauteur de la fenêtre de l’application. Vous pouvez modifier directement ces valeurs.

Définir le comportement des objets graphiques

Tous les éléments graphiques sont maintenant en place, mais l’application ne réalise pasencore de calcul. Pour cela, nous allons devoir « entrer » dans le code de l’application afin d’yinsérer les instructions qui vont permettre de calculer puis d’afficher le périmètre du cercle.

Le code autogénéré par NetBeans

Dans un premier temps, examinons le code construit par NetBeans (voir figure 12-19) dans lepanneau Source.

Le code, tel qu’il se présente lorsqu’on clique sur l’onglet Source, semble relativement simple.En réalité, il est plus complexe qu’il n’y paraît. Une grande partie du code est cachée. Pour levisualiser, il vous suffit de cliquer sur les signes + se trouvant en marge gauche de l’éditeur.

Sans entrer dans le détail du code généré par NetBeans, nous allons décomposer sa structure(voir figure 12-19-� à ) pour mieux comprendre son fonctionnement.

� Les composants graphiques créés par simple glisser-déposer de la bibliothèque vers le fondde l’application sont déclarés comme propriété de l’application, à la fin de la définition dela classe CercleSwing. Nous retrouvons ici les noms calculBtn, perimetreLabel,etc., que nous avons pris soin de définir dans le panneau Inspector à l’étape précédente(voir la section « Mise en place des éléments graphiques »).

� La fonction main() est, comme nous en avons pris l’habitude tout au long de ce livre, lepoint d’entrée du programme. Ici, les instructions qui la composent sont cependant un peuplus complexes. Nous allons tenter de les rendre compréhensibles en les examinant plusprécisément.

Comment centrer le bouton Calculer dans la fenêtre d’application ?

Pour centrer le bouton Calculer :

1. Sélectionnez l’intégralité des composants de l’application puis cliquez droit sur la sélection.

2. Choisissez l’item Align puis Center to Column.

partie n° 3 Outils et techniques orientés objet

388 © Éditions Eyrolles

La fonction main() utilise deux outils dont nous n’avons pas encore parlé : invoke-Later() et Runnable. Ces deux outils font référence à la notion de thread que l’ontraduit en français par « unités de traitement ».

Un thread est une portion de code, un traitement spécifique capable de s’exécuter en mêmetemps que d’autres traitements.

Toutes les applications construites à l’aide d’interfaces graphiques utilisent la notion dethread puisqu’elles exécutent plusieurs traitements en même temps et ce, de façon indé-pendante. Ces traitements sont, par exemple, la saisie d’une valeur dans un champ desaisie en même temps que l’affichage d’une aide contextuelle dans une fenêtre dédiée.

Figure 12-19 Code source de l’application CercleSwing généré par NetBeans

© Éditions Eyrolles 389

chapitre n° 12 Créer une interface graphique

Pour exécuter les différents thread, la librairie graphique Swing utilise une pile d’événe-ments afin de répartir dans le temps leur traitement. La librairie Swing propose égalementplusieurs méthodes pour traiter cette pile. Ici, par exemple, la méthode utilisée estinvokeLater(), laquelle permet de traiter les événements de façon asynchrone pouréviter de bloquer les éventuels autres threads en attente.

La méthode invokeLater() demande, en paramètre, la portion de code à traiter defaçon asynchrone. C’est ce qui est réalisé par la suite d’instructions :

new Runnable() {

public void run() {

new CercleSwing().setVisible(true);

}

}

Runnable est une classe abstraite, une interface dont le mode de comportement définipar le programmeur doit être écrit au sein de la méthode run().

Les notions de classe abstraite et d’interface sont décrites au chapitre 9, « Dessiner desobjets », section « Les événements ».

Pour notre application, le comportement à exécuter en mode asynchrone consiste à appelerle constructeur CercleSwing(). La classe CercleSwing héritant des qualités et métho-des de la classe JFrame (extends javax.swing.JFrame), l’objet issu du constructeurest une fenêtre qui devient visible grâce à l’appel de la méthode setVisible(true).

Plus classiquement, nous aurions pu écrire la fonction main() comme suit :

public static void main(String args[]) {

// Définition du thread et de son comportement

Runnable traitement = new Runnable() {

public void run() {

// Création d’une fenêtre définie par la classe

// CercleSwing

CercleSwing fenetre = new CercleSwing();

// Rendre visible la fenêtre

fenetre.setVisible(true);

};

};

// Traiter le thread traitement en mode asynchrone

java.awt.EventQueue.invokeLater(traitement);

}

� Le constructeur CercleSwing() appelle la méthode initComponents(), laquelleest entièrement générée par NetBeans.

partie n° 3 Outils et techniques orientés objet

390 © Éditions Eyrolles

La méthode initComponents() n’est pas directement visible lorsqu’on clique surl’onglet Source. Pour examiner l’intégralité du code, cliquez sur le signe + situé en margegauche, à la hauteur du texte Generated Code.

Nous ne nous attarderons pas sur ce code. Il est long, fastidieux et ce seul chapitre nesuffirait pas à le décrire entièrement. Pour simplifier, il suffit juste de comprendre quel’ensemble des instructions qui le composent permet le placement et l’affichage des com-posants tels que vous les avez souhaités dans le panneau Design.

Associer une action à un bouton

Une fois compris le code autogénéré par NetBeans, examinons comment réaliser le calcul dupérimètre d’un cercle. Celui-ci s’effectue lorsqu’on clique sur le bouton Calculer. Pour asso-cier l’action de calcul au clic sur le bouton, nous devons ajouter un gestionnaire d’événementsau bouton Calculer (nommé calculerBtn).

La notion d’événements est traitée à la section « Les événements » du chapitre 9,« Dessiner des objets ».

Sous NetBeans, l’ajout d’un gestionnaire sur un composant graphique s’effectue comme suit(voir figure 12-20).

1. Dans le panneau Design, sélectionnez le bouton Calculer.

2. Cliquez droit sur le composant.

3. Sélectionnez l’item Events, puis Action, puis actionPerformed, dans l’enchaînement demenus et sous-menus qui apparaissent.

Le panneau Source s’affiche et laisse apparaître une nouvelle méthode :

private void calculerBtnActionPerformed(java.awt.event.ActionEvent

evt) {

// TODO add your handling code here:

}

Figure 12-20 Associer un événement au bouton Calculer

© Éditions Eyrolles 391

chapitre n° 12 Créer une interface graphique

Les instructions qui réalisent le calcul du périmètre d’un cercle sont à insérer dans la méthodecalculerBtnActionPerformed() créée par NetBeans. Ces instructions sont au nombrede trois :

� Récupérer la valeur du rayon saisie dans le champ de saisie saisieRayon.

� Calculer le périmètre.

� Afficher le périmètre dans le champ de texte resultatLabel.

Ces instructions s’écrivent en Java :

// � Récupérer la valeur du rayon saisie dans le champ de saisie

// saisieRayon

double rayon = Double.parseDouble(saisieRayon.getText());

// � Calculer le périmètre

double perimetre = 2* Math.PI* rayon;

// � Afficher le périmètre dans le champ de texte resultatLabel

resultatLabel.setText(Double.toString(perimetre));

Les deux principales méthodes à retenir sont : getText() et setText().

La méthode getText() retourne, sous forme de chaîne de caractères, la valeur saisie parl’utilisateur dans le champ de saisie sur lequel est appliquée la méthode. Ici, il s’agit du champsaisieRayon. La valeur retournée par la méthode est de type String alors que le rayon estune valeur numérique de type double. L’utilisation de la méthode parseDouble() permetla transformation d’une chaîne de caractères en valeur de type double.

À l’inverse, la méthode setText() affiche le texte placé en paramètre dans le champ de textesur lequel est appliqué la méthode. Ici, il s’agit du texte correspondant à la valeur calculée dupérimètre. Cette valeur est numérique, la méthode toString() transforme cette valeur enune chaîne de caractères.

La méthode toString() est également étudiée à la section « Rechercher le code Uni-code d’un caractère donné » du chapitre 4, « Faire des répétitions ».

Les trois lignes de code présentées ci-avant sont à insérer dans la fonction calculerBtnActionPerformed() comme suit :

private void calculerBtnActionPerformed(java.awt.event.ActionEvent

evt) {

// Récupérer la valeur du rayon saisie dans le champ de saisie

// saisieRayon

double rayon = Double.parseDouble(saisieRayon.getText());

// Calculer le périmètre

double perimetre = 2 * Math.PI * rayon;

// Afficher le périmètre dans le champ de texte resultatLabel

resultatLabel.setText(Double.toString(perimetre));

}

partie n° 3 Outils et techniques orientés objet

392 © Éditions Eyrolles

La méthode calculerBtnActionPerformed() est une méthode particulière que l’onnomme dans le jargon de la programmation événementielle, un gestionnaire d’événements.

Exécuter l’application

Pour voir enfin s’afficher l’application CercleSwing, vous devez lancer l’exécution duprogramme. Pour cela, cliquez sur le petit triangle vert situé au centre de la barre d’outils deNetBeans ou appuyez sur la touche F6 de votre clavier.

Si aucune erreur de compilation ou d’exécution n’est détectée, vous devez voir apparaître lafenêtre avec un rayon et un périmètre égaux à 0 (voir figure 12-21-�). Après saisie d’unevaleur pour le rayon et validation en cliquant sur le bouton Calculer, le résultat s’affiche à lasuite du label « Périmètre : » (voir figure 12-21-�).

Gestion de bulletins de notes

Pour parfaire nos connaissances en construction d’applications Java munies d’interfacesgraphiques conviviales, nous vous proposons de créer une application permettant la création etla gestion de bulletins de notes d’étudiants.

Figure 12-21 Exécution de l’application CercleSwing.java