30.07.2015 Views

La documentation en PDF - Louis SWINNEN

La documentation en PDF - Louis SWINNEN

La documentation en PDF - Louis SWINNEN

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Programmation <strong>en</strong> JavaIntroduction à la programmation visuelle etl’exploitation des donnéesSLPack 0.5.0par <strong>Louis</strong> <strong>SWINNEN</strong>dernière révision : 08/04/13Ce docum<strong>en</strong>t est disponible sous lic<strong>en</strong>ce Creative Commons indiquant qu’il peut êtrereproduit, distribué et communiqué pour autant que le nom de l’auteur reste prés<strong>en</strong>t,qu’aucune utilisation commerciale ne soit faite à partir de celui-ci et que le docum<strong>en</strong>t ne soitni modifié, ni transformé, ni adapté.http://creativecommons.org/lic<strong>en</strong>ses/by-nc-nd/2.0/be/<strong>La</strong> Haute Ecole Libre Mosane (HELMo) attache une grande importance au respect des droits d’auteur.C’est la raison pour laquelle nous invitons les auteurs dont une oeuvre aurait été, malgré tous nosefforts, reproduite sans autorisation suffisante, à contacter immédiatem<strong>en</strong>t le service juridique de laHaute Ecole afin de pouvoir régulariser la situation au mieux.Avril 2013


Programmation <strong>en</strong> JavaIntroduction à la programmation visuelle et l’exploitation desdonnéespar <strong>Louis</strong> <strong>SWINNEN</strong>1. IntroductionCe docum<strong>en</strong>t a pour but d’introduire à la programmation d’interface visuelle simple aumoy<strong>en</strong> du langage Java. Pour ce faire, il est nécessaire de disposer du composant SLPack.Ce docum<strong>en</strong>t décrit la version 0.5.0 de ce composant. <strong>La</strong> dernière version de ce composantet la <strong>docum<strong>en</strong>tation</strong> l’accompagnant sont disponibles sur le site internet :http://www.swila.be1.1 SLPack, de quoi s’agit-il ?SLPack est un composant développé pour simplifier la programmation d’interface visuelle. Cecomposant est développé dans un but pédagogique uniquem<strong>en</strong>t : r<strong>en</strong>dre laprogrammation d’interface visuelle ainsi que l’exploitation des bases de données<strong>en</strong> Java accessibles aux débutants.Lorsque l’étudiant étudiera, de manière approfondie, le langage Java, l’utilisation de cecomposant ne sera plus nécessaire.Si vous souhaitez partager votre expéri<strong>en</strong>ce avec ce composant (signaler un problème,demander une modification quelconque), il suffit de vous r<strong>en</strong>dre sur la page du projet, sur lesite internet suivant :http://www.swila.beSeule la version « compilée » est disponible sous forme de librairie indép<strong>en</strong>dante (un fichierJar). Ce composant est compatible avec la version 5.0 ou supérieur de Java.1.2 Installation de SLPack<strong>La</strong> procédure d’installation consiste à placer le composant SLPack dans un dossier de votrechoix et <strong>en</strong>suite de référ<strong>en</strong>cer celui-ci. Le composant SLPack pr<strong>en</strong>d la forme de fichiers Jar(c’est-à-dire des classes compilées et directem<strong>en</strong>t utilisables).Dans votre <strong>en</strong>vironnem<strong>en</strong>t de développem<strong>en</strong>t (par exemple sous NetBeans, Eclipse ouIntelliJ), il faut indiquer, dans votre projet, le li<strong>en</strong> vers le composant SLPack à utiliser.• Par exemple dans NetBeans, il faut ajouter les fichiers JAR dans votre projet. Pource faire, dans la section Libraries (panneau de gauche), faire un clic-droit et choisirAdd Jar/Folders et sélectionner les fichiers JAR nécessaires à votre application.• Sous Eclipse, il est possible lors de la création du projet Java d’indiquer des librairesparticulières. Ainsi dans la f<strong>en</strong>être Java Settings, choisir l’onglet Libraries et <strong>en</strong>suiteAdd External JARs et sélectionner les fichiers JAR. Si le projet est déjà créé, il estpossible d’ajouter les libraires <strong>en</strong> faisant un clic-droit sur le nom du projet et <strong>en</strong>choisissant Properties. Ensuite, l’option Java Build Path fait apparaître une série© HELMo Informatique, 2013 2


d’onglets. Choisir dans l’onglet Librairies l’option Add External JARs et sélectionner lesfichiers JARs à intégrer.• Sous IntelliJ, il faut ajouter égalem<strong>en</strong>t le composant SLPack. Pour ce faire, dans leprojet (panneau de gauche), faire un clic-droit sur Libraries et choisir Jump ToSource. Les paramètres du projet sont alors affichés, choisir dans la section Librairies,l’icône + au sommet. Ensuite, il faut donner un nom à ces librairies, comme parexemple SLPack et <strong>en</strong>fin, dans le panneau de droite, choisir l’option Attach Classes etchoisir les librairies à ajouter.En dehors de l’<strong>en</strong>vironnem<strong>en</strong>t de développem<strong>en</strong>t, il faut modifier la variable d’<strong>en</strong>vironnem<strong>en</strong>tCLASSPATH afin que celle-ci pointe vers les fichiers JAR. Ainsi, sous Windows, il fauteffectuer les étapes suivantes (<strong>en</strong> administrateur) :• Sous Windows XP : Clic-droit sur le poste de travail, choisir Propriétés puis l’ongletAvancé et cliquer sur Variables d’<strong>en</strong>vironnem<strong>en</strong>t.Sous Windows Vista/7 : Clic-droit sur Ordinateur puis choisir Propriétés puis, dansles tâches qui apparaiss<strong>en</strong>t à gauche, choisir Paramètres système avancés et <strong>en</strong>suitecliquer sur Variables d’<strong>en</strong>vironnem<strong>en</strong>t.• Dans la section Variables système, localiser la variable PATH (qui indique le cheminde recherche par défaut) et modifiez celle-ci pour ajouter le chemin vers les fichierssystèmes Java. Ainsi, si votre compilateur Java est installé dans C:\ProgramFiles\Java\jdk1.6.0_06, ajoutez ceci à la fin de la valeur existante :;C:\Program Files\Java\jdk1.6.0_06\bin• Egalem<strong>en</strong>t dans la section Variables système, vérifiez si la variable CLASSPATH estdéfinie. Si ce n’est pas le cas, il faut créer une nouvelle variable, sinon modifier lavariable existante. Il faut ici ajouter le chemin vers le composant SLPack installé survotre machine. Si, comme à l’école, le composant est installé dans un répertoireSLPack dans le dossier Program Files, la variable CLASSPATH doit cont<strong>en</strong>irnotamm<strong>en</strong>t le chemin suivant :C:\Program Files\SLPack\slpack.jarSous les systèmes basés Unix, il faut réaliser les mêmes modifications. Par exemple, sousLinux, si vous avez installé le compilateur Java et le composant SLPack dans le répertoire/opt, vous devez adapter la variable PATH et CLASSPATH comme sous Windows.Le plus simple est d’ajouter le fichier suivant dans le répertoire /etc/profile.d :Fichier /etc/profile.d/java.sh#! /bin/bashJAVA_HOME=/opt/jdk1.6.0_06PATH=$PATH:$JAVA_HOME/binCLASSPATH=$CLASSPATH:/opt/SLPack/slpack.jarexport JAVA_HOME PATH CLASSPATHIl reste <strong>en</strong>suite à r<strong>en</strong>dre ce script exécutable soit <strong>en</strong> ajoutant la permission execute parl’interface graphique, ou <strong>en</strong> <strong>en</strong>trant dans un terminal la commande suivante :chmod +x /etc/profile.d/java.shUne fois cette modification effectuée, il suffit de redémarrer la machine et l’<strong>en</strong>vironnem<strong>en</strong>tJava est prêt à être utilisé.© HELMo Informatique, 2013 3


1.3 Installation des librairies externesDepuis la version 0.4 de SLPack, un nouveau composant simplifié d’accès aux bases dedonnées SQL Server et Oracle est proposé. Cep<strong>en</strong>dant, afin que celui-ci fonctionne, il estnécessaire de disposer des drivers JDBC adéquats fournis par Oracle et Microsoft.Pour des raisons de copyright, ces drivers JDBC ne peuv<strong>en</strong>t être fournis directem<strong>en</strong>t avecSLPack mais doiv<strong>en</strong>t être téléchargé par l’utilisateur et intégré à l’<strong>en</strong>vironnem<strong>en</strong>t dedéveloppem<strong>en</strong>t. Voici les composants à télécharger :• Pilote JDBC 2.0 Microsoft SQL Server :http://www.microsoft.com/downloads/details.aspx?familyid=99B21B65-E98F-4A61-B811-19912601FDC9&displaylang=fr• Pilote JDBC Oracle Express Edition (XE) – 2 fichiers :http://download.oracle.com/otn/utilities_drivers/jdbc/10204/ojdbc14.jarhttp://download.oracle.com/otn/utilities_drivers/jdbc/10204/orai18n.jarUne fois ces drivers téléchargés, il faut les inclure dans l’<strong>en</strong>vironnem<strong>en</strong>t de développem<strong>en</strong>t.<strong>La</strong> procédure est id<strong>en</strong>tique à celle vue précédemm<strong>en</strong>t pour inclure la bibliothèque SLPack. Eneffet, tous ces drivers JDBC sont des librairies JAR.A titre d’information, tous les drivers JDBC sont installés sur les ordinateurs de l’école dans lerépertoire C:\Program Files\JDBC. Il suffit de localiser les fichiers JAR et les inclure dansle projet pour pourvoir établir une connexion vers la base de données.Si la librairie est mal installée, la connexion à la base de données échouera avec un messagedu type « Error while loading the JDBC Driver (driver not found, not in classpath, …) ». Ilconvi<strong>en</strong>t dans ce cas de vérifier à nouveau la configuration afin d’être sûr que les driverssont bi<strong>en</strong> prés<strong>en</strong>ts.Il n’y a aucune objection à installer l’<strong>en</strong>semble des librairies dans le même répertoire. Ainsi,il est possible de rassembler les fichiers suivants :• SLPack.jar – librairie SLPack• ojdbc14.jar et orai18n.jar – Pilote JDBC de Oracle• sqljdbc4.jar – Pilote JDBC de Microsoft SQL Server© HELMo Informatique, 2013 4


