Lab Java

publicité
Exercices d’application
Lab
Java
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
1
TD0 – .java, .class, .jar, etc.
Organisation d’un projet Java
Création des répertoires de travail (exemple sous UNIX) :
# mkdir app_bonjour
# cd app_bonjour
# mkdir -p classes jar src/bonjour/afficheur
Creation des fichiers sources :
src/bonjour/BonjourLaReunion.java
package bonjour;
import bonjour.afficheur.*;
public class BonjourLaReunion {
public static void main (String [] args) {
Afficheur a_printer = new Afficheur();
a_printer.affiche("Bonjour la Réunion !");
}
}
src/bonjour/afficheur/Afficheur.java
package bonjour.afficheur;
public class Afficheur {
public void affiche(String message) {
System.out.println(message);
}
}
Vous disposez alors de l'arborescence suivante :
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
2
TD0 – .java, .class, .jar, etc.
Génération et Exécution
Compilation de l'application :
Commande javac
# javac -sourcepath src -d classes
src/bonjour/BonjourLaReunion.java
Vous obtenez l'arborescence suivante :
Archivage de l'application app_bonjour :
Pour archiver l'application, commencez par créer votre propre MANIFEST :
classes/MANIFEST
Manifest-version: 1.0
Created-by: Remy Courdier
Main-Class: bonjour.BonjourLaReunion
Création de l’archive :
# jar -cmf classes/MANIFEST jar/bonjour_la_reunion.jar -C classes bonjour
Exécution de l'application « Bonjour la Réunion » :
# java -classpath classes bonjour.BonjourLaReunion
ou : # java -classpath jar/bonjour_la_reunion.jar bonjour.BonjourLaReunion
ou encore : # java -jar jar/bonjour_la_reunion.jar
Génération de la documentation :
Javadoc –d ./doc –author –version –sourcepath src bonjour bonjour.afficheur
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
3
TD1 - Les structures de contrôle Java :
Classes WhileTest et ListCharacters
Implémenter les applications
WhileTest.Java
ListCharacters.Java
Compiler
Tester
© Rémy Courdier
// WhileTest.java
/** * Demonstrates the while loop */
public class WhileTest {
public static void main(String args[]) {
double r = 0;
while (r < 0.99d) {
r = Math.random();
System.out.println(r);
}
}
}
// ListCharacters.java
/** * Demonstrates "for" loop by listing
* all the ASCII characters. */
public class ListCharacters {
public static void main(String args[]) {
for ( char c = 0; c < 128; c++ )
if (c != 26 ) // ANSI Clear screen
System.out.println(
"value: " + (int)c +
" character: " + c );
}
}
1996-2008- Lab Java - Version du cours 2.9
4
TD2 - Les structures de contrôle
Classe BreakAndContinue
Implémenter
BreakAndContinue.Java
// BreakAndContinue.java
/** les clauses break et continue */
public class BreakAndContinue {
public static void main(String args[]) {
for(int i = 0; i < 100; i++) {
if(i == 74) break; // Out of loop
if(i % 9 != 0) continue; // Next iter.
System.out.println(i);
}
int i = 0; // An "infinite loop":
while(true) {
i++;
int j = i * 27;
if(j == 1269) break; // Out of loop
if(i % 10 != 0) continue; // Top
System.out.println(i);
}
Modifier le code
supprimer un break
supprimer un continue
}
}
Résultat : (avec un nombre par ligne)
0 9 18 27 36 45 54 63 72 10 20 30 40
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
5
TD3 - Les Tableaux, les exceptions
classe TabNew
Implémenter
TabNew.Java
Argument de programme
passer “mod” en paramètre
du programme
© Rémy Courdier
import java.util.*;
/** TabNew.java
* Création de tableaux par l’operateur new
*/
public class TabNew {
static Random rand = new Random();
static int pRand(int mod) {
return Math.abs(rand.nextInt()) % mod;
}
public static void main(String args[]) {
// déclaration et init. de tableaux
int tab[]; // <=> int [] tab;
tab = new int[pRand(20)];
// int tab[] = {1,2,3,4,5};
// utilisation de tableaux
prt("length of tab = " + tab.length);
for(int i = 0; i < tab.length; i++)
prt("tab[" + i + "] = " + tab[i]);
}
static void prt(String s) {
System.out.println(s);
}
}
1996-2008- Lab Java - Version du cours 2.9
6
TD4 - Le polymorphisme “simple”
Classes Forme, Cercle, Carre, Formes
Forme
display()
Considérer une application devant
remplir aléatoirement un tableau de
Formes (Cercle, Carré)
Appliquer un traitement d’affichage de la
forme en mode caractère
Cercle
display()
© Rémy Courdier
Carré
display()
> java Forme
Je suis une forme carrée
Je suis une forme circulaire
Je suis un …
1996-2008- Lab Java - Version du cours 2.9
7
TD4 - Le polymorphisme “simple”
Classes Forme, Cercle, Carre, Formes
class Forme {
void display() {};
static void prt(String s) {
s =
” Je suis une forme ” + s
System.out.println(s);
}
}
Forme
display()
Cercle
display()
//methode main d’entree du programme
public static void main (String args[]){
Forme tf[] = new Forme[8];
// remplissage du tableau
for (int i=0; i<tf.length; i++)
tf[i] = Formes.randForme();
// affichage du tableau
// avec utilisation du polymorphisme
for (int i=0; i<tf.length; i++)
tf[i].display();
}
Carré
display()
class Cercle extends Forme {
void display(){ prt(“circulaire”); }
}
class Carre extends Forme {
void display(){ prt(“carrée”); }
}
© Rémy Courdier
class Formes {
public static Forme randForme() {
switch((int) (Math.random() * 2)) {
default : //pour le compilateur
case 0 : return new Cercle();
case 1 : return new Carre();
}
}
}
1996-2008- Lab Java - Version du cours 2.9
8
TD5 - Les classes abstraites
Classes Forme, Cercle, Carre, Formes
abstract class Forme {
public abstract void display();
static void prt(String s) {
System.out.println(s);
}
}
Forme
display()
Cercle
display()
//methode main d’entree du programme
public static void main (String args[]){
Forme tf[] = new Forme[8];
// remplissage du tableau
for (int i=0; i<tf.length; i++)
tf[i] = Formes.randForme();
// affichage du tableau
// avec utilisation du polymorphisme
for (int i=0; i<tf.length; i++)
tf[i].display();
}
Carré
display()
class Cercle extends Forme {
public void display(){ prt(“Cercle”); }
}
class Carre extends Forme {
public void display(){ prt(“Carre”); }
}
© Rémy Courdier
public class Formes {
//classe “public” du fichier
public static Forme randForme() {
switch((int) (Math.random() * 2)) {
default : //pour le compilateur
case 0 : return new Cercle();
case 1 : return new Carre();
}
}
}
1996-2008- Lab Java - Version du cours 2.9
9
TD6 - Une applet simple : SimpleDraw
Dessin d’un cercle
Développer un applet de
configuration :
largeur 270 pixel
hauteur 150 pixels
appelé par un fichier html
Cet applet doit dessiner un
cercle :
de couleur rouge
g.setColor (Color.red)
de rayon 40 pixels
positionné en x=115 et y=55
g.fillOval(115,55,40,40)
classes de programme
SimpleDraw
© Rémy Courdier
Classes standards Java à
importer :
package applet
pour la définition de la classe Applet
(classe de base)
package awt
classe Graphics: pour dessiner
classe Color : définition des couleurs
Fichiers produits
SimpleDraw.html
SimpleDraw.java
SimpleDraw.class
Passage de paramètre
réaliser les modifications nécessaires
pour passer la couleur du cercle en
paramètre de l’applet
1996-2008- Lab Java - Version du cours 2.9
10
TD6 - Une applet simple : Correction
Dessin d’un cercle
Creer une applet qui dessine
un cercle
classes de programme
SimpleDraw
classes standards Java :
package applet
package awt
<applet
codebase="SimpleDraw"
code="SimpleDraw.class"
width=270
height=150>
</applet>
Applet : classe de base
Graphics: pour dessiner
Color : définition des couleurs
// A partir de java 1.5, ajouter ce code
// dans la la class public d’une Applet
public void init() {
super.init();
try {
System.setSecurityManager(null);
} catch (Exception e) {
e.printStackTrace();
}
}
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
11
TD7 - Gestion des événements
Gestion d’un “MouseEvent”
Dessine un cercle à l’emplacement du clic souris
utilisation de la classe SimpleDraw
création de la classe Circle pour la gestion du cercle
Directives d’implémentation :
Déclaration à l’Event Handler
addMouseListener(new ML());
Classe de gestion de l’événement souris
class ML extends MouseAdapter {...}
ou
classe ML implements MouseListener {...}
Méthode de gestion du clic souris
public void mouseClicked (MouseEvent e){...}
Récupération des coordonnées dans l’événement “e”:
e.getX() et e.getY()
Raffraichissement de l’écran
repaint();
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
12
TD7 - Gestion des événements - Correction
Gestion d’un “MouseEvent”
Dessine un cercle à
l’emplacement du clic souris
classe SimpleDraw
Classe Circle
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
13
Passage de paramètre à une Applet
La primitive “getParameter()”
public class SimpleDraw extends Applet {...
public void init() {
c = new Circle();
c.initialize(50,50, getParameter("color1"));
addMouseListener(new ML());
}
...}
class Circle {
...
void initialize (int x, int y, String colorString) {
if (colorString.equals("Red"))
color = Color.red;
<applet codebase="SimpleDraw"
else if (colorString.equals("Vert"))
code="SimpleDraw.class"
color = Color.green;
width=270
else if (colorString.equals("Noir"))
height=150>
color = Color.black;
<param name=color1 value="Rouge">
else if (colorString.equals("Bleu"))
</applet>
color = Color.blue;
else
color = Color.red; // par défaut
...
}
}
Passer le
paramètre de
couleur à l’applet
SimpleDraw
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
14
TD7 - Gestion des événements
Gestion d’une liste à choix
Dessine une forme cercle ou carrée de couleur rouge, verte ou
bleue à l’emplacement du clic souris
Les sélections de formes et des couleurs se font par deux listes à choix
Utilisation des classes SimpleDraw et Circle
Création des classes Shape (ou forme) et Square (ou Carre)
Directives d’implémentation :
Déclarations et initalisations
Choice
colorChoice = new Choice(); // une liste à choix
colorChoice.addItem("rouge");... // ajout d’items
déclaration au Event Handler
colorChoice.addItemListener(new ILcolor ());
Classe de gestion de l’événement sur un item d’une liste à choix
class ILcolor implements ItemListener {...}
Méthode de gestion du changement de sélection
public void itemStateChanged (ItemEvent e){
String colorStr =
colorChoice.getSelectedItem();...}
Comparaison de chaînes de caractères :
if (colorStr.equals("Rouge"))
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
15
Gestion d’une liste à choix (1)
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
16
liste à choix (2), suite...
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
17
TD8 - Gestion de processus légers
Gestion d’un processus par forme dessinée
Il s’agit de gérer un processus quelconque qui a un effet visuel
relatif à chaque forme dessinée à l’écran
Directives d’implémentation :
exemple de traitement pour effet visuel avec temporisation à l’aide due la
fonction sleep().
try {
draw();
Thread.currentThread().sleep(500);
erase();
Thread.currentThread().sleep(500);
} catch(InterruptedException e) {}
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
18
TD8 - Correction
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
19
TD8 - Correction(2)
© Rémy Courdier
1996-2008- Lab Java - Version du cours 2.9
20
Téléchargement