Java For Beginners
Java For Beginners
Java For Beginners
oriente objet 2
Version 2015/2016
CNPI-Gdt-PrograTG'15
12GE/12GI
Sources
Wikipedia (Modle-Vue-Contrleur)
Rdacteurs
Fred Faber
Robert Fisch
Georges Kugener
Site de rfrence
http://java.cnpi.lu
Le cours est adapt et complt en permanence d'aprs les contributions des enseignants. Les
enseignants sont pris d'envoyer leurs remarques et propositions via mail Fred Faber ou
Robert Fisch qui s'efforceront de les intgrer dans le cours ds que possible.
La version la plus actuelle est publie sur le site : http://java.cnpi.lu
Page 2 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
6. Comparaison d'objets................................................................................................ 22
6.1. Comparaison deux objets du type String............................................................... 22
6.2. Comparaison d'instances de classes enveloppes..................................................... 23
6.3. Explications pour avancs / 12GI :....................................................................... 23
7. Interfaces graphiques simples.................................................................................... 24
7.1. Les fentres JFrame ...................................................................................... 24
7.1.1. Attributs................................................................................................................. 24
7.1.2. Initialisations.......................................................................................................... 25
Page 3 de 59
CNPI-Gdt-PrograTG'15
12GE/12GI
Page 4 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
Page 5 de 59
CNPI-Gdt-PrograTG'15
1.
12GE/12GI
Quickstart
Ce chapitre montre tape par tape comment crer une application interface graphique en
NetBeans suivant le modle MVC sans pour autant donner des explications dtailles. Celles-ci
suivront dans la suite de ce document.
tape 1 : Crer un nouveau projet vierge dans NetBeans :
1. Ouvrez NetBeans, puis crez un nouveau projet Java du type Java Application .
2. Nommez votre projet Quickstart et dcochez l'option Create Main Class .
3. Veillez ce que la Project Location pointe vers votre dossier dans lequel vous voulez
sauvegarder tous vos projets Java.
Page 6 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
12. Nommez les composants comme indiqu ci-dessus et changez la proprit text
comme indiqu. Ici, il n'est pas ncessaire de changer les noms des libells Value et
Sum . (Utilisez un clic droit sur les composants pour modifier ces proprits.)
13. Changez dans le mode Source et ajoutez la dclaration de l'attribut suivant en haut
de la classe MainFrame :
private Adder adder = new Adder();
14. Retournez dans le mode Design et faites un double clic sur le bouton Add . Vous
allez vous retrouver dans le mode source et le curseur se trouvera dans la mthode
addButtonActionPerformed(...). Ajoutez le code suivant, puis faites Build/Run :
Rcupre le texte du champ d'entre,
convertit ce texte en un entier et
sauvegarde cette valeur entire dans la variable value.
Page 7 de 59
CNPI-Gdt-PrograTG'15
12GE/12GI
La mthode addButtonActionPerformed(...)
modifie l'instance adder par :
adder.add(value);
et accde sa mthode getSum par :
...(String.valueOf(adder.getSum()));
Questions :
A) O faudrait-il ajouter du code pour que le programme compte le nombre d'additions
que l'utilisateur a faites ?
B) O faudrait-il ajouter le code pour que le programme affiche l'utilisateur le nombre
d'additions qu'il a effectues ?
Page 8 de 59
12GE/12GI
2.
CNPI-Gdt-PrograTG'14
Manipulation de NetBeans
Pour tous les exercices et projets qui seront abords dans la suite du cours l'aide du logiciel
NetBeans, voici quelques rgles, astuces, recommandations et surtout un guide suivre. Dans
le chapitre prcdent vous avez dj t guids travers certaines tapes, dont voici
maintenant le dtails, y compris des explications supplmentaires.
2.1.
Installation
Vu que l'installation de NetBeans ainsi que du JDK (Java Development Kit) dpend
fortement de la configuration de la machine ainsi que du systme d'exploitation utilis, veuillez
consulter le site de rfrence indiqu la fin de ce paragraphe et tlchargez la version pour
Java SE . Il contient toutes les explications ncessaires ainsi que les liens directs vers les
diffrentes applications ncessaires.
Site de tlchargement de NetBeans : http://netbeans.org/downloads
2.2.
Les projets
Dans NetBeans, tous les lments appartenant une application sont regroups dans un
projet . Pour crer une nouvelle application, nous devons donc crer un nouveau projet.
2.2.1.
Voici les tapes suivre pour crer un nouveau projet vierge dans NetBeans :
1. Choisissez dans le menu principal File , puis New project ... .
2. Dans le dialogue suivant, slectionnez dans la liste intitule Categorie l'lment
Java , puis dans la liste intitule Projects l'lment Java Application .
Page 9 de 59
CNPI-Gdt-PrograTG'15
12GE/12GI
3. Ensuite, vous devez choisir un nom pour votre projet. vitez les signes spciaux,
espaces et autres caractres non standards dans le nom de projet ! Veillez aussi ce
que l'option Create Main Class soit dsactive !
4. Aprs son initialisation, votre nouveau projet apparat gauche dans l'onglet
Projects de la faon suivante :
5. Vous venez de mettre en place un projet vide, qui ne contient encore aucune classe. Le
chapitre suivant montre comment ajouter des classes.
Page 10 de 59
12GE/12GI
2.2.2.
CNPI-Gdt-PrograTG'14
En se basant sur le chapitre prcdent, votre projet contient dans l'lment Source
Packages un autre lment intitul <default package> . Afin d'ajouter une classe votre
projet, vous devez :
1. faire un clic droit sur <default package> et choisir New dans le menu contextuel
qui s'ouvre,
Java Class... pour l'ajout d'une simple classe (sans interface graphique).
3. Peu importe le type de classe que vous ajoutez votre projet, vous devez ensuite
indiquer le nom de la nouvelle classe avant de finaliser l'action :
Page 11 de 59
CNPI-Gdt-PrograTG'15
2.3.
12GE/12GI
Vu que Unimozer gnre aussi des fichiers de configuration NetBeans lors de la sauvegarde
d'une classe, il n'est pas ncessaire d'importer son projet.
En fait, il suffit de dmarrer NetBeans et d'ouvrir le projet Unimozer de manire usuelle via le
menu : File > Open Project...
2.4.
Les applications Java ont le grand avantage d'tre portables, c.--d. qu'elles tournent sur
toutes les machines o on a install l'environnement d'excution de Java (JRE - Java Runtime
Environment) et ceci sur n'importe quel systme d'exploitation (Windows , Mac OS, Linux, ...).
Le JRE est compris dans le JDK (Java Development Kit) que vous avez install avec NetBeans.
Pour crer une application excutable, faites un clic droit sur votre projet et cliquez sur Clean
and Build. la fin de l'opration le dossier dist de votre projet va contenir :
Pour prparer le projet pour une distribution, il suffit de zipper le contenu du dossier dist y
compris le dossier lib.
Sur la machine cible il faut dcomprimer le dossier et lancer le fichier .jar. Sur la plupart des
systmes, un double clic sur le fichier suffit, sinon il faut entrer dans la ligne de commande,
localiser le dossier de l'application et taper : java -jar <nom de l'application>.jar
Page 12 de 59
12GE/12GI
3.
CNPI-Gdt-PrograTG'14
Notions importantes
3.1.
Les paquets
En Java, un ensemble de classes peut tre regroup dans ce qu'on dsigne par package, en
franais paquet . La spcification de Java propose un systme similaire aux noms de
domaine Internet (p.ex unimozer.fisch.lu) pour assurer l'unicit des noms de ces paquets.
Voici quelques exemples de programmes avec le nom du paquet de base respectif. Bien sr, les
classes sont rparties dans des sous-paquets se trouvant l'intrieur de ce paquet de base.
Programme
Paquet de base
Unimozer
lu.fisch.unimozer
NetBeans
org.netbeans
Java Swing
javax.swing
Dans le systme fichier, les paquets se traduisent par une arborescence de rpertoires. Voici
l'exemple de l'arborescence dans le systme fichier des paquets du programme Unimozer :
Lorsqu'une classe Java utilise des classes issues d'autres paquets, il faut indiquer ceci dans le
code source devant la dfinition de la classe elle-mme en faisant appel l'instruction
import .
Par exemple, lorsqu'on veut utiliser la classe ArrayList ainsi que la classe JButton , il
faut insrer les lignes de code suivantes :
import java.util.ArrayList;
import javax.swing.JButton;
Si vous ne savez pas dans quel paquet une classe se trouve, alors vous pouvez soit lancer une
recherche sur Internet avec le mot cl java suivi du nom de la classe, soit laisser NetBeans
ou Unimozer trouver lui-mme la classe
Il faut utiliser la touche <Ctrl><Space> pour activer la compltion de code lors
de l'criture du code, puis valider l'entre par <Enter>. Ensuite, le programme
placera automatiquement l'instruction import correspondante au dbut du
code.
Page 13 de 59
CNPI-Gdt-PrograTG'15
3.2.
12GE/12GI
Le modle MVC
Le schma de cette figure rsume les diffrentes interactions entre le modle, la vue et le contrleur. Les
lignes pleines indiquent une association directe tandis que les pointills sont une association indirecte.
3.2.1.
Le modle
3.2.2.
La vue
La vue correspond l'interface avec laquelle l'utilisateur interagit. Sa premire tche est de
prsenter les rsultats renvoys par le modle. Sa seconde tche est de recevoir toutes les
actions de l'utilisateur (clic de souris, slection d'une entre, activation de boutons, etc). Ces
diffrents vnements sont envoys au contrleur. La vue n'effectue aucun traitement, elle se
contente d'afficher les rsultats des traitements effectus par le modle et d'interagir avec
l'utilisateur.
Page 14 de 59
12GE/12GI
3.2.3.
CNPI-Gdt-PrograTG'14
Le contrleur
3.2.4.
Flux de traitement
l'vnement envoy depuis la vue est analys par le contrleur (par exemple un clic de
souris sur un bouton),
la vue notifie fait une requte au modle pour se mettre jour (par exemple afficher
le rsultat du traitement via le modle).
3.2.5.
Avantages du MVC
Un avantage apport par ce modle est la clart de l'architecture qu'il impose. Cela simplifie la
tche du dveloppeur qui tenterait d'effectuer une maintenance ou une amlioration sur le
projet. En effet, la modification des traitements ne change en rien la vue. D'un autre ct, on
peut dvelopper diffrentes vues et contrleurs pour un mme modle.
Exemples :
Page 15 de 59
CNPI-Gdt-PrograTG'15
3.3.
12GE/12GI
La cration de nouveaux objets peut aussi se faire dans le code l'aide du mot-cl new. En
gnral la syntaxe pour dclarer, crer et initialiser un objet de la classe est la suivante :
<type> <nom> = new <constructeur>;
Par exemple : cration d'un objet myClock de la classe Clock avec le constructeur par dfaut
Clock myClock = new Clock();
Remarques:
Les instances ainsi cres ne seront pas visibles dans l'interface d'Unimozer. Elles
existent dans la mmoire, mais nous ne pouvons pas les analyser directement.
Si une classe possde plusieurs constructeurs, il existe aussi plusieurs possibilits pour
crer un objet de cette classe. Dans le menu contextuel d'Unimozer se trouvent alors
plusieurs lignes New ...
Il est aussi possible (mais plus rare) de sparer la dclaration d'un objet de sa cration :
<type> <nom>;
//dclaration de l'objet (encore inutilisable)
...
<nom> = new <constructeur>; //cration de l'objet (et initialisation)
Par exemple :
Clock myClock;
...
myClock = new Clock(); //un objet du type Clock est cr et affect myClock
Page 16 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
Exemple :
Soit la classe suivante :
public class Point
{
private double x;
private double y;
public Point(double pX, double pY)
{
x = pX;
y = pY;
}
public String toString()
{
return "(" + x + "," + y + ")";
}
}
Cette classe ne possde pas de constructeur par dfaut (= sans paramtres). Dans ce cas-ci,
la ligne de code suivante peut tre utilise pour crer un nouveau point :
Point myPoint = new Point(12,50);
Dans le cas prsent, le point myPoint sera initialise avec les coordonnes (12,50).
Rappel :
Ici il est possible d'crire simplement myPoint au lieu de myPoint.toString(), parce que la
mthode println fait automatiquement appel toString (qui est dfinie pour tout objet).
Page 17 de 59
CNPI-Gdt-PrograTG'15
3.4.
12GE/12GI
La valeur 'null'
Une variable (attribut, paramtre ou variable locale) reprsentant un objet peut avoir la valeur
spciale null. Cette valeur indique que la variable objet a t dclare, mais qu'elle est vide,
c.--d. qu'il n'y a pas (encore) d'objet associ la variable.
Exemples :
null
Sans initialisation, une variable objet est null (vide) et encore inutilisable :
Point myPoint;
System.out.println(myPoint); // produit une erreur !!
myPoint
myPoint
Point myPoint = new Point(12,50);
System.out.println(myPoint);
// affichage: (12.0,50.0)
On peut dire que myPoint pointe sur l'objet nouvellement cr.
x: 12
y: 50
Point(...,...)
toString()
x: 12
y: 50
Point(...,...)
toString()
Autre exemple :
Point a = new Point(10,00);
Point b = a;
a = null;
System.out.println(b);
On peut bien entendu aussi tester si une
if (myPoint == null)
{
System.out.println("myPoint est vide!");
}
else
{
System.out.println(myPoint);
}
Page 18 de 59
12GE/12GI
3.5.
CNPI-Gdt-PrograTG'14
Parfois lors qu'on est en train d'crire le code pour une classe, il faut faire rfrence
l'instance actuelle qui existera en mmoire lors de l'excution. Au moment de la rdaction du
code, on ne connat cependant pas le nom de cette instance, et comme il peut exister
beaucoup d'instances avec des noms diffrents il est mme impossible d'en connatre le nom.
C'est pour cette raison qu'existe la variable spciale this. Cette variable pointe toujours sur
l'instance actuelle, c.--d. l'objet lui-mme. 1
Exemple :
Reprenant le code de la classe Point dj connue, mais avec une lgre modification :
public class Point
{
private double x;
private double y;
Problme !!
}
Les deux affectations n'ont pas d'effet , car elles essaient d'affecter aux paramtres leurs
propres valeurs...
Le problme consiste dans le fait que les noms des paramtres du constructeur sont identiques
aux noms des attributs, les noms de paramtres cachent alors les attributs, c.--d :
l'intrieur du constructeur, les attributs ne sont plus accessibles par leur nom direct !2
C'est cet instant qu'on a besoin de l'go-rfrence this :
public class Point
{
private double x;
private double y;
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
}
Par le biais de this, on dit au compilateur d'utiliser non pas le paramtre, mais l'attribut de
l'objet actuel. Le mot this traduit en franais donne d'ailleurs ceci et veut dire dans
notre cas cet objet . D'ailleurs, les programmeurs Java professionnels utilisent couramment
cette mthode pour dfinir les constructeurs ou manipulateurs.
Page 19 de 59
CNPI-Gdt-PrograTG'15
4.
12GE/12GI
En Java, les types int, float, double, boolean sont appels types "primitifs" ou aussi types
"simples". Les attributs ou variables de ces types ne sont pas des objets et ils sont utilisables
ds leur dclaration, c.--d. on n'a pas besoin d'en crer des instances l'aide de new.
(Tout le cours de 11e a t bas sur des attributs et variables de ces types primitifs, c'est
pourquoi dans nos programmes, nous n'avons jamais eu besoin de crer explicitement des
instances l'aide de new).
Comme toutes les autres donnes en Java sont des objets, et la majorit des mcanismes
prdfinis en Java sont prvus pour des objets, il est parfois ncessaire de travailler avec des
valeurs numriques qui sont des objets. De cette faon, on peut par exemple profiter de
structures de donnes composes pour crer des listes de nombres (voir : listes de donnes
chapitre 8).
En Java, il existe pour chaque type primitif une classe enveloppe (angl : wrapper class) qui
fournit une version objet des donnes :3
Integer
int
Double
double
Byte
byte
Long
long
Float
float
Boolean
boolean
Character
char
Exemples :
int a = 121 ;
a 121
212
valueOf(...)
toString()
...
Page 20 de 59
12GE/12GI
5.
CNPI-Gdt-PrograTG'14
Le prsent chapitre est ddi la manipulation simple des chanes de caractres en Java. Les
chanes de caractres en Java (par exemple "abc"), sont reprsentes comme des instances
de la classe String, qui est une classe spciale.
5.1.1.
Dclaration et affectation
String filename;
// dclaration d'une variable
String filename = "test.doc"; // ... et initialisation avec une constante
Comme on peut le voir dans les exemples, les chanes de caractres en Java sont comprises
entre des guillemets (doubles).
5.1.2.
Conversions de types
Explications
String.valueOf(int)
String.valueOf(double)
Integer.valueOf(String)
Double.valueOf(String)
Page 21 de 59
CNPI-Gdt-PrograTG'15
5.1.3.
12GE/12GI
Syntaxe
Explications
int contains(String)
Exemples
String someText = "Hello world";
System.out.println(someText.contains("Hello"));
System.out.println(someText.contains("hello"));
System.out.println(someText.contains("lo wo"));
6.
// affiche "true"
// affiche "false"
// affiche "true"
Comparaison d'objets
Pour comparer des objets, on ne peut pas se servir des oprateurs de comparaison standard
(==, >, <, >=, <=) puisque ces derniers s'appliquent uniquement aux types primitifs
(double, int, ). Pour les objets, il faut se servir des mthodes suivantes :
Syntaxe
Explications
boolean equals(Object) Retourne true si les valeurs des deux objets sont gales,
false sinon.
int compareTo(Object)
6.1.
=>
=>
=>
=>
false
false
-16
(nombre ngatif car "abba" < "queen")
0
(zro car "queen" est gal "queen")
Page 22 de 59
12GE/12GI
6.2.
CNPI-Gdt-PrograTG'14
Pour comparer deux instances de classes enveloppes, il faut aussi employer equals et
compareTo.
Exemples
Double n1 = 34.7;
Double n2 = 12.0;
n1.equals(n2)
n1.compareTo(n2)
6.3.
=>
=>
false
1
(nombre positif car 34.5 > 12.0)
Integer a = 121;
Integer b = new Integer(121);
adresses diffrentes
== retourne false
121
valueOf(...)
toString()
...
valeurs identiques
equals retourne true
121
valueOf(...)
toString()
...
Si nous voulons que equals et compareTo fonctionnent correctement pour les classes
que nous dfinissons, nous devons redfinir ces mthodes par nos soins.
Page 23 de 59
CNPI-Gdt-PrograTG'15
7.
12GE/12GI
En ouvrant NetBeans pour la premire fois, vous avez remarqu qu'il existe toute une palette
de composants visuels que nous pouvons intgrer dans nos programmes. Chacun de ces
composants possde son tour une multitude d'attributs, d'vnements et de mthodes.
videmment, il n'est pas possible (ni utile) de traiter tous ces lments, voil pourquoi nous
nous limitons dans ce cours traiter les attributs et vnements incontournables des
composants les plus simples.
Avant de commencer, veuillez noter que les noms de diverses classes standards du moteur
principal graphique de Java (qui porte le nom Swing ), commencent par la lettre J .
7.1.
7.1.1.
Attributs
le titre de la fentre
title
void setTitle(String)
String getTitle()
ContentPane.Width
les dimensions
intrieures de la fentre ContentPane.Height
int getContentPane().getWidth()
int getContentPane().getHeight()
Suivez le guide du chapitre prcdent pour ajouter une fentre votre projet. En
fait, une fentre n'est rien d'autre qu'une classe interface graphique.
Page 24 de 59
12GE/12GI
Position
(location)
CNPI-Gdt-PrograTG'14
ContentPane.Height
Titre (title)
Contenu
(ContentPane)
ContentPane.Width
7.1.2.
Initialisations
Toute classe visuelle du type JFrame ou JPanel a bien entendu la forme standard d'une classe
Java, avec ses champs, ses mthodes et ses constructeurs.
Souvent on a besoin de dclarer des attributs ou d'excuter des instructions lors de la cration
de la fentre principale. Pour ceci, il suffit d'ajouter les dclarations des champs au dbut de la
classe, respectivement le code des initialisations dans le constructeur par dfaut, mais derrire
l'appel la mthode initComponents() :
Par exemple si la classe s'appelle MainFrame :
public class MainFrame extends javax.swing.JFrame {
// ajoutez vos dclarations de champs ici
...
/** Creates new form MainFrame */
public MainFrame()
{
initComponents();
// ajoutez vos initialisations ici
...
}
...
}
Sur une fentre, on peut placer d'autres composants, dont les plus connus sont les boutons,
les libells et les champs d'ditions. tant que ceux-ci fonctionnent tous de la mme manire,
ils sont aussi traits dans un mme chapitre.
Page 25 de 59
CNPI-Gdt-PrograTG'15
7.2.
12GE/12GI
Tous ces composants possdent chacun un nom (Variable name) et une inscription (Text).
Voici les lments les plus importants d'un tel composant:
7.2.1.
Attributs
Dsignation
le texte affich
text
void setText(String)
String getText()
enabled
void setEnabled(boolean)
boolean isEnabled()
sa visibilit
void setVisible(boolean)
boolean isVisible()
l'image
icon
void setIcon(Icon)
Icon getIcon()
7.2.2.
non trait
dans le cadre
de ce cours
vnement
Description
actionPerformed
Page 26 de 59
12GE/12GI
7.3.
CNPI-Gdt-PrograTG'14
7.3.1.
Text (text)
Dpendant du systme d'exploitation ou mme de la version du systme d'exploitation utilis,
les boutons peuvent avoir des apparences diffrentes.
Page 27 de 59
CNPI-Gdt-PrograTG'15
7.3.2.
12GE/12GI
Exemple :
myLabel.setText("Hello world");
Des valeurs numriques, peuvent tre affiches en employant String.valueOf(...).
Exemple :
int myNumber = 35;
numLabel.setText(String.valueOf( myNumber ));
Pour lire un texte, par exemple partir d'un champ d'dition, il faut utiliser la mthode
getText().
Exemple :
String name = nameTextField.getText();
Des valeurs numriques, peuvent tre
lues en employant
Double.valueOf(...)
ou
Exemples :
int
n = Integer.valueOf(intTextField.getText());
double r = Double.valueOf(doubleTextField.getText());
7.3.3.
Events
Code
Ici vous pouvez changer les Dans cet onglet, vous pouvez C'est l'endroit o vous devrez
diffrentes proprits visuelles programmer les mthodes de donner un nom correct au
du bouton.
raction des vnements bouton.
prdfinis du bouton.
Pour modifier la proprit Text d'un certain nombre de composants (JButton, JLabel,
JTextField), on peut simplement appliquer un clic droit de la souris sur le composant et
choisir Edit Text .
automatiquement.
Les
dimensions
du
composant
Page 28 de 59
sont
en
gnral
radaptes
12GE/12GI
7.3.4.
CNPI-Gdt-PrograTG'14
Pour modifier le nom d'un composant, il suffit d'appliquer un clic droit de la souris sur le
composant et de choisir Edit Variable Name... . Dans ce cours nous suivons les conventions
usuelles :
Les noms de tous les composants visuels se terminent par leur type (en omettant le
prfixe 'J'). Par exemple les noms des boutons (JButton) se terminent par Button, les
noms des libells (JLabel) se terminent par Label, les noms des champs texte
(JTextField) se terminent par TextField etc.
7.3.5.
Dans un environnement graphique, les actions d'un programme sont inities par des
vnements. C'est pourquoi la programmation pour un environnement graphique est aussi
qualifie de programmation vnementielle (EN: event-driven programming, DE:
ereignisgesteuerte Programmierung).
Ainsi, tous les composants visuels peuvent ragir un certain nombre d'vnements (p.ex. un
clic de la souris, l'activation d'une touche du clavier, le gain ou la perte de focus, l'coulement
d'un dlai d'un chronomtre, l'arrive de donnes sur le rseau, ). C'est le rle du
programmeur (c'est nous J) de dfinir les actions effectuer pour les diffrents vnements.
Ces actions sont dfinies dans une mthode qui s'appelle alors la mthode de raction
l'vnement. Les noms des mthodes de raction sont gnrs automatiquement par
NetBeans en prenant le nom du composant comme prfixe et le nom de l'vnement comme
suffixe (p.ex. demoButtonActionPerformed).
Chaque mthode de raction possde gnralement un ou plusieurs paramtres qui
renseignent sur la nature de l'vnement, son origine et bien d'autres proprits y relatives.
Page 29 de 59
CNPI-Gdt-PrograTG'15
7.3.6.
12GE/12GI
L'diteur saute ensuite automatiquement dans le mode Source et place le curseur dans la
mthode de raction respective qu'il a cre automatiquement auparavant :
private void demoButtonActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
}
C'est dans le corps de cette mthode que vous pouvez crire le code qui doit tre excut
lorsque le bouton est activ (par la souris ou le clavier).
Pour certains composants (p.ex. les boutons, et les champs JTextField), il suffit
d'appliquer un double clic sur le composant pour crer automatiquement leur
mthode de raction par dfaut actionPerformed.
Page 30 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
Exemple 1 :
private void demoButtonActionPerformed(java.awt.event.ActionEvent evt)
{
demoButton.setText("Hello World!");
}
Affiche le texte "Hello World !" sur le libell du bouton lorsqu'on clique dessus.
l'exemple
ci-dessus,
puis
remplacez
'demoButton.setText'
par
12GI :
En principe les dtails de evt nous intressent peu, mais par pure curiosit, on peut
faire afficher par un simple toString() les informations de l'vnement. Vous pouvez
placer un composant du type JTextArea sur votre fiche et lui donner le nom
eventTextArea. Dans la mthode de raction au bouton placez la ligne :
eventTextArea.setText(evt.toString());
Pour mieux voir le texte, vous pouvez activer la proprit lineWrap de eventTextArea.
Que reconnaissez-vous dans ces informations ?
Poussez la touche Ctrl ou Shift en mme temps que le bouton de la souris, que
remarquez-vous ?
Exemple 2 :
Si vous avez intgr la classe Point dans votre projet :
private void demoButtonActionPerformed(java.awt.event.ActionEvent evt)
{
Point myPoint = new Point(12.0 , 50.0);
// cre un nouveau point
demoButton.setText(myPoint.toString());
// affiche les coordonnes du
// point sur le bouton
}
Page 31 de 59
CNPI-Gdt-PrograTG'15
7.4.
12GE/12GI
JTextField est un composant d'entre, c'est--dire qu'on l'utilise essentiellement pour entrer
des donnes dans un programme. Son contenu est toujours un texte, donc du type String .
Voici les lments les plus importants d'un champ d'entre :
7.4.1.
Attributs
Dsignation
Proprit dans
NetBeans
Accesseurs
void setText(String)
String getText()
lues en employant
Double.valueOf(...)
ou
Exemples :
int
n = Integer.valueOf(intTextField.getText());
double r = Double.valueOf(doubleTextField.getText());
7.4.2.
vnements
Description
actionPerformed
Afin de placer un champ d'entre sur votre fiche principale, rendez vous dans le
mode Design , cliquez dans la palette sur Text Field , puis cliquez
l'endroit auquel vous dsirez placer le champ d'entre.
Page 32 de 59
12GE/12GI
7.5.
CNPI-Gdt-PrograTG'14
Les libells (JLabel) peuvent tre utiliss pour afficher une image sur une fiche. On peut
choisir l'un des types d'images que voici : JPG, PNG ou GIF. Modifiez pour ceci la proprit icon
du libell :
une image qui se trouve dj dans le projet (Image Within Project) ou choisir une image sur
le disque que vous importez dans le projet (External Image Import to Project ...).
7.6.
part les composants standards, il existe encore deux autres composants trs utiles :
7.6.1.
Attributs
Dsignation
Accesseurs
le minimum possible
minimum
void setMinimum(int)
int getMinimum()
le maximum possible
maximum
void setMaximum(int)
int getMaximum()
la valeur actuelle
value
void setValue(int)
int getValue()
7.6.2.
vnements
Description
stateChanged
Afin de placer une glissire ou une barre de progression sur votre fiche
principale, rendez vous dans le mode Design , cliquez dans la palette sur
Slider ou Progression Bar , puis cliquez l'endroit auquel vous dsirez
placer la glissire.
Page 33 de 59
CNPI-Gdt-PrograTG'15
7.7.
12GE/12GI
7.7.1.
Attributs
Dsignation
Accesseurs
la couleur du panneau
background
void setBackground(Color)
Color getBackground()
la largeur du panneau
int getWidth()
la hauteur du panneau
int getHeight()
Afin de placer un panneau sur votre fiche principale, rendez vous dans le mode
Design , cliquez dans la palette sur Panel , puis cliquez l'endroit auquel
vous dsirez placer le panneau.
D'autres lments peuvent tre placs sur le panneau comme sur une fiche.
L'avantage est qu'on peut redimensionner le panneau ou dplacer l'ensemble des
lments qui se trouvent sur le panneau.
7.7.2.
Parfois on a besoin d'accder au canevas d'un panneau de l'extrieur. Comme tous les
composants drivs de JComponent, les lments du type JPanel possdent un mthode
getGraphics() qui donne accs au canevas actuel du panneau.
Attention : Il faut quand mme savoir que la meilleure mthode pour dessiner sur le canevas
reste l'implmentation de la mthode paintComponent. En plus, le canevas d'un objet peut
tre remplac par une nouvelle instance pendant que l'objet est redessin.
Page 34 de 59
12GE/12GI
7.8.
CNPI-Gdt-PrograTG'14
Description
JTextField
selectAll()
JComponent
JButton
doClick()
est l'tude scientifique de la relation entre l'homme et ses moyens, mthodes et milieux de travail
et l'application de ces connaissances la conception de systmes qui puissent tre utiliss avec le maximum de
confort, de scurit et d'efficacit par le plus grand nombre. (source : Wikipedia.fr)
[ver. 11 janv. 2015]
Page 35 de 59
CNPI-Gdt-PrograTG'15
8.
12GE/12GI
Les listes
8.1.
La classe ArrayList permet de stocker une liste d'un nombre non dfini d'objets quelconques.
Elle permet cependant de spcifier quel type d'objet on aime y placer.
La classe ArrayList est contenue dans le paquet java.util. Il faut donc l'importer avant de
pouvoir l'utiliser.
Exemple
// avant de pouvoir l'utiliser, il faut importer la classe ArrayList
import java.util.ArrayList;
...
// dclaration d'une liste de personnes (public class Person)
ArrayList<Person> alList = new ArrayList<>();
La syntaxe gnrique pour la dclaration d'une liste est la suivante :
ArrayList<classe_des_lments> nom = new ArrayList<>();
C'est ici qu'on dfinit le type des lments de la liste.
Nous pouvons donc nous-mmes fixer le type des lments de la liste. La classe ArrayList
est donc une sorte de modle (DE: Vorlage / EN: template) qui peut tre appliqu une
autre classe. Pour des raisons de lisibilit, nous allons prfixer nos listes par le prfixe al .
Depuis Java 7, il n'est plus ncessaire de spcifier le type des lments contenus dans la liste
lors de l'appel au constructeur. Il suffit donc d'indiquer <> lors de l'initialisation. 5
La taille d'une telle liste est dynamique, c'est--dire qu'elle s'adapte automatiquement en
fonction du nombre d'lments qu'on y place. Lors de la cration de la liste, celle-ci est bien
entendu vide.
Exemples :
ArrayList<String> alDemoList = new ArrayList<>();
alDemoList =
alDemoList.add("Hello");
alDemoList.add("World!");
alDemoList =
Hello
World!
alDemoList.add("Some");
alDemoList.add("1 2 3");
alDemoList =
Hello
World!
Some
123
5 En Java 6 et dans les versions antrieures, il faut rpter le type d'lments lors de l'initialisation.
P.ex. :
ArrayList<Person> alMyList = new ArrayList<Person>();
Page 36 de 59
12GE/12GI
8.1.1.
CNPI-Gdt-PrograTG'14
Si on dsire crer des listes contenant des lments de types primitifs, donc par exemple int
ou double, il faut passer obligatoirement par les classes enveloppes ! (cf. chapitre 4)
Dclaration d'une liste de nombres entiers :
ArrayList<Integer> alNomDeLaListe = new ArrayList<>();
Dclaration d'une liste de nombres dcimaux :
ArrayList<Double> alNomDeLaListe = new ArrayList<>();
8.1.2.
Mthodes
La classe ArrayList possde un bon nombre de mthodes qui nous permettent de manipuler
la liste. Voici celles que nous utiliserons dans ce cours :
Mthode
Description
boolean add(Object)
void clear()
int indexOf(Object)
Object remove(int)
int size()
boolean isEmpty()
Object[] toArray()
Remarques :
P.ex : Si une liste contient 10 lments (size()==10) alors ces lments ont les indices
(positions) : 0, 1, 2, , 9.
Page 37 de 59
CNPI-Gdt-PrograTG'15
12GE/12GI
Exemples :
Soit la liste suivante :
Code
alList.add("Jean");
alList.add("Anna");
alList.add("Marc");
alList.remove(0);
alList.clear();
if (alList.isEmpty())
ou bien :
if (alList.size()==0)
Conseil :
Consultez l'annexe C : 12.3 Ajout de proprits et de mthodes <Insert Code...> pour
simplifier la rdaction d'une classe contenant une ArrayList.
Page 38 de 59
12GE/12GI
8.2.
CNPI-Gdt-PrograTG'14
La JList est assez similaire la ArrayList avec la grande diffrence qu'il s'agit ici d'un
composant visuel. Dans le cadre de ce cours, la liste visuelle JList est utilise uniquement
pour visualiser le contenu d'une ArrayList. En reprenant la logique du MVC, JList joue donc
le rle de la vue et du contrleur pour le modle ArrayList.
8.2.1.
Attributs
Dsignation
Accesseurs
void setListData(Object[])
void setSelectedIndex(int)
int getSelectedIndex()
void clearSelection()
Remarque :
clearSelection() est utilis pour enlever toute slection de la liste. Cette mthode
modifie uniquement la slection, le contenu de la liste reste inchang.
8.2.2.
vnements
Description
valueChanged
Afin de placer une liste sur votre fiche principale, rendez vous dans le mode
Design , cliquez dans la palette sur List , puis cliquez l'endroit auquel
vous dsirez placer la liste.
Lorsque vous placez une JList sur la fiche principale, NetBeans l'incorpore
automatiquement dans un JScrollPane. En effet, ce dernier est ncessaire pour
le dfilement du contenu de la liste.
SelectionMode a par dfaut la valeur MULTIPLE_INTERVAL qui permet de slectionner plusieurs groupes de
donnes dans une JList. Dans notre cours, nous n'aurons besoin que d'une seule slection par liste. Ainsi,
nous allons toujours choisir l'option SINGLE, ce qui nous vitera aussi le traitement beaucoup plus complexe
de slections multiples.
Page 39 de 59
CNPI-Gdt-PrograTG'15
12GE/12GI
Dans la suite, nous allons utiliser la JList uniquement pour les deux cas de figure suivants :
Exemple :
Soit la structure de donne suivante :
private ArrayList<Double> alMyList = new ArrayList<>();
On initialise la liste de la manire suivante :
alMyList.add(0.0);
alMyList.add(3.141592);
alMyList.add(1033.0);
En supposant l'existence d'une JList nomme myNumberList, le code suivant est ncessaire
pour afficher le contenu de alMyList dans l'interface graphique :
myNumberList.setListData( alMyList.toArray() );
En effet toute liste possde une mthode toArray() et une JList en a besoin afin de
pouvoir visualiser le contenu d'une liste du type ArrayList.
En implmentant maintenant l'vnement valueChanged de la faon suivante :
private void myNumberListValueChanged(javax.swing.event.ListSelectionEvent evt)
{
System.out.println( myNumberList.getSelectedIndex() );
}
On peut observer dans la console de NetBeans (c'est la partie juste en dessous de la partie
dans laquelle on crit le code source) qu' chaque changement de l'lment slectionn de la
liste, la position de ce dernier y est affich.
En modifiant le code de la manire suivante, ce n'est plus la position qui est affiche, mais
l'lment lui-mme :
private void myNumberListValueChanged(javax.swing.event.ListSelectionEvent evt)
{
System.out.println( alMyList.get( myNumberList.getSelectedIndex() ) );
}
Page 40 de 59
12GE/12GI
8.3.
CNPI-Gdt-PrograTG'14
Dans la plupart de nos projets, la liste (ArrayList) se trouve encapsule l'intrieur d'une
autre classe ( voir exercices). Nous ne pouvons donc pas appeler directement la mthode
toArray() de la liste et il faudra passer par une tape intermdiaire.
Supposons par exemple que nous ayons une classe Bill, reprsentant une facture, ainsi que
la classe Entry, reprsentant une entre d'une facture. Le schma UML est le suivant :
La liste alEntries est prive, donc inaccessible de l'extrieur. Afin de pouvoir afficher les
lments d'une facture dans une JList, il nous faut cependant un accs la mthode toArray
de alEntries. Comme nous ne voulons pas donner un accs complet la liste alEntries de
l'extrieur, nous allons seulement rendre accessible le rsultat de toArray(). Nous crons
donc l'intrieur de Bill une mthode publique qui ne fait rien d'autre que retourner le
rsultat de alEntries.toArray().
La mthode toArray() qu'on va ajouter la classe Bill sera la suivante :
public Object[] toArray()
{
return alEntries.toArray();
}
Remarquez que le rsultat de toArray()
est
Object[].
En
effet,
la
mthode
Object[] est un tableau d'objets. La structure 'tableau' (array) est une structure de base de Java. Son utilit
correspond celle de ArrayList, mais elle est beaucoup moins confortable que ArrayList. Dans ce cours, nous ne
traitons pas ce type de tableaux. Il suffit que vous reteniez qu'il faut noter des crochets [] la fin.
Page 41 de 59
CNPI-Gdt-PrograTG'15
9.
12GE/12GI
Dessin et graphisme
Dans un environnement graphique, tout ce que nous voyons l'cran (fentres, boutons,
images, ) doit tre dessin point par point l'cran. Les objets prdfinis (JLabel,
JButton, ...) possdent des mthodes internes qui les dessinent l'cran. Nous pouvons
cependant raliser nos propres dessins l'aide de quelques instructions.
Le prsent chapitre dcrit une technique assez simple qui permet de raliser des dessins en
Java l'aide d'un panneau du formulaire du type JPanel Form.
Voici le procd suivre, tape par tape, afin de crer un nouveau dessin :
1. Ajoutez un nouveau JPanel Form votre projet et nommez-le DrawPanel.
2. Cette nouvelle classe possde une vue source et une vue design (comme un
JFrame ). En principe, nous n'allons jamais placer d'autres composants sur un
JPanel Form. Activez la vue source et ajoutez la mthode suivante :
public void paintComponent(Graphics g)
{
// ici sera programm le dessin
}
3. Le compilateur va indiquer qu'il ne connat pas la classe Graphics. Tout comme on l'a
fait pour la classe ArrayList, il faut importer la classe Graphics afin de pouvoir
employer ses mthodes, attributs et constantes. Il faut donc ajouter au dbut du fichier
Java l'instruction :
import java.awt.Graphics;
Si vous l'oubliez, NetBeans vous affichera une petite ampoule d'erreur rouge
dans la
marge ct du mot 'inconnu'. Si vous cliquez sur cette ampoule, NetBeans vous
propose d'importer la classe pour vous : Choisissez simplement 'Add import for
java.awt.Graphics' et NetBeans va ajouter l'instruction.
4. Compilez votre projet en cliquant par exemple sur le bouton :
5. Aprs avoir compil, vous pouvez tirer avec la souris le DrawPanel partir de l'arbre de
la partie gauche de la fentre sur la MainFrame. Placez-le o vous voulez. Donnez-lui
toujours le nom drawPanel.
Page 42 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
9.1.
Le canevas Graphics
Un artiste peintre dessine sur un canevas (DE : die Leinwand). En informatique l'image de
l'cran est aussi appele canevas et elle consiste en une grille compose de pixels minuscules,
des points qui peuvent prendre des millions de couleurs diffrentes.
En Java, le canevas n'est rien d'autre qu'une instance de la classe Graphics. Celle-ci possde
un grand nombre de mthodes relatives aux dessins. Tous les composants graphiques
possdent un tel objet.
9.1.1.
La gomtrie du canevas
Quant la gomtrie d'un canevas, il faut savoir que l'axe des Y est invers par rapport au
plan mathmatique usuel. L'origine, c'est--dire le point (0,0) se trouve en haut gauche. Le
point en bas droite possde les coordonnes (getWidth()-1, getHeight()-1).
Attention : Le canevas lui-mme n'a pas d'attribut indiquant sa largeur ou sa hauteur. Voil
pourquoi ces donnes doivent tre prises du panneau JPanel sur lequel on dessine.
getWidth()
getHeight()
(0,0)
(getWidth()-1,getHeight()-1)
Page 43 de 59
CNPI-Gdt-PrograTG'15
9.1.2.
12GE/12GI
Mthode
Description
Color getColor()
void setColor(Color)
void drawString(String s, int x, int y) Dessine le texte s la position (x,y) tel que
(x,y)
reprsente
le
point
infrieur
de
9.1.3.
La mthode repaint()
Le panneau (et tous les composants visibles) possdent une mthode repaint() qui redessine
le composant et tout ce qui se trouve dessus. Lors d'un appel de repaint() d'un DrawPanel la
mthode paintComponent(...) est appele automatiquement. C.--d. si vous voulez faire
redessiner le panneau, il est pratique d'appeler simplement repaint().
Page 44 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
Conclusions :
Comme contrle, essayez cet exemple en pratique (aprs avoir lu le chapitre 9.2).
9.1.4.
Tout texte dessin l'aide de la mthode drawString(...) est dessin de telle manire ce
que les coordonnes passes comme paramtres reprsentent le point infrieur gauche de
l'alignement de base ( baseline ) du texte.
Page 45 de 59
CNPI-Gdt-PrograTG'15
9.2.
12GE/12GI
La classe Color
La classe Color modlise une couleur. Elle prdfinit un grand nombre de couleurs mais elle
permet aussi de spcifier une nouvelle couleur selon le schma RGB (red/green/blue).
Pour pouvoir employer les mthodes, attributs et constantes de la classe Color, il faut ajouter
au dbut du fichier Java l'instruction :
import java.awt.Color;
Si vous l'oubliez, NetBeans ne connatra pas les instructions de la classe Color, et il vous
affichera une petite ampoule d'erreur rouge
dans la marge ct du mot 'inconnu'. Si
vous cliquez sur cette ampoule, NetBeans vous propose d'importer la classe pour vous :
Choisissez pour cela 'Add import for java.awt.Color'.
9.2.1.
Constructeur
Une couleur est une instance de la classe Color et chaque nouvelle couleur doit en principe
tre cre, comme tout autre objet. La classe Color possde plusieurs constructeurs, dont
voici le plus important :
Constructeur
Description
Color(int red, int green, Cre une nouvelle couleur avec les diffrentes quantits de
int blue)
rouge, vert et bleu. Les valeurs des paramtres doivent tre
comprises dans l'intervalle [0,255].
Color(int red, int green, comme ci-dessus, mais le paramtre alpha permet de fixer le
int blue, int alpha) degr de transparence pour la couleur. Exemples :
alpha=0
=> la couleur est compltement transparente
alpha=127
=> la couleur est transparente 50%
alpha=255
=> la couleur est opaque (non transparente)
Exemples :
Color color1 = new Color(0,0,0);
Page 46 de 59
12GE/12GI
9.2.2.
CNPI-Gdt-PrograTG'14
Constantes
La classe Color possde un certain nombre de couleurs prdfinies. Ce sont des constantes
qui n'ont pas besoin d'tre cres avant d'tre employes. En voici quelques exemples :
Color.RED
Color.BLUE
Color.YELLOW
Color.GREEN
Color.GRAY
9.3.
La classe Point
Un grand nombre de mthodes en Java fonctionnent sur base de coordonnes dans un plan.
Souvent, des coordonnes sont indiques sous forme de points dfinis l'aide d'une classe
Point. Toute instance de cette classe Point reprsente donc un point dans un plan bidimensionnel.
9.3.1.
Constructeur
Constructeur
Description
Point(int x, int y)
9.3.2.
Attributs
La classe Point
Description
int x , int y
9.3.3.
Mthodes
Mthodes
Description
double getX()
double getY()
void setLocation(double x,
double y)
Point getLocation()
Page 47 de 59
CNPI-Gdt-PrograTG'15
9.4.
12GE/12GI
Souvent, nous allons avoir besoin de dessiner plusieurs lments se trouvant dans une liste.
Pour ce faire, nous allons suivre une logique qui repose le plus possible sur le schma MVC,
mais en vitant de trop compliquer la structure des classes 8. Afin de mieux illustrer ceci,
prenons le schma UML que voici :
Explications :
La classe DrawPanel est bien videmment la vue. Cette classe a comme tche unique
de raliser le dessin. Pour ceci, elle a besoin d'un lien vers le modle. Pour cette raison
elle possde une mthode set... (ici : setElements) qui est appele par le contrleur.
En suivant le modle MVC dans sa dernire consquence, chaque classe du modle devrait tre associe une
classe correspondante pour la vue. Comme nos projets sont de taille assez limite, nous allons utiliser une solution
de compromis o les classes du modle peuvent possder une mthode draw pour dessiner leurs instances.
Page 48 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
La classe MainFrame est le contrleur. Elle gre donc toute l'application. Ses tches
Exemple :
Voici comme illustration des extraits de code pour une application typique :
MainFrame.java :
public class MainFrame extends javax.swing.JFrame {
private Elements elements = new Elements(); //initialiser les lments
public MainFrame() {
initComponents();
drawPanel.setElements(elements);
}
. . .
//synchronisation initiale
DrawPanel.java :
public class DrawPanel extends javax.swing.JPanel {
private Elements elements = null;
public void setElements(Elements pElements) {
elements = pElements;
}
public void paintComponent(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
if (elements != null)
elements.draw(g);
}
}
Page 49 de 59
CNPI-Gdt-PrograTG'15
10.
12GE/12GI
Le prsent chapitre reprend deux procds, expliqus tape par tape, pour publier une
application Java sur Internet. Son contenu ne fait pas partie du programme officiel, mais
devrait tre vu plutt comme une source de motivation ou d'inspiration (p.ex. pour un projet).
10.1.
Java Applet
Une applet est une application Java intgre dans une page web. Afin de crer une telle
page web, il faut suivre les tapes suivantes :
1. Crer une application Java vierge.
2. Ajouter une fentre JFrame Form... vierge au projet en l'appelant MainFrame.
3. Ajouter un panneau JPanel Form... au projet en l'appelant MainPanel.
4. Ajouter ses composants au formulaire MainPanel et programmer les mthodes de
ractions dans MainPanel.
Ceci est en fait l'tape dans laquelle vous crivez votre application. La seule diffrence
avec les exercices du cours est celle, que vous crivez votre application dans une classe
du type panneau et non dans une classe du type fentre . Ceci est ncessaire
afin de pouvoir intgrer le panneau dans l'applet.
5. Compiler le projet l'aide du menu : Run > Clean and Build Main Projet
6. Afficher MainFrame dans la vu Design .
7. Tirer l'aide de la souris MainPanel partir de l'arbre de la partie gauche de la fentre
sur la MainFrame.
Page 50 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
Page 51 de 59
CNPI-Gdt-PrograTG'15
10.2.
12GE/12GI
Une application Java du type Java Web Start (JWS) est une application Java tout fait
standard mais qui a t compile spcialement pour tre lanc via Internet. Afin de crer une
telle application JWS, il faut suivre les tapes suivantes :
1. Crer une nouvelle application ou en ouvrir une qui existe.
2. Faire un clic droit sur le projet en question et choisir la dernire entre du menu
contextuel dnomme Properties .
3. Dans la fentre qui s'ouvre ensuite :
12GE/12GI
11.
CNPI-Gdt-PrograTG'14
En Unimozer, il est facile d'imprimer le code des classes modles. Pour imprimer le code des classes Vue/Contrleur
(JFrame) dveloppes en NetBeans, il est cependant important de bien choisir les options d'impression pour ne pas
imprimer trop de pages superflues (contenant p.ex. le code gnr ou des pages vides). L'impression en NetBeans est
possible, mais nous conseillons le programme JavaSourcePrinter qui a t dvelopp spcialement pour nos
besoins.
11.1.
Le logiciel JavaSourcePrinter peut tre lanc par Webstart sur le site java.cnpi.lu.
Le logiciel a t conu pour imprimer en bloc le code
source Java de l'ensemble des projets contenus dans un
dossier, p.ex. un enseignant qui veut imprimer tous les
projets de ses lves en une fois. Il est aussi trs
pratique pour un lve qui veut imprimer l'un ou
plusieurs de ses projets en vitant des pages
superflues. Le logiciel fonctionne de manire optimale si
le dossier est structur de la manire suivante:
Select
Directory...).
Panneau de prvisualisation
Page 53 de 59
CNPI-Gdt-PrograTG'15
12GE/12GI
Options de filtrage
Les options de filtrage permettent de spcifier les lignes du code ne pas imprimer (menu:
Options Filter Settings...) :
JavaDoc
Les commentaires JavaDoc ne sont pas imprims
Comments
Les commentaires ne sont pas imprims.
Page 54 de 59
12GE/12GI
CNPI-Gdt-PrograTG'14
Options d'impression
Menu: Options Print Settings... :
Font size
Taille de la police.
Tab size
Quantit d'espaces blancs correspondant une tabulation.
Monochrome print
Impression en noir et blanc (si vous n'aimez pas les nuances de gris dans le cas d'une
impression avec une imprimante noir et blanc).
at level
Page 55 de 59
CNPI-Gdt-PrograTG'15
11.2.
12GE/12GI
Impression en NetBeans
Page 56 de 59
12GE/12GI
12.
CNPI-Gdt-PrograTG'14
NetBeans propose un grand nombre d'automatismes qui nous aident grer notre code et
l'entrer de faon plus confortable. En voici les plus utiles 9:
12.1.
Suggestions automatiques :
Mme sans action supplmentaire de notre part, NetBeans nous suggre automatiquement des
mthodes, attributs, paramtres,... Nous n'avons qu' les accepter en poussant sur <Enter>.
NetBeans choisit ces propositions d'aprs certains critres (syntaxe, types, objets dfinis...)
qui correspondent la situation actuelle.
Mais attention : ces suggestions ne correspondent pas toujours nos intentions ou besoins.
Ceci compte surtout pour les valeurs des paramtres que NetBeans propose...
12.2.
Il peut sembler fastidieux de devoir entrer des noms longs comme p.ex. les noms des
composants avec suffixes, mais NetBeans (tout comme Unimozer) vous assiste en compltant
automatiquement un nom que vous avez commenc entrer si vous tapez <Ctrl>+<Space>.
En gnral il suffit d'entrer les deux ou 3 premires lettres d'un composant, d'une variable,
d'une mthode ou d'une proprit et de taper sur <Ctrl>+<Space> pour que NetBeans
complte le nom ou vous propose dans une liste tous les noms de votre programme qui
correspondent.
Exemple : Dans ce programme qui contient un bouton toggleAnimationButton NetBeans
propose ce nom aprs avoir entr 'tog' suivi de <Ctrl>+<Space>.
12.3.
<Alt> + <Insert>
<Ctrl>+<I>
Page 57 de 59
CNPI-Gdt-PrograTG'15
12GE/12GI
Le nombre d'options dans le menu <Insert Code...> dpend de l'tat actuel de votre classe.
Il est recommand de commencer par dfinir tous les attributs (<Add Properties...>) avec
leurs accesseurs et modificateurs (si ncessaire) et de dfinir ensuite le constructeur et les
mthodes toString.
12.4.
Si votre classe contient un attribut priv dont vous voulez rendre accessible quelques
mthodes d'autres objets, il est trs pratique d'employer l'option <Delegate Method...> du
menu <Insert Code...>.
Exemple typique :
Imaginez que votre classe contienne une ArrayList
alLines comme attribut et que vous vouliez rendre
publiques les mthodes add, clear, remove, size
et toArray. L'option <Delegate Method...> vous
propose alors d'insrer toutes ces mthodes en les
cochant simplement dans la liste.
Page 58 de 59
12GE/12GI
12.5.
CNPI-Gdt-PrograTG'14
Pour des blocs d'instruction utiliss frquemment il est possible de dfinir des raccourcis.
NetBeans se charge d'tendre ces raccourcis dans les blocs dfinis ds que nous entrons le
raccourci suivi de <Tab>.
Il n'est mme pas ncessaire de dfinir ces blocs nous mmes, puisque NetBeans connat dj
la plupart des blocs les plus usuels.
Vous pouvez consulter la liste des raccourcis prdfinis dans le menu des prfrences sous
<Editor> <Code Templates>.
Essayez par exemple les codes suivants (vous allez tre surpris :-) :
sout<Tab>
ife<Tab>
for<Tab>
forl<Tab>
wh<Tab>
Remarque : L'extension des raccourcis fonctionne uniquement si vous avez entr le code en
une fois sans le corriger.
12.6.
Formatage du code
Entretemps, vous voyez certainement l'intrt endenter votre code (c.--d. crire les blocs
de code en retrait) pour qu'il soit bien structur et bien lisible. Si quand mme vous devez
changer l'indentation de code dj existant, il est recommand, de le slectionner, puis
d'utiliser <Tab> ou <Shift>+<Tab> pour l'endenter ou le dsendenter en une seule fois.
Vous pouvez aussi employer les boutons :
<Alt>+<Shift>+F
(sous Windows)
<Ctrl>+<Shift>+F
(sous Mac-OSX)
12.7.
Il est parfois utile de mettre tout un bloc d'instructions entre commentaires pour le dsactiver
(p.ex. parce qu'il contient une erreur dont on ne trouve pas la cause ; ou parce qu'on a trouv
une meilleure solution, mais on veut garder le code de l'ancienne version pour le cas de
besoin). En principe, il est recommand de mettre le bloc entre commentaires /* */. mais
il est souvent plus rapide de slectionner le bloc et d'utiliser les boutons d'activation et de
dsactivation de NetBeans, qui placent ou suppriment des commentaires devant toutes les
lignes slectionnes :
Page 59 de 59