2. Utilisation de SLPackNous allons maint<strong>en</strong>ant détailler l’utilisation de SLPack. Nous verrons :• <strong>La</strong> structure de base d’un programme SLPack• Les différ<strong>en</strong>ts composants graphiques disponibles• <strong>La</strong> gestion des évènem<strong>en</strong>ts• Les différ<strong>en</strong>tes « fonctions » (on parle plutôt de méthodes dans les langagesori<strong>en</strong>tés-objets) disponiblesCe docum<strong>en</strong>t ne montrera pas comm<strong>en</strong>t SLPack a été créé, bi<strong>en</strong> que cela ne soit pas bi<strong>en</strong>compliqué. En guise d’application, les étudiants plus avancés <strong>en</strong> Java peuv<strong>en</strong>t se risquer àcet exercice.2.1 Structure d’un programme SLPackComme il s’agit d’un programme Java, il faut respecter les règles inhér<strong>en</strong>tes au langageJava. Celles-ci ne seront pas détaillées dans ce docum<strong>en</strong>t. Reportez-vous à vos notesconcernant Java <strong>en</strong> cas de doute. Vous pouvez égalem<strong>en</strong>t trouver beaucoup d’élém<strong>en</strong>ts dansl’excell<strong>en</strong>t livre Thinking in Java [1] 1 ou <strong>en</strong>core dans les livres de référ<strong>en</strong>ce Core Java [2] [3].Le squelette du programme SLPack sera au moins le suivant :import SLPack.SLForm;public class MonProgramme ext<strong>en</strong>ds SLForm {public static void main(String [] args) {MonProgramme p = new MonProgramme();}public MonProgramme() {// insérer le code source ici}}public void action(String id) {// insérer la gestion des événem<strong>en</strong>ts ici}Code 1 : Squelette minimal d’un programme SLPackAtt<strong>en</strong>tion ! Le langage Java impose que le nom de votre fichier Java soit id<strong>en</strong>tiqueau nom de la classe. Ainsi, pour le squelette proposé (voir code 1), le fichier doit porter l<strong>en</strong>om MonProgramme.java.Si vous souhaitez changer le nom de votre fichier, assurez vous de modifier votre codesource Java <strong>en</strong> conséqu<strong>en</strong>ce. Ainsi, si je souhaite que mon fichier se nomme Exervice1.java,il convi<strong>en</strong>t de changer tous les noms MonProgramme (<strong>en</strong> rouge dans code 1) <strong>en</strong> Exercice1.Dans le squelette minimal, on trouve les élém<strong>en</strong>ts suivants :1. <strong>La</strong> clause import qui assure que le composant SLPack est inséré.2. <strong>La</strong> définition de la classe qui conti<strong>en</strong>dra le programme principal. Comme indiqué cidessus,il faut que le nom de la classe et le nom du fichier source java1 Les élém<strong>en</strong>ts <strong>en</strong>tre crochets sont des référ<strong>en</strong>ces à la bibliographie© HELMo Informatique, 2013 5


correspond<strong>en</strong>t. <strong>La</strong> définition de la classe conti<strong>en</strong>t le mot clé ext<strong>en</strong>ds indiquant qu’ellehérite du composant SLForm.Le composant SLForm représ<strong>en</strong>te une f<strong>en</strong>être graphique. Nous <strong>en</strong> reparlerons plustard.3. <strong>La</strong> méthode (ou fonction) main qui sera exécutée lorsque nous lancerons cetteapplication. Cette méthode main standard crée un objet. Aucune modification ne doitêtre faite ici.4. <strong>La</strong> méthode MonProgramme (le nom doit être celui du fichier Java et celui prés<strong>en</strong>tdans la méthode main) conti<strong>en</strong>dra le code à exécuter, comme l’indique lecomm<strong>en</strong>taire.5. <strong>La</strong> méthode (ou fonction) action est appelée automatiquem<strong>en</strong>t lorsque l’utilisateurclique sur un composant visuel bouton. Elle est obligatoire dans tous vos programmesSLPack.2.2 Premier programme SLPackDans notre premier programme, nous allons calculer l’aire et le périmètre d’un rectangle.Voici la f<strong>en</strong>être que nous souhaitons obt<strong>en</strong>ir :F<strong>en</strong>être 1 : Application PremierExempleCette f<strong>en</strong>être conti<strong>en</strong>t de 3 types de composants graphiques :• des labels : des zones textes non modifiables par l’utilisateur• des textfields : des champs de saisie• des buttons : des boutons permettant de décl<strong>en</strong>cher des actions.Le bouton calculer doit permettre de calculer l’aire et le périmètre <strong>en</strong> fonction des longueurset largeurs introduites par l’utilisateur. L’utilisateur doit pouvoir effectuer autant d’essais qu’ille souhaite, simplem<strong>en</strong>t <strong>en</strong> modifiant les champs longueur et largeur et <strong>en</strong> cliquant ànouveau sur le bouton calculer.Le bouton quitter doit permettre de quitter l’application. Il faut égalem<strong>en</strong>t qu’un clic sur lacroix <strong>en</strong> haut à droite (sous Microsoft Windows) provoque la fin du programme.Nous allons maint<strong>en</strong>ant détailler le code et <strong>en</strong>suite, partant de celui-ci, expliquer les conceptset possibilités de SLPack.© HELMo Informatique, 2013 6


import SLPack.SLForm;public class PremierExemple ext<strong>en</strong>ds SLForm {public static void main(String [] args) {PremierExemple pe = new PremierExemple();}public PremierExemple() {// insérer le code source icisetDim<strong>en</strong>sion(3,4,80);setTitle("Aire rectangle");add<strong>La</strong>bel("lbLongueur", "Longueur:", 0, 0);addTextField("tfLongueur", "", 0, 1);add<strong>La</strong>bel("lb<strong>La</strong>rgeur", "<strong>La</strong>rgeur:", 1, 0);addTextField("tf<strong>La</strong>rgeur", "", 1, 1);add<strong>La</strong>bel("lbAire", "Aire:", 0, 2);add<strong>La</strong>bel("lbAireResultat", "", 0, 3);add<strong>La</strong>bel("lbPerimetre", "Périmètre:", 1, 2);add<strong>La</strong>bel("lbPerimetreResultat", "", 1, 3);addButton("btCalculer", "Calculer", 2, 2);addButton("btQuitter", "Quitter", 2, 3);setVisible(true);}}public void action(String id) {// insérer la gestion des événem<strong>en</strong>ts iciif(id.equals("btQuitter")) { quit(); }else if(id.equals("btCalculer")) {float longueur = getFloat("tfLongueur");float largeur = getFloat("tf<strong>La</strong>rgeur");if(Float.isNaN(longueur) || Float.isNaN(largeur)) {setText("lbAireResultat", "Erreur donnée");setText("lbPerimetreResultat", "Erreur donnée");} else {setFloat("lbAireResultat", longueur*largeur);setFloat("lbPerimetreResultat", 2*(longueur+largeur));}}}Code 2 : Premier programme (PremierExemple.java)Le code coloré <strong>en</strong> bleu représ<strong>en</strong>te les mots clés du langage Java. Le code coloré <strong>en</strong> vertreprés<strong>en</strong>te les méthodes (ou fonctions) spécifiques du composant SLPack. Les élém<strong>en</strong>tscolorés <strong>en</strong> gris sont des comm<strong>en</strong>taires.Le placem<strong>en</strong>t des composants est réalisé dans la méthode PremierExemple. Onremarque que l’on comm<strong>en</strong>ce par définir la taille de la f<strong>en</strong>être (on <strong>en</strong> parlera plus tard).Ensuite, on définit le titre de la f<strong>en</strong>être, on ajoute les différ<strong>en</strong>ts composants :• Ajout de texte via les labels. On peut ajouter autant de texte que souhaité <strong>en</strong> utilisantla méthode / fonction add<strong>La</strong>bel.• Ajout de champs de saisie (ou TextField) afin de permettre à l’utilisateur d’<strong>en</strong>coderdes informations (comme la longueur et la largeur dans cet exemple). Les champs desaisie sont ajoutés avec la méthode / fonction addTextField.• Ajout de boutons pour décl<strong>en</strong>cher des actions. Dans notre cas il s’agit des boutonsCalculer et Quitter. Les boutons sont ajoutés avec la méthode / fonction addButton.Lorsque l’utilisateur clique sur un bouton, il décl<strong>en</strong>che une action. L’action estprogrammée dans la méthode action.© HELMo Informatique, 2013 7


<strong>La</strong> méthode action décrit les actions à décl<strong>en</strong>cher lorsqu’un utilisateur clique sur unbouton. Ainsi, lorsque l’utilisateur clique sur un bouton placé dans une f<strong>en</strong>être, il fautassocier un comportem<strong>en</strong>t (des instructions) particulier.Lorsque l’utilisateur clique sur le bouton Calculer, il faut afficher les résultats dans la f<strong>en</strong>être.Lorsque l’utilisateur clique sur le bouton Quitter, il faut sortir du programme. Il est possiblede distinguer le bouton sur lequel l’utilisateur a cliqué (Calculer ou Quitter) grâce auparamètre id prés<strong>en</strong>t dans la méthode / fonction action. Le paramètre id repr<strong>en</strong>d l’id<strong>en</strong>tifiantdu bouton sur lequel l’utilisateur a cliqué.Att<strong>en</strong>tion ! Les champs de saisie ne permett<strong>en</strong>t pas de faire des vérifications (comme scanf).Ri<strong>en</strong> n’interdit à l’utilisateur d’<strong>en</strong>trer une donnée incorrecte par rapport à ce qui est att<strong>en</strong>du.S’il r<strong>en</strong>tre un caractère à la place de la longueur, il y aura une erreur.<strong>La</strong> f<strong>en</strong>être 2 montre un tel exemple.F<strong>en</strong>être 2 : erreur dans la saisie des donnéesOn voit que la barre d’information annonçant la version est passée <strong>en</strong> couleur rouge. Celaindique qu’une erreur s’est produite dans le composant SLPack. Il faut alors examiner laconsole pour id<strong>en</strong>tifier le problème (ici, erreur de conversion du champ longueur vers unfloat).2.3 <strong>La</strong> f<strong>en</strong>être, la taille et le placem<strong>en</strong>t des composantsDans SLPack, la f<strong>en</strong>être est divisée <strong>en</strong> ligne et colonne (comme on peut le voir sur la f<strong>en</strong>être3). Les objets sont alors placés dans une « case » particulière de la f<strong>en</strong>être. On peutégalem<strong>en</strong>t m<strong>en</strong>tionner la hauteur et la largeur de chaque composant.Ainsi, dans l’exemple (f<strong>en</strong>être 3), nous avons une f<strong>en</strong>être de taille 3 lignes x 4 colonnes.Nous avons décidé de placer :• Des labels dans les cases suivantes : (0,0) ; (0,2) ; (0,3) ; (1,0) ; (1,2) ; (1,3)• Des textfields dans les cases suivantes : (0,1) ; (1,1)• Des buttons dans les cases suivantes : (2,2) ; (2,3)Il reste 2 cases vides aux positions (2,0) et (2,1).© HELMo Informatique, 2013 8


F<strong>en</strong>être 3 : f<strong>en</strong>être et composantsPour déterminer la taille de la f<strong>en</strong>être, il faut utiliser la méthode setDim<strong>en</strong>sion. Cette fonction/ méthode permet d’indiquer le nombre de lignes et le nombre de colonnes souhaités. Ellepermet égalem<strong>en</strong>t de m<strong>en</strong>tionner la taille minimale de chaque composant. Nous décrironsexactem<strong>en</strong>t cette fonction plus loin.En ce qui concerne le placem<strong>en</strong>t des composants, chaque méthode d’ajout de composantadd<strong>La</strong>bel, addButton et addTextField pr<strong>en</strong>d comme paramètre la position de ce composantet sa taille exprimée <strong>en</strong> nombre de cases. Si la taille n’est pas précisée, la taille par défautest 1 case <strong>en</strong> hauteur et 1 case <strong>en</strong> largeur.© HELMo Informatique, 2013 9


3. Les composantsLe package SLPack permet d’utiliser 5 types de composants graphiques. Il y a les boutons,les zones de texte, les champs de saisie, la liste déroulante et les tables.Chaque composant est id<strong>en</strong>tifié au moy<strong>en</strong> d’une chaîne de caractère. Il ne peut y avoir deuxcomposants ayant même valeur comme id<strong>en</strong>tifiant. Les id<strong>en</strong>tifiants serv<strong>en</strong>t à gérer lesactions sur ces composants.3.1 Le boutonLe bouton est un composant permettant à l’utilisateur de commander l’application. Lorsqu’unutilisateur clique sur un bouton, il décl<strong>en</strong>che une action programmée. Les boutons serontdonc utilisés pour commander l’application.L’aspect graphique d’un bouton est :Le bouton est ajouté dans la f<strong>en</strong>être par la méthode addButton. Il faut donner un id<strong>en</strong>tifiantau bouton. Par conv<strong>en</strong>tion, on utilisera un id<strong>en</strong>tifiant comm<strong>en</strong>çant par les lettres bt.<strong>La</strong> gestion des événem<strong>en</strong>ts est expliquée dans la section 4.3.2 <strong>La</strong> zone de texte (ou label)<strong>La</strong> zone de texte est une zone permettant d’afficher un texte donné. Le texte n’est paséditable. Il peut être fixé par le programmeur au mom<strong>en</strong>t de la création du composant ouêtre fixé par après.Dans le code 2, nous avons des textes dont la valeur est spécifiée à la création ducomposant (par exemple pour le label id<strong>en</strong>tifié par lbAire) ou lors de l’exécution duprogramme (par exemple pour le label id<strong>en</strong>tifié par lbAireResultat) et la fonction setFloat.L’aspect graphique d’une zone de texte est :<strong>La</strong> zone de texte est ajoutée dans la f<strong>en</strong>être par la méthode add<strong>La</strong>bel. Il faut donner unid<strong>en</strong>tifiant au label. Par conv<strong>en</strong>tion, on utilisera un id<strong>en</strong>tifiant comm<strong>en</strong>çant par les lettres lb.Les méthodes (comme setFloat) pour modifier le cont<strong>en</strong>u d’un composant seront vues dansla section 5.3.3 Le champ de saisie (ou TextField)Le champ de saisie est un champ permettant à l’utilisateur d’<strong>en</strong>coder une donnée. Le champde saisie est éditable par l’utilisateur. Le programmeur peut fixer une valeur à l’intérieur(bi<strong>en</strong> que la plupart du temps, le champ de saisie est vide) lors de la création du composantou par après.© HELMo Informatique, 2013 10


Dans le code 2, nous avons créé des champs de saisie vides pour permettre à l’utilisateurd’<strong>en</strong>coder le périmètre et l’aire. Ces champs étai<strong>en</strong>t id<strong>en</strong>tifiés par tfLongueur et tf<strong>La</strong>rgeur.Puisqu’il s’agit de données introduites par l’utilisateur, il faut pouvoir récupérer la valeur deces données. Cela se fait grâce aux méthodes getText, getFloat, getInteger ou getDouble.L’aspect graphique d’un champ de saisie est :Le champ de saisie est ajouté dans la f<strong>en</strong>être par la méthode addTextField. Il fautm<strong>en</strong>tionner un id<strong>en</strong>tifiant au textfield. Par conv<strong>en</strong>tion, on utilisera un id<strong>en</strong>tifiant comm<strong>en</strong>çantpar les lettres tf.Les méthodes (comme getFloat) pour lire le cont<strong>en</strong>u d’un composant seront vues dans lasection 5.3.4 <strong>La</strong> liste déroulante<strong>La</strong> liste déroulante est un composant graphique permettant à l’utilisateur de choisir unevaleur parmi une liste de chaînes de caractères déjà établie. Le cont<strong>en</strong>u initial est fixé par leprogrammeur lors de la création du composant.L’aspect graphique d’une liste déroulante est :<strong>La</strong> liste déroulante est ajoutée dans la f<strong>en</strong>être par la méthode addComboBox ouaddExt<strong>en</strong>dedComboBox. Il faut m<strong>en</strong>tionner un id<strong>en</strong>tifiant à la combobox. Par conv<strong>en</strong>tion, onutilisera un id<strong>en</strong>tifiant comm<strong>en</strong>çant par les lettres cb (pour une ComboBox standard) ou ecb(pour une Ext<strong>en</strong>dedComboBox).Les méthodes pour récupérer l’élém<strong>en</strong>t sélectionné (comme getSelectedIndex), poursélectionner un élém<strong>en</strong>t (comme setSelectedIndex), pour fixer la liste de valeur (commesetListComboBox ou setListComboBoxExt<strong>en</strong>ded) ou récupérer la liste de valeur (viagetListComboBox ou getListExt<strong>en</strong>dedComboBox) sont décrites dans la section 6.3.5 <strong>La</strong> case à cocher (ou Checkbox)<strong>La</strong> case à cocher (ou checkbox) est un composant graphique permettant à l’utilisateurd’activer ou non une option particulière. Elle peut pr<strong>en</strong>dre deux valeurs : cochée ou noncochée.L’aspect graphique d’une case à cocher est :<strong>La</strong> case à cocher est ajoutée dans la f<strong>en</strong>être par la méthode addCheckBox. Il fautm<strong>en</strong>tionner un id<strong>en</strong>tifiant à la checkbox. Par conv<strong>en</strong>tion, on utilisera un id<strong>en</strong>tifiantcomm<strong>en</strong>ça,t par les lettres cbx.Les méthodes pour connaître l’état coché ou non de la case (comme getSelectedIndex), oupour modifier l’état (comme setSelectedIndex) sont décrites dans la section 6.© HELMo Informatique, 2013 11


3.6 <strong>La</strong> table<strong>La</strong> table est un composant graphique permettant d’afficher un tableau à 2 dim<strong>en</strong>sions.Toutes les cases sont éditables. Le cont<strong>en</strong>u initial peut être fixé par le programmeur lors dela création du composant.Lorsque le programmeur a besoin de récupérer les données cont<strong>en</strong>ues dans la table, il peutfaire appel aux méthodes getIntegerTable, getFloatTable, getDoubleTable ougetStringTable .Le programmeur peut égalem<strong>en</strong>t connaître la ligne sélectionnée par l’utilisateur au moy<strong>en</strong> dela méthode getSelectedIndex qui retourne l’index dans la table de la ligne sélectionnée.Enfin, la ligne des titres peut égalem<strong>en</strong>t être fixée par le programmeur au moy<strong>en</strong> de laméthode setTitleTable ou lors de la création de la table.L’aspect graphique d’une table (d’<strong>en</strong>tier) est :<strong>La</strong> table est ajoutée dans la f<strong>en</strong>être par la méthode addArray. Il faut donner un id<strong>en</strong>tifiant àla table. Par conv<strong>en</strong>tion, on utilisera un id<strong>en</strong>tifiant comm<strong>en</strong>çant par les lettres tb.Les méthodes pour récupérer le cont<strong>en</strong>u du composant (comme getIntegerTable), pourconnaître la ligne ou les lignes sélectionnées (comme getSelectedIndex ougetSelectedIndexes) ou celles pour modifier le cont<strong>en</strong>u du composant (commesetIntegerTable) seront vues dans la section 6.<strong>La</strong> table peut avoir un aspect un peu différ<strong>en</strong>t. En effet, s’il s’agit d’une table de chaine decaractères, dans certains cas, il est possible de faire apparaître dans une colonne une case àcocher. Nous verrons cet aspect dans la section 6 égalem<strong>en</strong>t.3.7 Le panneau de texte (ou TextPane, HTMLPane)Le panneau de texte (ou textpane ou htmlpane) est un composant graphique permettantd’afficher un texte assez long (avec asc<strong>en</strong>seur si nécessaire), pouvant s’ét<strong>en</strong>dre sur plusieurslignes, dans une f<strong>en</strong>être.© HELMo Informatique, 2013 12


<strong>La</strong> taille du composant est fixe et si le texte est important, celui-ci sera arrangé pour t<strong>en</strong>irdans le panneau <strong>en</strong> faisant apparaitre des barres de défilem<strong>en</strong>t si cela s’avère nécessaire.L’aspect graphique d’un panneau de texte est :Le panneau de texte peut être ajouté à la f<strong>en</strong>être par la méthode addTextPane ouaddHTMLPane. <strong>La</strong> première version (i.e. TextPane) autorise du texte sans mise <strong>en</strong> formealors que la seconde (i.e. HTMLPane) permet une mise <strong>en</strong> forme HTML. Il faut m<strong>en</strong>tionnerun id<strong>en</strong>tifiant au textpane ou htmlpane. Par conv<strong>en</strong>tion, on utilisera un id<strong>en</strong>tifiantcomm<strong>en</strong>çant par les lettres tp ou hp.Lors de l’ajout du panneau, il est possible de m<strong>en</strong>tionner si le texte est modifiable ou non.Les méthodes getText et setText peuv<strong>en</strong>t être utilisées pour récupérer le texte <strong>en</strong> cours oupour changer ce texte.© HELMo Informatique, 2013 13


4. Les événem<strong>en</strong>tsLorsqu’un utilisateur clique sur un bouton dans la f<strong>en</strong>être, il faut décl<strong>en</strong>cher une action. Enfait, lorsqu’un utilisateur décl<strong>en</strong>che une telle action, la méthode action est appelée.Le schéma 1 montre l’action décl<strong>en</strong>chée par l’utilisateur lorsque celui-ci clique sur le boutonid<strong>en</strong>tifié par btQuitter.L’utilisateur cliquesur le boutonpublic void action(String id){btQuitterbtQuitter}Schéma 1 : décl<strong>en</strong>chem<strong>en</strong>t d’un événem<strong>en</strong>tComme précisé plus haut, lorsqu’un utilisateur clique sur le bouton, la méthode action estautomatiquem<strong>en</strong>t appelée. Afin d’id<strong>en</strong>tifier clairem<strong>en</strong>t le bouton sur lequel l’utilisateur acliqué, le paramètre id conti<strong>en</strong>t l’id<strong>en</strong>tifiant du bouton sur lequel l’utilisateur a cliqué.Dans notre schéma 1, id pr<strong>en</strong>d la valeur btQuitter qui est l’id<strong>en</strong>tifiant du bouton Quitter. Decette manière, si notre f<strong>en</strong>être propose plusieurs boutons, nous serons toujours capablesd’id<strong>en</strong>tifier clairem<strong>en</strong>t le choix de l’utilisateur. Il suffit, pour ce faire, de comparer la valeurde id avec les id<strong>en</strong>tifiants de chaque bouton.Le code 2 montre un exemple d’utilisation avec deux boutons, btQuitter et btCalculer :if(id.equals("btQuitter")) {action à programmer lors d’un clic sur le bouton quitter.} else if(id.equals("btCalculer")) {action à programmer lors d’un clic sur le bouton calculer.}Dans notre système simplifié, il n’est possible de capturer les événem<strong>en</strong>ts que sur lesboutons. Il convi<strong>en</strong>t donc d’utiliser les boutons pour commander l’application.© HELMo Informatique, 2013 14


5. Construction de la f<strong>en</strong>êtreDans cette section, nous allons détailler les méthodes avec précision afin de permettrel’utilisation du composant SLPack. Les méthodes sont proposées dans l’ordre logique de leurutilisation.5.1 setDim<strong>en</strong>sionvoid setDim<strong>en</strong>sion(int row, int col, int minimumSize)void setDim<strong>en</strong>sion(int row, int col, boolean sameSize)Comme montré ci-dessus, il existe 2 versions de la méthode setDim<strong>en</strong>sion. Dans les deuxcas, les 2 premiers paramètres sont communs et permett<strong>en</strong>t de déterminer la taille de laf<strong>en</strong>être <strong>en</strong> nombre de cases. Il faut spécifier le nombre de lignes (dans le paramètre row) etle nombre de colonnes (dans le paramètre col).Dans la 1 ère version, le dernier paramètre est un <strong>en</strong>tier minimumSize définissant la tailleminimale d’une case.Dans la 2 ème version, le dernier paramètre est un boolé<strong>en</strong> déterminant si toutes les casesdoiv<strong>en</strong>t avoir la même largeur ou pas.Il faut définir la taille de la f<strong>en</strong>être avant de placer des composants à l’intérieur.Si vous oublier de m<strong>en</strong>tionner une taille de f<strong>en</strong>être, le système crée une f<strong>en</strong>êtrede taille 3 lignes x 3 colonnes.Si vous t<strong>en</strong>tez de définir la taille de la f<strong>en</strong>être après avoir placé un composant,vous recevrez un message d’erreur.Exemple :setDim<strong>en</strong>sion (3, 4, 80);Cet appel définit la taille de la f<strong>en</strong>être à 3 lignes et 4 colonnes (donc 12 cases) avec unetaille minimale pour les cases de 80 points (ou pixel).setDim<strong>en</strong>sion (3,3, true);Cet appel définit la taille de la f<strong>en</strong>être à 3 lignes et 3 colonnes (donc 9 cases). Chaque caseayant une taille id<strong>en</strong>tique (la taille de la plus grande case sera utilisée).setDim<strong>en</strong>sion(5,3, false);Cet appel définit la taille de la f<strong>en</strong>être à 5 lignes et 3 colonnes (donc 15 cases). Les casesayant des tailles proportionnelles à leur cont<strong>en</strong>u.5.2 setTitlevoid setTitle(String title)Cette méthode permet de fixer le titre de la f<strong>en</strong>être à la chaîne title passée <strong>en</strong> paramètre.Exemple :setTitle ("Calcul rectangle");Place le titre « Calcul rectangle » à la f<strong>en</strong>être.© HELMo Informatique, 2013 15


5.3 addButtonboolean addButton(String id, String cont<strong>en</strong>t, int row, int col)boolean addButton(String id, String cont<strong>en</strong>t, int row, int col, int width,int height)<strong>La</strong> seconde version de la méthode est la version la plus complète. Ces méthodes permett<strong>en</strong>tde placer un bouton dans la f<strong>en</strong>être. Lorsqu’on ajoute un bouton, il faut préciser les donnéessuivantes :• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractère. Cetid<strong>en</strong>tifiant permet de déterminer si un utilisateur a cliqué sur ce bouton.• cont<strong>en</strong>t – détermine le texte à placer dans le bouton• row – détermine la ligne dans laquelle le bouton doit être placé. <strong>La</strong> première ligneest la ligne 0.• col – détermine la colonne dans laquelle le bouton doit être placé. <strong>La</strong> premièrecolonne est la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case où lebouton sera placé• width – détermine la largeur <strong>en</strong> nombre de colonnes du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.<strong>La</strong> fonction retourne un boolé<strong>en</strong> indiquant si le bouton a pu être placé dans la (ou les)case(s) m<strong>en</strong>tionnée(s).Exemple :addButton ("btCalculer", "Calculer", 2,2);Cet appel ajoute un bouton id<strong>en</strong>tifié par btCalculer dont le texte visible est calculer dans lacase (2,2) - donc 3 ème ligne, 3 ème colonne. <strong>La</strong> hauteur et la largeur par défaut (1 case) estutilisée.5.4 add<strong>La</strong>belboolean add<strong>La</strong>bel(String id, String cont<strong>en</strong>t, int row, int col)boolean add<strong>La</strong>bel(String id, String cont<strong>en</strong>t, int row, int col, int width,int height)<strong>La</strong> seconde version de la méthode est la plus complète. Ces méthodes permett<strong>en</strong>t de placerun texte non modifiable (appelé label) dans la f<strong>en</strong>être. Lorsqu’on ajoute un label, il fautpréciser les données suivantes :• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractère. Cetid<strong>en</strong>tifiant permet de modifier le texte ou d’<strong>en</strong> obt<strong>en</strong>ir la valeur.• cont<strong>en</strong>t – détermine le texte à placer dans la zone.• row – détermine la ligne dans laquelle le label doit être placé. <strong>La</strong> première ligne estla ligne 0.• col – détermine la colonne dans laquelle le label doit être placé. <strong>La</strong> premièrecolonne est la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case où lelabel sera placé• width – détermine la largeur <strong>en</strong> nombre de colonnes du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.© HELMo Informatique, 2013 16


<strong>La</strong> fonction retourne un boolé<strong>en</strong> indiquant si le bouton a pu être placé dans la (ou les)case(s) m<strong>en</strong>tionnée(s).Exemple :add<strong>La</strong>bel ("lbAire", "Aire", 0,2);Cet appel ajoute un label id<strong>en</strong>tifié par lbAire dont le texte affiché est Aire dans la case (0,2)- donc 1 ère ligne, 3 ème colonne. <strong>La</strong> hauteur et la largeur par défaut (1 case) est utilisée.5.5 addTextFieldboolean addTextField(String id, String cont<strong>en</strong>t, int row, int col)boolean addTextField(String id, String cont<strong>en</strong>t, int row, int col,int width, int height)<strong>La</strong> seconde version de la méthode est la plus complète. Ces méthodes permett<strong>en</strong>t de placerun champ de saisie (appelé TextField) dans la f<strong>en</strong>être. Lorsqu’on ajoute un TextField, il fautpréciser les données suivantes :• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractère. Cetid<strong>en</strong>tifiant permet d’obt<strong>en</strong>ir le texte <strong>en</strong>tré ou d’<strong>en</strong> fixer la valeur.• cont<strong>en</strong>t – détermine le texte par défaut à placer dans la zone.• row – détermine la ligne dans laquelle le TextField doit être placé. <strong>La</strong> première ligneest la ligne 0.• col – détermine la colonne dans laquelle le TextField doit être placé. <strong>La</strong> premièrecolonne est la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case où lelabel sera placé• width – détermine la largeur <strong>en</strong> nombre de colonnes du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.<strong>La</strong> fonction retourne un boolé<strong>en</strong> indiquant si le TextField a pu être placé dans la (ou les)case(s) m<strong>en</strong>tionnée(s).Exemple :addTextField ("tf<strong>La</strong>rgeur", "", 1,1);Cet appel ajoute un textfield id<strong>en</strong>tifié par tf<strong>La</strong>rgeur sans texte par défaut (l’utilisateur devraremplir la zone) dans la case (1,1) - donc 2 ème ligne, 2 ème colonne. <strong>La</strong> hauteur et la largeurpar défaut (1 case) est utilisée.Affiche la f<strong>en</strong>être construite précédemm<strong>en</strong>t.5.6 addComboBoxboolean addComboBox(String id, String[] cont<strong>en</strong>t, int row, int col)boolean addComboBox(String id, String[] cont<strong>en</strong>t, int row, int col, intwidth, int height)Ces méthodes permett<strong>en</strong>t d’ajouter une liste déroulante simple dans une f<strong>en</strong>être. Les valeursinitiales sont données <strong>en</strong> paramètre. Par défaut, la première valeur est sélectionnée et© HELMo Informatique, 2013 17


affichée. Lorsqu’on ajoute une liste déroulante dans une f<strong>en</strong>être, il faut préciser les donnéessuivantes :• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractère. Cetid<strong>en</strong>tifiant permet d’obt<strong>en</strong>ir les valeurs de la liste, par la suite.• cont<strong>en</strong>t – détermine la source des données. Il doit s’agir d’un tableau cont<strong>en</strong>antdes données de type String.• row – détermine la ligne à laquelle la liste doit être placée. <strong>La</strong> première ligne est laligne 0.• col – détermine la colonne à laquelle la liste doit être placée. <strong>La</strong> première colonneest la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case début cont<strong>en</strong>antle composant• width – détermine la largeur <strong>en</strong> nombre de colonne du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.5.7 addExt<strong>en</strong>dedComboBoxboolean addExt<strong>en</strong>dedComboBox(String id, String[][] cont<strong>en</strong>t,int row, int col)boolean addExt<strong>en</strong>dedComboBox(String id, String[][] cont<strong>en</strong>t, int row, intcol, int width, int height)Ces méthodes permett<strong>en</strong>t d’ajouter une liste déroulante ét<strong>en</strong>due dans une f<strong>en</strong>être. Lesvaleurs initiales sont données <strong>en</strong> paramètre. Par défaut, la première valeur est sélectionnéeet affichée. Lorsqu’on ajoute une liste déroulante dans une f<strong>en</strong>être, il faut préciser lesdonnées suivantes :• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractères. Cetid<strong>en</strong>tifiant permet d’obt<strong>en</strong>ir les valeurs de la liste, par la suite.• cont<strong>en</strong>t – détermine la source des données. Il doit s’agir d’un tableau à 2dim<strong>en</strong>sions cont<strong>en</strong>ant des données de type String. Seule la dernière colonne estaffichée dans la combobox, les autres colonnes ne sont pas affichée mais sontprés<strong>en</strong>tes dans le composant. Par exemple, pour garder l’id<strong>en</strong>tifiant et les valeurs.• row – détermine la ligne à laquelle la liste doit être placée. <strong>La</strong> première ligne est laligne 0.• col – détermine la colonne à laquelle la liste doit être placée. <strong>La</strong> première colonneest la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case début cont<strong>en</strong>antle composant• width – détermine la largeur <strong>en</strong> nombre de colonne du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.5.8 addCheckBoxboolean addCheckBox(String id, String cont<strong>en</strong>t, int row, int col)boolean addCheckBox(String id, String cont<strong>en</strong>t, int row, int col, int width,int height)Ces méthodes permett<strong>en</strong>t d’ajouter une case à cocher dans une f<strong>en</strong>être. <strong>La</strong> case est, pardéfaut, non cochée (pour changer le statut, il est nécessaire d’appeler la méthodesetSelectedIndex sur ce composant). Lorsqu’on ajoute une case à cocher dans une f<strong>en</strong>être, ilfaut préciser les données suivantes :© HELMo Informatique, 2013 18


• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractères. Cetid<strong>en</strong>tifiant permet d’obt<strong>en</strong>ir l’état de la case, par la suite.• cont<strong>en</strong>t – détermine le texte qui sera affiché à côté de la case.• row – détermine la ligne à laquelle la case doit être placée. <strong>La</strong> première ligne est laligne 0.• col – détermine la colonne à laquelle la case doit être placée. <strong>La</strong> première colonneest la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case début cont<strong>en</strong>antle composant• width – détermine la largeur <strong>en</strong> nombre de colonne du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.5.9 addArrayboolean addArray(String id, int[][] cont<strong>en</strong>t, int row, int col)boolean addArray(String id, int[][] cont<strong>en</strong>t, int row, int col, int width,int height)boolean addArray(String id, int[][] cont<strong>en</strong>t, String[] title, int row,int col, int width, int height)boolean addArray(String id, float[][] cont<strong>en</strong>t, int row, int col)boolean addArray(String id, float[][] cont<strong>en</strong>t, int row, int col,int width, int height)boolean addArray(String id, float[][] cont<strong>en</strong>t, String[] title, int row,int col, int width, int height)boolean addArray(String id, double[][] cont<strong>en</strong>t, int row, int col)boolean addArray(String id, double[][] cont<strong>en</strong>t, int row, int col,int width, int height)boolean addArray(String id, double[][] cont<strong>en</strong>t, String[] title, int row,int col, int width, int height)boolean addArray(String id, String[][] cont<strong>en</strong>t, int row, int col)boolean addArray(String id, String[][] cont<strong>en</strong>t, String[] title, int row,int col, int width, int height)Ces méthodes permett<strong>en</strong>t d’afficher un tableau dans une f<strong>en</strong>être. Le tableau est affiché et<strong>en</strong>tièrem<strong>en</strong>t modifiable. Lorsqu’on ajoute un tableau dans une f<strong>en</strong>être, il faut préciser lesdonnées suivantes :• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractère. Cetid<strong>en</strong>tifiant permet d’obt<strong>en</strong>ir les valeurs de la table, par la suite.• cont<strong>en</strong>t – détermine la source des données. Il doit s’agir d’un tableau à 2dim<strong>en</strong>sions cont<strong>en</strong>ant des données de type int, float, double ou String.• title – détermine la ligne de titre. Il doit s’agir d’un tableau de String dont l<strong>en</strong>ombre de colonnes doit correspondre à celui des données. Cet élém<strong>en</strong>t n’est pasobligatoire.• row – détermine la ligne à laquelle la table doit être placée. <strong>La</strong> première ligne est laligne 0.• col – détermine la colonne à laquelle la table doit être placée. <strong>La</strong> première colonneest la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case début cont<strong>en</strong>antle composant© HELMo Informatique, 2013 19


• width – détermine la largeur <strong>en</strong> nombre de colonne du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.5.10 addTextPane et addHTMLPaneboolean addTextPane(String id, String cont<strong>en</strong>t, boolean isEditable, int row,int col)boolean addTextPane(String id, String cont<strong>en</strong>t, boolean isEditable, int row,int col, int width, int height)boolean addHTMLPane(String id, String cont<strong>en</strong>t, boolean isEditable, int row,int col)boolean addHTMLPane(String id, String cont<strong>en</strong>t, boolean isEditable, int row,int col, int width, int height)Ces méthodes permett<strong>en</strong>t d’ajouter un panneau de texte (sans mise <strong>en</strong> forme) ou HTML(avec mise <strong>en</strong> forme) dans une f<strong>en</strong>être. Le panneau conti<strong>en</strong>t le texte passé <strong>en</strong> paramètre etpeut être modifié si l’on m<strong>en</strong>tionne cette option. Lorqu’on ajoute un panneau de texte ouHTML dans une f<strong>en</strong>être, il faut préciser les données suivantes :• id – l’id<strong>en</strong>tifiant de ce composant sous la forme d’une chaîne de caractères. Cetid<strong>en</strong>tifiant permet d’obt<strong>en</strong>ir le texte courant du panneau, par la suite.• cont<strong>en</strong>t – détermine le texte qui sera affiché dans le panneau.• isEditable – détermine si le texte peut être modifié par l’utilisateur dans laf<strong>en</strong>être. <strong>La</strong> valeur false empêche toute édition alors que la valeur true permet àl’utilisateur de modifier le texte <strong>en</strong> question.• row – détermine la ligne à laquelle le panneau doit être placé. <strong>La</strong> première ligne estla ligne 0.• col – détermine la colonne à laquelle le panneau doit être placé. <strong>La</strong> premièrecolonne est la colonne 0. Associé à la valeur précéd<strong>en</strong>te, nous avons la case débutcont<strong>en</strong>ant le composant• width – détermine la largeur <strong>en</strong> nombre de colonne du composant. Si elle n’est pasm<strong>en</strong>tionnée, la largeur par défaut est 1.• height – détermine la hauteur <strong>en</strong> nombre de lignes du composant. Si celle-ci n’estpas m<strong>en</strong>tionnée, la hauteur par défaut est 1.Exemple :String description = "Ce disque dur externe peut être utilisé sur tous lestype d’ordinateur, il a une capacité de 2 To et se connecte <strong>en</strong> USB 3" ;addTextPane ("tpDescription", description, true, 1,1, 3, 2);String HTMLDescription = " Cedisque dur externe peut être utilisé sur tous les type d’ordinateur, il aune capacité de 2 To et se connecte <strong>en</strong> USB 3";addHTMLPane ("thDescription", HTMLDescription, false, 2,1, 4, 3);Dans ce premier exemple, un panneau de texte est ajouté dans la f<strong>en</strong>être. Il conti<strong>en</strong>t letexte qui se trouve dans la donnée description. Il est éditable par l’utilisateur et estpositionné aux coordonnées 1, 1 et occupe 3 colonnes et 2 lignes. S’il faut récupérer lecont<strong>en</strong>u modifié par l’utilisateur, il faut utiliser la méthode getText décrite au point 6.2.Inversem<strong>en</strong>t, s’il faut placer un texte précis dans le panneau, il convi<strong>en</strong>t d’utiliser la méthodesetText décrite au point 6.3.© HELMo Informatique, 2013 20


Dans le second exemple, un panneau HTML est ajouté dans la f<strong>en</strong>être. Il conti<strong>en</strong>t le textemis <strong>en</strong> forme qui se trouve dans la donnée HTMLDescription. Il n’est pas modifiable et estpositionné aux coordonnées 2, 1 et occupe 4 colonnes et 3 lignes. Les méthodes getText etsetText peuv<strong>en</strong>t être utilisées pour, respectivem<strong>en</strong>t, obt<strong>en</strong>ir ou modifier le texte. Il faut noterla manière dont le format HTML est inséré : comme celui-ci doit cont<strong>en</strong>ir des guillemets, ilest nécessaire de placé le caractère backslah (\) devant afin que Java ne confonde pas cesguillemets avec la fin de la chaîne de caractères.5.11 setVisiblevoid setVisible(boolean value)Cette méthode permet d’afficher ou de cacher la f<strong>en</strong>être. Le paramètre de cette méthodeest :• value – qui est un boolé<strong>en</strong>. Si la valeur est true, le système construit la f<strong>en</strong>être etplace les différ<strong>en</strong>ts composants à l’intérieur et r<strong>en</strong>d cette f<strong>en</strong>être visible. Si la valeurest false, le système cache la f<strong>en</strong>être.Cette méthode doit être appelée une seule fois lorsque tous les composants ont été placéssur la f<strong>en</strong>être.Exemple :setVisible(true);5.12 messageOKBoxint messageOKBox(String message)Cette méthode permet d’afficher une petite f<strong>en</strong>être d’information repr<strong>en</strong>ant le messagepassé <strong>en</strong> paramètre. Utile pour informer l’utilisateur d’un événem<strong>en</strong>t.<strong>La</strong> valeur <strong>en</strong>tière retournée est 0.Exemple :messageOKBox("<strong>La</strong> valeur <strong>en</strong>trée n’est pas valide");5.13 messageYESNOBoxint messageYESNOBox(String message)Cette méthode permet d’afficher une f<strong>en</strong>être de confirmation avec les boutons OUI, NON etANNULER. Le message affiché dans la f<strong>en</strong>être est celui passé <strong>en</strong> paramètre.<strong>La</strong> valeur <strong>en</strong>tière retournée dép<strong>en</strong>d du bouton sur lequel l’utilisateur a cliqué. S’il a cliquésur le bouton :© HELMo Informatique, 2013 21


• OUI, la valeur retournée est 0• NON, la valeur retournée est 1• ANNULER, la valeur retournée est 2• De fermeture de la f<strong>en</strong>être (la croix <strong>en</strong> haut à droite), la valeur retournée est -1Exemple :rep = messageYESNOBox("Voulez-vous quitter ? ");5.14 inputIntegerBoxint inputIntegerBox(String message)Cette méthode permet de demander à l’utilisateur une valeur <strong>en</strong>tière. Une f<strong>en</strong>être spécifiqueapparaît avec le message passé <strong>en</strong> paramètre.<strong>La</strong> valeur <strong>en</strong>tière retournée est celle saisie par l’utilisateur pour autant que le format estcorrect ou la valeur particulière Integer.MIN_VALUE (plus petite valeur représ<strong>en</strong>table surun <strong>en</strong>tier) <strong>en</strong> cas d’erreur ou d’abandon de la saisie (choix du bouton annuler oufermeture par la croix <strong>en</strong> haut à droite de la f<strong>en</strong>être).Exemple :age = inputIntegerBox("Entrez l’age :");if(age == Integer.MIN_VALUE) { // Erreur dans la saisie }5.15 inputFloatBoxfloat inputFloatBox(String message)Cette méthode permet de demander à l’utilisateur de saisir une valeur réelle. Une f<strong>en</strong>êtrespécifique apparaît avec le message passé <strong>en</strong> paramètre.<strong>La</strong> valeur réelle retournée est celle saisie par l’utilisateur pour autant que le format soitcorrect ou la valeur particulière Float.NaN (problème de conversion) <strong>en</strong> cas d’erreur oud’abandon de la saisie (choix du bouton annuler ou fermeture par la croix <strong>en</strong> haut à droitede la f<strong>en</strong>être).Exemple :longueur = inputFloatBox("Entrez la longueur :");© HELMo Informatique, 2013 22


if(Float.isNaN(longueur)) { // Erreur dans la saisie }5.16 inputDoubleBoxdouble inputDoubleBox(String message)Cette méthode permet de demander à l’utilisateur de saisir une valeur réelle précise. Unef<strong>en</strong>être spécifique apparaît avec le message passé <strong>en</strong> paramètre.<strong>La</strong> valeur double retournée est celle saisie par l’utilisateur pour autant que le format soitcorrect ou la valeur particulière Double.NaN (problème de conversion) <strong>en</strong> cas d’erreurou d’abandon de la saisie (choix du bouton annuler ou fermeture par la croix <strong>en</strong> haut àdroite de la f<strong>en</strong>être).Exemple :largeur = inputDoubleBox("Entrez la largeur :");if(Double.isNaN(largeur)) { // Erreur dans la saisie }5.17 inputStringBoxString inputStringBox(String message)Cette méthode permet de demander à l’utilisateur de saisir une chaîne de caractère. Unef<strong>en</strong>être spécifique apparaît avec le message passé <strong>en</strong> paramètre.<strong>La</strong> chaîne retournée est celle saisie par l’utilisateur ou la référ<strong>en</strong>ce null si l’utilisateur choisitle bouton annuler ou clique sur la croix (<strong>en</strong> haut à droite).Exemple :nom = inputStringBox("Entrez votre nom :");if(nom == null) { // Abandon de la saisie }© HELMo Informatique, 2013 23


5.18 inputFileChooserBoxString inputFileChooserBox()Cette méthode permet à l’utlisateur d’aller sélectionner un fichier <strong>en</strong> parcourant les fichierset répertoire de son ordinateur. S’il choisit d’abandonner la sélection, la méthode retourne laréfér<strong>en</strong>ce null sinon le chemin complet vers le fichier sélectionné est retourné.Exemple :nomFichier = inputFileChooserBox() ;L’exécution de cette méthode <strong>en</strong>traînera l’affichage d’une f<strong>en</strong>être standard de sélection dontnous pouvons voir un exemple ci-dessous.6. Méthodes usuelles6.1 Comm<strong>en</strong>t quitter ? les méthodes quit et canQuitvoid quit()boolean canQuit()© HELMo Informatique, 2013 24


<strong>La</strong> méthode quit() est la méthode qui doit être appelée pour quitter l’application. Cetteméthode appelle la méthode canQuit(). En fonction du résultat, l’application se termine ounon.<strong>La</strong> méthode quit() est égalem<strong>en</strong>t appelée automatiquem<strong>en</strong>t lorsque l’utilisateur cliquesur la croix de fermeture de la f<strong>en</strong>être (<strong>en</strong> haut à droite).<strong>La</strong> méthode canQuit() permet :• de demander à l’utilisateur une confirmation ;• de libérer toutes les ressources nécessaires (sauvegarde et fermeture de fichiers, …)• de clôturer les opérations avant de quitterSi la méthode canQuit() retourne true, l’application se ferme. Si la méthode canQuit()retourne false, l’application reste active.Une méthode canQuit() par défaut est déjà programmée et retourne la valeur true. Ilvous est possible de changer cette méthode pour l’adapter à vos besoins.Exemple :public boolean canQuit() {int rep ;rep = messageYESNOBox("Voulez-vous vraim<strong>en</strong>t quitter ?");return(rep == 0); // Si l’utilisateur clique sur Oui -> true}public void action(String id) {if(id.equals("btCalculer")) {...} else if(id.equals("btQuitter")) {quit();}}Dans cet exemple, par la programmation de la méthode canQuit(), nous avons choisi deprogrammer une confirmation avant de quitter. Si l’utilisateur clique sur le bouton Quitter(id<strong>en</strong>tifié dans le code par btQuitter) ou si l’utilisateur clique sur la croix de fermeture de laf<strong>en</strong>être (<strong>en</strong> haut à droite), la méthode canQuit() est exécutée et une demande deconfirmation est affichée à l’écran. L’utilisateur peut choisir de confirmer ou d’annuler lafermeture de l’application.6.2 Extraire une valeur d’un composantString getText(String id)double getDouble(String id)float getFloat(String id)int getInteger(String id)Ces méthodes permett<strong>en</strong>t d’extraire le cont<strong>en</strong>u d’un composant sous la forme d’une chaînede caractères (pour getText()), d’un réel précis (pour getDouble()), d’un réel (pourgetFloat()) ou d’un <strong>en</strong>tier (pour getInteger()).Le paramètre id doit désigner l’id<strong>en</strong>tifiant d’un composant existant dans la f<strong>en</strong>être. Sil’id<strong>en</strong>tifiant désigne un composant de type :© HELMo Informatique, 2013 25


• label – les méthodes retourn<strong>en</strong>t le texte affiché• textfield – les méthodes retourn<strong>en</strong>t le texte saisi par l’utilisateur• button – les méthodes retourn<strong>en</strong>t le texte du boutonPour les tables, des méthodes particulières sont utilisées. Elles sont détaillées ci-dessous.Si, lors de la conversion, une erreur survi<strong>en</strong>t, ces méthodes retourn<strong>en</strong>t des valeursparticulières :• getDouble() retourne la valeur Double.NaN <strong>en</strong> cas d’erreur de conversion• getFloat() retourne la valeur Float.NaN <strong>en</strong> cas d’erreur de conversion• getInteger() retourne la valeur Integer.MIN_VALUE <strong>en</strong> cas d’erreur deconversionExemples :age = getInteger("tfAge");longueur = getFloat("lbLongueur");double largeur = getDouble("tf<strong>La</strong>rgeur");String texteBouton = getString("btQuitter");Dans cet exemple, l’age est extrait du composant tfAge. En cas d’erreur de conversion de lavaleur <strong>en</strong>tière (si l’utilisateur n’<strong>en</strong>tre pas une valeur valide), age pr<strong>en</strong>dra la valeurInteger.MIN_VALUE.<strong>La</strong> longueur est extraite du composant lbLongueur. En cas d’erreur de conversion de lavaleur réelle (si le format n’est pas correct), longueur pr<strong>en</strong>dra la valeur Float.NaN.<strong>La</strong> largeur est extraite du composant tf<strong>La</strong>rgeur. En cas d’erreur de conversion de la valeurréelle précise (si le format n’est pas correct), largeur pr<strong>en</strong>dra la valeur Double.NaN.<strong>La</strong> donnée texteBouton est extraite du composant btQuitter (s’il s’agit d’un bouton, c’est letexte du bouton qui est retourné).6.3 Placer une valeur dans un composantboolean setText(String id, String val)boolean setFloat(String id, float val)boolean setDouble(String id, double val)boolean setInteger(String id, int val)Ces méthodes permett<strong>en</strong>t de « placer » la valeur val dans le composant id<strong>en</strong>tifié par lachaîne id. Il faut que le composant id existe dans la f<strong>en</strong>être.Si l’id<strong>en</strong>tifiant désigne un composant de type :• label – les méthodes modifi<strong>en</strong>t le texte placé dans ce label• textfield – les méthodes modifi<strong>en</strong>t le champ de saisie pour y placer la valeur• button – les méthodes modifi<strong>en</strong>t le texte affiché sur le boutonCes méthodes retourn<strong>en</strong>t une valeur boolé<strong>en</strong>ne qui pr<strong>en</strong>d :• la valeur true si la modification a été effectuée• la valeur false si le composant id<strong>en</strong>tifié par id n’a pas pu être trouvé.Exemples :© HELMo Informatique, 2013 26


setFloat("lbAireResultat", longueur*largeur);setText("lbAireResultat", "Erreur de donnée");setDouble("tf<strong>La</strong>rgeur", 3.5);setInteger("btNum", 1);Dans le 1 ier exemple, le résultat de l’expression longueur*largeur est placé dans lecomposant lbAireResultat (sous la forme d’un réel). Le cont<strong>en</strong>u précéd<strong>en</strong>t est perdu.Dans le 2 ème exemple, le texte Erreur de donnée est placé dans le composant lbAireResultat.Le cont<strong>en</strong>u précéd<strong>en</strong>t est perdu.Dans le 3 ème exemple, la valeur 3,5 est placé dans le composant tf<strong>La</strong>rgeur (sous la formed’un réel précis). Le cont<strong>en</strong>u précéd<strong>en</strong>t est perdu.Dans le 4 ème exemple, la valeur 1 est placée dans le composant btNum (sous la forme d’un<strong>en</strong>tier). Le cont<strong>en</strong>u précéd<strong>en</strong>t est perdu.6.4 Gérer les listes déroulantesUne liste déroulante est un composant repr<strong>en</strong>ant une collection de valeur. Elle ne peut doncpas être gérer de la même façon que les composants précéd<strong>en</strong>ts.Il existe deux versions pour la liste déroulante, la ComboBox et l’Ext<strong>en</strong>dedComboBox. Ils’agit du même composant graphique. <strong>La</strong> seule différ<strong>en</strong>ce est que la ComboBox gère etaffiche une seule liste d’élém<strong>en</strong>t. En revanche, l’Ext<strong>en</strong>dedComboBox gère une table complèteet n’affiche qu’une seule colonne, la dernière. Son principal intérêt est de pouvoir afficherdes valeurs mais garder <strong>en</strong> mémoire des informations complém<strong>en</strong>taires comme desid<strong>en</strong>tifiants par exemple. Ce composant est particulièrem<strong>en</strong>t utile pour les bases de données.Dans les 2 versions, il n’y a pas de méthode particulière pour modifier un élém<strong>en</strong>t déterminéde la liste, il est nécessaire d’agir sur l’<strong>en</strong>semble. Ainsi, il est possible de récupérerl’<strong>en</strong>semble des valeurs sous la forme d’un tableau de chaînes de caractères ou <strong>en</strong>core d’<strong>en</strong>spécifier un <strong>en</strong>semble de nouvelles valeurs.Voici les méthodes intéressantes pour la gestion de ces listes déroulantes :a) cas d’une comboboxboolean setListComboBox(String id, String[] cont<strong>en</strong>t)String[] getListComboBox(String id)int getSelectedIndex(String id)void setSelectedIndex(String id, int index)<strong>La</strong> méthode setListComboBox permet de fixer ou modifier le cont<strong>en</strong>u de la liste déroulante.<strong>La</strong> liste est alors directem<strong>en</strong>t mise à jour <strong>en</strong> fonction du cont<strong>en</strong>u du tableau de chaîne fourni<strong>en</strong> paramètre.<strong>La</strong> méthode getListComboBox permet d’obt<strong>en</strong>ir la liste des valeurs de la liste déroulante. Lesvaleurs sont retournées sous la forme d’un tableau de chaines de caractères.<strong>La</strong> méthode getSelectedIndex permet de connaître l’index dans la liste qui est actuellem<strong>en</strong>tsélectionné et choisi par l’utilisateur. Il s’agit de l’indice dans le tableau de valeur, la 1 èrevaleur se trouve à l’indice 0.© HELMo Informatique, 2013 27


<strong>La</strong> méthode setSelectedIndex permet de sélectionner un élém<strong>en</strong>t dans la liste. Cetteméthode est particulièrem<strong>en</strong>t intéressante avant l’affichage des valeurs pour que la valeuraffichée soit définie (par défaut, il s’agit du 1 ier élém<strong>en</strong>t de la liste). Cette méthode pr<strong>en</strong>d, <strong>en</strong>paramètre, l’id<strong>en</strong>tifiant de la combobox et l’indice dans le tableau, à sélectionner. Il fautnoter que la 1 ère valeur se trouve à l’indice 0.Exemple :String[] maListe = {"zero", "un", "deux", "trois" } ;...setListComboBox("cbListe", maListe);setSelectedIndex("cbListe", 2);System.out.println("<strong>La</strong> valeur selectionne est : " +maListe[getSelectedIndex("cbListe")]) ;b) cas d’une Ext<strong>en</strong>dedComboBoxboolean setListExt<strong>en</strong>dedComboBox(String id, String[][] cont<strong>en</strong>t)String[][] getListExt<strong>en</strong>dedComboBox(String id)int getSelectedIndex(String id)void setSelectedIndex(String id, int index)<strong>La</strong> méthode setListExt<strong>en</strong>dedComboBox permet de fixer ou modifier le cont<strong>en</strong>u de la listedéroulante. <strong>La</strong> liste est alors directem<strong>en</strong>t mise à jour <strong>en</strong> fonction du cont<strong>en</strong>u du tableau dechaîne fourni <strong>en</strong> paramètre (seule la dernière colonne est affichée).<strong>La</strong> méthode getListExt<strong>en</strong>dedComboBox permet d’obt<strong>en</strong>ir la liste des valeurs complète (tout letableau) et non pas uniquem<strong>en</strong>t la liste affichée. Les valeurs sont retournées sous la formed’un tableau de chaines de caractères.<strong>La</strong> méthode getSelectedIndex permet de connaître l’index dans la liste qui est actuellem<strong>en</strong>tsélectionné et choisi par l’utilisateur. Il s’agit de l’indice dans le tableau de valeur, la 1 èrevaleur se trouve à l’indice 0.<strong>La</strong> méthode setSelectedIndex permet de sélectionner un élém<strong>en</strong>t dans la liste. Cetteméthode est particulièrem<strong>en</strong>t intéressante avant l’affichage des valeurs pour que la valeuraffichée soit définie (par défaut, il s’agit du 1 ier élém<strong>en</strong>t de la liste). Cette méthode pr<strong>en</strong>d, <strong>en</strong>paramètre, l’id<strong>en</strong>tifiant de la combobox et l’indice dans le tableau, à sélectionner. Il fautnoter que la 1 ère valeur se trouve à l’indice 0.Exemple :String[][] maListe = { {"1", "zero"}, {"2", "un"}, {"3", "deux"},{"4", "trois"} } ;...setListExt<strong>en</strong>dedComboBox("ecbListe", maListe);setSelectedIndex("ecbListe", 2);...String[][] val = getListExt<strong>en</strong>dedComboBox("ecbListe");System.out.println("<strong>La</strong> valeur selectionne est : " +val[getSelectedIndex("ecbListe")][1] + " et l’ID est " +val[getSelectedIndex("ecbListe")][0]) ;© HELMo Informatique, 2013 28


6.5 Gérer les tablesUne table est un composant un peu particulier car il s’agit d’une collection de valeur. Elle nepeut donc pas être gérée de la même façon que pour les composants simples.Il n’y a pas de méthode pour modifier l’élém<strong>en</strong>t spécifique d’une ligne ou d’une colonne de latable, on doit agir sur l’<strong>en</strong>semble. Ainsi, il est possible de récupérer l’<strong>en</strong>semble des valeurssous la forme d’un tableau ou <strong>en</strong>core d’<strong>en</strong> spécifier un <strong>en</strong>semble de valeurs.Pour modifier les titres des colonnes, il faut utiliser la méthode suivante :boolean setTitleTable(String id, String [] titre)Cette méthode remplace les titres de la table id<strong>en</strong>tifiée par id par les élém<strong>en</strong>ts cont<strong>en</strong>usdans le tableau titre fourni <strong>en</strong> paramètre. Il faut que le nombre de colonnes du tableau titresoit id<strong>en</strong>tique à celui des données.Les méthodes permettant de modifier le cont<strong>en</strong>u des valeurs affichées sont les suivantes :boolean setIntegerTable(String id, int[][] cont<strong>en</strong>t)boolean setFloatTable(String id, float[][] cont<strong>en</strong>t)boolean setDoubleTable(String id, double[][] cont<strong>en</strong>t)boolean setStringTable(String id, String [][] cont<strong>en</strong>t)Suivant le type de données dans la table id<strong>en</strong>tifiée par Id, il faut choisir la méthode setadéquate. On peut de cette manière mettre à jour l’<strong>en</strong>semble des données de la table. <strong>La</strong>méthode retourne true si la mise à jour a pu être opérée, false sinon.Exemple :int[][] table = new Integer[4][4] ;...setIntegerTable("tbEntier1", table);Dans cet exemple, le composant tbEntier1 est mis à jour et les données dans la table sontreprises de la donnée table passée <strong>en</strong> paramètre.Pour obt<strong>en</strong>ir le cont<strong>en</strong>u de la table (qui peut avoir été modifié par un utilisateur), il faututiliser l’une des méthodes suivantes :int[][] getIntegerTable(String id)float[][] getFloatTable(String id)double[][] getDoubleTable(String id)String[][] getStringTable(String id)int getSelectedIndex(String id)int[] getSelectedIndexes(String id)Suivant le type de données prés<strong>en</strong>t dans la table id<strong>en</strong>tifiée par Id, il faut choisir la méthodeget adéquate. Ces méthodes permett<strong>en</strong>t de récupérer l’<strong>en</strong>semble des données cont<strong>en</strong>uesdans la table sous la forme d’un tableau.© HELMo Informatique, 2013 29


<strong>La</strong> méthode getSelectedIndex permet de connaître l’index dans la liste qui est actuellem<strong>en</strong>tsélectionné et choisi par l’utilisateur. Il s’agit de l’indice dans le tableau de valeur, la 1 èrevaleur se trouve à l’indice 0. Si aucune ligne n’est sélectionnée, la valeur -1 est retournée.<strong>La</strong> méthode getSelectedIndexes permet de connaître les index dans la liste des élém<strong>en</strong>tssélectionnés et choisis par l’utilisateur. <strong>La</strong> méthode retourne alors un tableau d’<strong>en</strong>tier (et lepremier élém<strong>en</strong>t comm<strong>en</strong>ce à l’indice 0). Si aucune ligne n’est sélectionnée, la valeur null estretournée.Exemple :int[][] matable = new Integer[4][4];int[] selectionEnCours;...matable = getIntegerTable("tbEntier1");selectionEnCours = getSelectedIndexes("tbEntier1");Dans cet exemple, le cont<strong>en</strong>u de le table tbEntier1 est retourné et le résultat est placé dansla donnée matable qui est un tableau à 2 dim<strong>en</strong>sions. Le programme peut alors traiter lesdonnées récupérées.a) Faire apparaître une case à cocher dans une tableDans certains cas, il est intéressant de faire apparaître une case à cocher dans la table afinde représ<strong>en</strong>ter une valeur de type boolé<strong>en</strong>ne. Pour que cela fonctionne, voici comm<strong>en</strong>t ilfaut procéder :• <strong>La</strong> table doit cont<strong>en</strong>ir des élém<strong>en</strong>ts de type chaine de caractères (String donc)• <strong>La</strong> colonne pour laquelle on souhaite faire apparaître une case à cocher doit cont<strong>en</strong>irla chaine texte true ou false. Aucune autre valeur n’est autorisée sinon la donnéesera affichée sous la forme d’une chaine.© HELMo Informatique, 2013 30


7. Accès aux bases de donnéesSLPack permet l’accès aux bases de données de type SQL Server et Oracle. Ces deux SGBDR(systèmes de gestion de base de données relationnels) sont disponibles et utilisés dans lecadre des laboratoires.Pour que l’accès fonctionne, il est nécessaire de disposer des drivers JDBCcorrectem<strong>en</strong>t installés (voir section 1. 3).Afin de pouvoir accéder à une base de données, un composant particulier SLDB a étéconstruit. Ce composant permet d’établir la connexion avec un serveur de base de données,d’exécuter une requête de sélection, d’exécuter une requête de mise à jour, de débuter unetransaction, d’<strong>en</strong>registrer les modifications suite à une transaction réussie (COMMIT) ou<strong>en</strong>core d’abandonner les modifications suite à une transaction annulée (ROLLBACK).7.1 L’objet SLDBToutes les méthodes que nous verrons dans cette section s’appliqu<strong>en</strong>t sur un objetparticulier, créé pour cet usage, l’objet SLDB.Avant de pouvoir établir une connexion, il est donc nécessaire de créer l’objet SLDB. Pour cefaire, ri<strong>en</strong> de plus simple, il suffit de le créer comme suit :SLDB db = new SLDB() ;Cette instruction permet de créer un objet de type SLDB qui pourra être utilisé pour accéderà la base de données. Par facilité, il vaut mieux déclarer cet objet directem<strong>en</strong>t commedonnée privée de la classe. Ainsi, on trouvera très souv<strong>en</strong>t la définition suivante :public class Programme ext<strong>en</strong>ds SLForm {private SLDB db = new SLDB();...}public Programme() {...}public void action(String id) {...}public static void main (String[] args) {new Programme();}code 3 : Squelette minimal d’un programme avec base de données7.2 Interaction avec la base de donnéesAfin de permettre des interactions avec la base de données, les méthodes (ou fonctions)suivantes sont définies :7.2.1 Connexionpublic boolean connectToOracle(String host, String login, String pass,String dbName);© HELMo Informatique, 2013 31


public boolean connectToMSSQL(String host, String login, String pass,String dbName);Ces deux méthodes permett<strong>en</strong>t la connexion au serveur de base de données. Suivant leserveur utilisé, on choisira la méthode connectToOracle ou connectToMSSQL. Ces deuxméthodes pr<strong>en</strong>n<strong>en</strong>t les mêmes paramètres :• host : le nom ou l’adresse IP du serveur de base de données. À Saint-<strong>La</strong>ur<strong>en</strong>t,Oracle est disponible sur Dartagnan (172.16.130.13) et SQL Server sur Pothos(172.16.130.14).• login : le nom d’utilisateur pour la connexion• pass : le mot de passe associé• dbName : le nom de la base de données. Sous Oracle, le nom de la base de donnéesest obligatoirem<strong>en</strong>t XE (pour eXpress Edition).Ces méthodes retourn<strong>en</strong>t un boolé<strong>en</strong> qui vaut :• true si la connexion a pu être établie• false si une erreur est surv<strong>en</strong>ue (reportez-vous à la console pour plusd’explication).Remarque :Si l’erreur suivante apparaît : Error while loading the JDBC Driver (driver not found, not inclasspath, …), cela signifie que les pilotes JDBC n’ont pas pu être trouvés. Reportez-vous à lasection 1.3 pour corriger cette erreur.Exemple :if(db.connectToOracle("172.16.130.13", "i10299", "3012", "XE")) {System.out.println("Connexion réussie");} else {System.out.println("Connexion ratée");}7.2.2 Exécuter une requête de sélectionpublic String[][] executeQuery(String requete);Cette méthode permet de lancer l’exécution d’une requête de sélection (qui retourne unrésultat) sur la base de données. Il est nécessaire que la connexion à la base de données aitété établie au préalable.Cette méthode pr<strong>en</strong>d, <strong>en</strong> paramètre :• requete – <strong>La</strong> requête SQL de sélection (SELECT) qui doit être <strong>en</strong>voyée à la base dedonnéesCette méthode retourne le résultat de la requête sous la forme d’un tableau de String à deuxdim<strong>en</strong>sions. Le nombre de lignes dép<strong>en</strong>d du nombre de résultats retournés par la requêtetandis que le nombre de colonne dép<strong>en</strong>d du nombre de champs sélectionnés.En cas d’erreur, la valeur null est retournée et un message est <strong>en</strong>voyé sur la console.Exemple :String[][] tblResultat;tblResultat = db.executeQuery("SELECT numLivre, titre, cote FROM livres");© HELMo Informatique, 2013 32


7.2.3 Exécuter une requête de mise à jourpublic int executeUpdate(String requete);Cette méthode permet d’exécuter une mise à jour sur la base de données. Cette mise à jourest indép<strong>en</strong>dante. Si vous souhaitez lier plusieurs requêtes de mise à jour <strong>en</strong>tre-elles, ilconvi<strong>en</strong>t d’utiliser une transaction.Avant de pouvoir procéder à l’exécution d’une mise à jour, il est nécessaire que la connexionvers la base de données ait été établie.Cette méthode pr<strong>en</strong>d, <strong>en</strong> paramètre :• requete – <strong>La</strong> requête SQL de mise à jour (UPDATE) qui doit être <strong>en</strong>voyée à la basede données.Cette méthode retourne un <strong>en</strong>tier qui correspond aux nombres de lignes effectivem<strong>en</strong>t misesà jour après l’exécution de la requête ou -1 <strong>en</strong> cas d’erreur. Si une erreur survi<strong>en</strong>t, unmessage sur la console est égalem<strong>en</strong>t <strong>en</strong>voyé.Exemple :int resultat = db.executeUpdate("UPDATE livres SET cote=0");if(resultat < 0) {System.out.println("Une erreur est surv<strong>en</strong>ue !");}7.2.4 Les transactionspublic boolean op<strong>en</strong>Transaction();public boolean commit();public boolean rollback();Les transactions permett<strong>en</strong>t d’exécuter un <strong>en</strong>semble de requêtes <strong>en</strong>sembles. Ainsi, <strong>en</strong> cas deproblème, toutes les modifications effectuées peuv<strong>en</strong>t être abandonnées.Toutes ces méthodes ont une signature id<strong>en</strong>tique : elles ne pr<strong>en</strong>n<strong>en</strong>t aucun paramètre etretourne un résultat de type boolé<strong>en</strong>. Ainsi, chaque méthode retourne :• true – si aucune erreur n’a été r<strong>en</strong>contrée• false – si un problème est surv<strong>en</strong>u. Dans ce cas, un message d’erreur est retournésur la console.Pour débuter la transaction, il faut invoquer la méthode op<strong>en</strong>Transaction(). Cetteméthode reporte toutes les modifications qui vont être effectuées jusqu’à la clôture de latransaction. Avant de pouvoir débuter une transaction, il est nécessaire que la connexionvers la base de données ait été établie.Pour clôturer la transaction, il faut faire appel à l’une des deux méthodes suivantes :• commit() – qui va <strong>en</strong>registrer les modifications de manière durable dans la base dedonnées• rollback() – qui retourne à l’état juste avant le début de la transaction et annuleainsi toutes les modifications.© HELMo Informatique, 2013 33


Exemple :if(db.op<strong>en</strong>Transaction()) {if( (db.executeUpdate("...")>= 0) && (db.executeUpdate("...")>= 0) )db.commit() ;elsedb.rollback() ;}7.2.5 Déconnexion de la base de donnéespublic boolean disconnect();Afin de libérer les ressources, il est préférable de fermer la connexion à la base de donnéesde manière explicite. Pour ce faire, il suffit d’invoquer la méthode disconnect().Cette méthode retourne un boolé<strong>en</strong>, qui vaut :• true – si la déconnexion a pu être réalisée sans erreur• false – si une erreur est surv<strong>en</strong>ue lors de la déconnexion. Dans ce cas, un messageest égalem<strong>en</strong>t retourné dans la console.Exemple :db.disconnect() ;© HELMo Informatique, 2013 34


Remerciem<strong>en</strong>tsJ’aimerais remercier toutes les personnes qui ont contribué au développem<strong>en</strong>t de cecomposant. En particulier, mon collègue Nicolas H<strong>en</strong>drikx, avec qui j’ai imaginé les grandeslignes de cet outil, <strong>en</strong> espérant qu’il sera apprécié. J’aimerais égalem<strong>en</strong>t remercier mescollègues et les étudiants qui ont, par leurs intérêts, leurs remarques et leurs souhaits,permis de corriger et d’améliorer ce composant.Bibliographie et référ<strong>en</strong>ces[1] Bruce Eckel, Thinking in Java, Pr<strong>en</strong>tice-Hall, 3 rd edition, December 2002,http://mindview.net/Books/TIJVersion française disponible sur : http://p<strong>en</strong>ser<strong>en</strong>java.free.fr[2] Cay S. Horstmann, Gary Cornell, Core Java 2 : Volume 1 Fundam<strong>en</strong>tals, SunMicrosystems, 7 th edition, 2005[3] Cay S. Hortsmann, Gary Cornell, Core Java 2 : Volume 2 Advanced Features, SunMicrosystems, 7 th editon, 2005Information de CopyrightJava TM , Netbeans TM , Oracle ® , Oracle ® Database Express Edition are registered trademarks ofOracle and/or its affiliates. Other names may be trademarks of their respective owners.Eclipse © Copyright Eclipse contributors and others 2000, 2010. All rights reserved. Eclipseis a trademark of Eclipse Foundation Inc.IntelliJ IDEA © 2000-2010 JetBrains s.r.o. All rights reserved.Microsoft ® , Microsoft Windows ® , Microsoft SQL Server ®Corporation and/or its affiliates.are trademarks of MicrosoftTous les noms et marques des produits cités sont des marques déposées par leursproducteurs respectifs.© HELMo Informatique, 2013 35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!