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