Applet et interfaces graphiques avec AWT Badr Benmammar

Applet et interfaces graphiques avec AWT Badr Benmammar bbm@badr-benmammar. com

Plan q Applet Interactive : Écouteurs q Interfaces graphiques avec AWT q Composants simples q Button, Label, Text. Field, Checkbox, List, … q Composants conteneurs q Frame et Panel q Gestion des évènements q Border. Layout q Flow. Layout q Grid. Layout

Applet : dessiner en JAVA import java. awt. Graphics ; import java. applet. Applet; public class Prog 11 extends Applet { public void paint (Graphics g) { g. draw. Line (10, 30, 200, 30); g. draw. Rect (20, 40, 100, 50); g. draw. Oval (140, 50, 50); g. draw. String ("bonjour !", 10, 120); } <html> <head><title>applet Prog 11</title> </head> <body> <applet code="Prog 11. class" width=400 height=300> </applet> </body> </html> } q Les lignes de la classe : q Importer les packages graphique et applet. q Notre depetit la classe Applet : il. Java suffitdestiné de re-définir Une classe applethérite est un programme à êtrela méthode paint en utilisant des méthodes de dessin de la classe Graphics. téléchargé et exécuté par un navigateur internet. q draw. Line = dessiner une ligne du point (10, 30) au point (200, 30).

Applet : dessiner en JAVA q Exécution: appletviewer dessin. html

Applet : dessiner en JAVA import java. awt. Graphics; import java. awt. Color; import java. applet. Applet; public class Prog 12 extends Applet { public void init( ) { set. Size(220, 120); set. Foreground(Color. red); set. Background(Color. white); } public void paint(Graphics g) { g. draw. Line(10, 30, 200, 30); g. fill. Rect(20, 40, 100, 50); g. set. Color(Color. blue); g. draw. Oval(140, 50, 50); g. draw. String("texte dessine", 10, 60); } }

Applet : dessiner en JAVA import java. awt. Graphics; import java. awt. Color; import java. applet. Applet; public class Prog 12 extends Applet { public void init( ) { set. Size(220, 120); set. Foreground(Color. red); set. Background(Color. white); } public void paint(Graphics g) { g. draw. Line(10, 30, 200, 30); g. fill. Rect(20, 40, 100, 50); g. set. Color(Color. blue); g. draw. Oval(140, 50, 50); g. draw. String("texte dessine", 10, 60); } } • La méthode paint reçoit le contexte graphique par défaut. • La méthode init est appelée une seule fois à la création de l'applet. • Initialisation de l'applet : modification de sa taille, et des couleurs de fond et de dessin.

Applet : dessiner en JAVA q Une Applet ne possède pas de méthode main() mais une ou plusieures méthodes parmi les méthodes init(), start(), stop(), destroy() ou paint() héritées de la super-classe Applet : q init() est lancée par le Navigateur dès que le chargement de l'applet est terminé. q start() est lancée après init() et à chaque re-chargement de la page html. q paint() est lancée à chaque fois que l'applet est rendue visible; cette méthode peut récupérer le paramètre Graphics utile pour dessiner. q stop() est lancée quand le navigateur change de page ou quand l'applet se termine ou avant destroy(). q destroy() est lancée à la fermeture du navigateur.

Dessiner des Rectangles import java. awt. Graphics; public class Rectangle 5 { double x, y, largeur, hauteur; Rectangle 5 (double val. X, double val. Y, double val. L, double val. H) { x = val. X; y = val. Y; largeur = val. L; hauteur = val. H; } void dessiner(Graphics g) { g. draw. Rect((int)x, (int)y, (int)largeur, (int)hauteur); } } import java. awt. Graphics; import java. applet. Applet; import java. awt. Color; public class Prog 31 extends Applet { public void init( ) { set. Size(220, 180); set. Foreground(Color. red); set. Background(Color. white); } public void paint (Graphics g) { Rectangle 5 r 1, r 2, r 3; r 1 = new Rectangle 5(60, 45, 45); r 2 = new Rectangle 5(20, 90, 60, 40); r 3 = new Rectangle 5(85, 90, 60, 40); r 1. dessiner(g); r 2. dessiner(g); r 3. dessiner(g); } }

Affichage de treillis: croisement de lignes import java. awt. Graphics; import java. applet. Applet; public class Prog 13 extends Applet { public void paint (Graphics g) { int x, y, t, i; x=30; y=40; t=140; for (i=0; i<=t; i+=5) g. draw. Line (x, y+i, x+i, y+t); } }

Applet Interactive import java. awt. *; public void paint (Graphics g) { public class Rectangle 6 { import java. awt. *; <html> if (affiche) double x, y, largeur, hauteur; import java. awt. event. *; Color couleur; <body> rect. Rouge. dessiner (g); import java. applet. Applet; Rectangle 6 (double val. X, double val. Y, <applet code="Prog 67. class" width=450 height=150> else double val. L, double val. H, public class Prog 67 </applet> rect. Bleu. dessiner (g); Color c) { xextends = val. X; y. Applet = val. Y; </body> } largeur = val. L; Mouse. Listener hauteur = val. H; { implements </html> public void mouse. Clicked (Mouse. Event e) { couleur = c; Rectangle 6 rect. Rouge, rect. Bleu; } affiche = ! affiche; boolean affiche; void set. Position (double val. X, double val. Y){ repaint(); x = val. X; public void init() { } y = val. Y; add. Mouse. Listener (this); } public void mouse. Entered(Mouse. Event e) {} affiche = true; (double val. X, double val. Y){ boolean est. Dans public void mouse. Exited(Mouse. Event e) {} return ((x<=val. X)&&(x+largeur>=val. X) rect. Rouge =new Rectangle 6 &&(y<=val. Y))&&(y+hauteur>=val. Y); } public void mouse. Pressed(Mouse. Event e) {} (30, 50, 80, Color. red); void dessiner(Graphics g) { public void mouse. Released(Mouse. Event e) {} rect. Bleu =new Rectangle 6 g. set. Color (couleur); (30, 50, 80, Color. blue); Un((int)x, clic de(int)y, souris pour faire apparaître}le rectangle rouge, puis un autre pour g. fill. Rect faire apparaître le rectangle bleu. (int)largeur, (int)hauteur); } Le clic (enfoncement puis relâchement) d'un bouton de la souris provoque } } un événement e de type Mouse. Event envoyé comme message à l'applet et provoquant l'exécution de la méthode mouse. Clicked.

Interface Mouse. Listener q Mouse. Listener définit l'écouteur d'événement Souris : press, release, click, enter, exit. q add. Mouse. Listener installe un écouteur Mouse. Listener sur un composant. q Les méthodes à (toutes) définir sont : q public void mouse. Pressed(Mouse. Event e) définit le traitement quand survient q q q l'événement qui indique qu'un bouton de la souris est pressé dans l'aire du composant. public void mouse. Released(Mouse. Event e). . . événement bouton de souris "relaché" dans l'aire du composant. public void mouse. Clicked(Mouse. Event e). . . événement bouton de souris "pressé-relaché" public void mouse. Entered(Mouse. Event e). . . événement souris "entre" dans l'aire du composant. public void mouse. Exited(Mouse. Event e). . . événement souris "sort" de l'aire du composant. mouse. Event. get. X() donne la coordonnée x de la souris au moment de l'événement. mouse. Event. get. Y() donne la coordonnée y.

Lignes de la classe q L'applet (dans sa zone/fenêtre graphique) est le siège d'événement de la souris. q Jusqu'ici, ces événements étaient ignorés. q Maintenant, on ajoute un écouteur (un gestionnaire) de ces événements : this, c'est à dire l'applet elle-même. q Donc, elle traitera elle-même les événements souris dont elle est le siège. q L'applet aura la capacité de traiter les événement de la souris puisqu'elle implémente Mouse. Listener : elle est à l'écoute des événements de la souris. q Définition de la méthode mouse. Clicked qui réagit au clic de la souris. q Pour les autres traitements : mouse. Pressed, mouse. Released, mouse. Entered et mouse. Exited, le traitement est vide. q repaint rafraichie l'applet en appelant paint.

Placer un dessin à l'endroit cliqué import java. awt. *; import java. awt. event. *; import java. applet. Applet; public class Prog 36 extends Applet implements Mouse. Listener { Rectangle 6 rect; public void init() { rect = new Rectangle 6(30, 50, 80, Color. yellow); add. Mouse. Listener(this); } public void paint(Graphics g) { rect. dessiner(g); } public void mouse. Clicked(Mouse. Event e) { int x, y; x = e. get. X(); y = e. get. Y(); rect. set. Position(x, y); repaint(); } public void mouse. Entered(Mouse. Event e) {} public void mouse. Exited(Mouse. Event e) {} public void mouse. Pressed(Mouse. Event e) {} public void mouse. Released(Mouse. Event e) {} }

Evénements et leurs méthodes associées import java. awt. *; import java. awt. event. *; import java. applet. Applet; public class Prog 37 extends Applet implements Mouse. Listener, Key. Listener, Mouse. Motion. Listener { String message = "aucun"; public void init() { add. Mouse. Listener (this); add. Mouse. Motion. Listener (this); add. Key. Listener (this); } public void paint (Graphics g) { g. draw. String(message, 20, 50); } public void mouse. Clicked(Mouse. Event e) { message = "mouse. Clicked"; repaint(); } public void mouse. Entered(Mouse. Event e) { message = "mouse. Entered"; repaint(); } public void mouse. Exited(Mouse. Event e) { message = "mouse. Exited"; repaint(); } public void mouse. Pressed(Mouse. Event e) { message = "mouse. Pressed"; repaint(); } public void mouse. Released(Mouse. Event e) { message = "mouse. Released"; repaint(); } public void mouse. Dragged(Mouse. Event e) { message = "mouse. Dragged"; repaint(); } public void mouse. Moved(Mouse. Event e) { message = "mouse. Moved"; repaint(); } public void key. Typed(Key. Event e) { message = "mouse. Moved"; repaint(); } public void key. Pressed(Key. Event e) { message = "mouse. Moved"; repaint(); } public void key. Released(Key. Event e) { message = "mouse. Moved"; repaint(); } }

Interfaces souris et clavier q Attention ! l'Applet ne reçoit pas les événements provenant du clavier lorsqu'elle est lancée par Appletviewer. q L'interface Mouse. Listener se compose des méthodes mouse. Clicked, mouse. Pressed, mouse. Released, mouse. Entered et mouse. Exited. q Les méthodes mouse. Clicked, mouse. Pressed, mouse. Released sont appelées lorsque respectivement la souris est cliquée, un de ses boutons pressé, relâché. q Les méthodes mouse. Entered et mouse. Exited sont appelées lorsque respectivement la souris entre ou sort de la "fenêtre" de l'applet. q Leur paramètre de type Mouse. Event permet de récupérer les coordonnées int de la souris : e. get. X() e. get. Y().

Interfaces souris et clavier q L'interface Mouse. Motion. Listener se compose des méthodes mouse. Dragged et mouse. Moved. q Les méthodes mouse. Dragged et mouse. Moved sont appelées lorsque la souris est bougé et que respectivement un des boutons de la souris est enfoncé ou non. q Leur paramètre de type Mouse. Event permet de récupérer les coordonnées int de la souris : e. get. X() e. get. Y(). q L'interface Key. Listener se compose des méthodes key. Pressed, key. Released, key. Typed. q Les méthodes key. Pressed, key. Released, key. Typed sont appelées lorsque respectivement une touche au clavier est pressée, relâchée, une touche caractère est tapée.

Plusieurs objets à bouger à la souris import java. awt. *; import java. awt. event. *; import java. applet. Applet; public class Prog 38 extends Applet implements Mouse. Listener, Mouse. Motion. Listener { Rectangle 6 rect 1, rect 2; boolean clic. Rect 1, clic. Rect 2; public void init() { rect 1 = new Rectangle 6(30, 50, 80, Color. gray); rect 2 = new Rectangle 6(100, 60, 70, 30, Color. green); clic. Rect 1 = false; clic. Rect 2 = false; add. Mouse. Listener (this); add. Mouse. Motion. Listener (this); } public void paint (Graphics g) { rect 1. dessiner(g); rect 2. dessiner(g); } public void mouse. Pressed (Mouse. Event e){ if (rect 1. est. Dans(e. get. X(), e. get. Y())) clic. Rect 1=true; if (rect 2. est. Dans(e. get. X(), e. get. Y())) clic. Rect 2=true; } public void mouse. Dragged (Mouse. Event e){ if (clic. Rect 1) { rect 1. set. Position (e. get. X(), e. get. Y()); repaint(); } if (clic. Rect 2) { rect 2. set. Position(e. get. X(), e. get. Y()); repaint(); } } public void mouse. Released (Mouse. Event e){ if (clic. Rect 1) clic. Rect 1=false; if (clic. Rect 2) clic. Rect 2=false; } public void mouse. Entered(Mouse. Event e) {} public void mouse. Exited(Mouse. Event e) {} public void mouse. Clicked(Mouse. Event e) {} public void mouse. Moved(Mouse. Event e) {} }

Dessin à la souris import java. awt. *; import java. awt. event. *; import java. applet. Applet; public class Prog 39 extends Applet implements Mouse. Listener, Mouse. Motion. Listener { int x 0, y 0; Graphics g; public void init() { x 0=0; y 0=0; g = get. Graphics(); add. Mouse. Listener(this); add. Mouse. Motion. Listener(this); } public void mouse. Pressed (Mouse. Event e){ int x, y; x = e. get. X(); y = e. get. Y(); x 0=x; y 0=y; } public void mouse. Dragged (Mouse. Event e){ int x, y; x = e. get. X(); y = e. get. Y(); g. draw. Line (x 0, y 0, x, y); x 0=x; y 0=y; } public void mouse. Entered(Mouse. Event e) {} public void mouse. Exited(Mouse. Event e) {} public void mouse. Clicked(Mouse. Event e) {} public void mouse. Released(Mouse. Event e) {} public void mouse. Moved(Mouse. Event e) {} }

Interfaces graphiques avec AWT q Abstract Window Toolkit (AWT) est une bibliothèque graphique pour Java, faisant partie de JFC (Java Foundation Classes). q Cette bibliothèque a été introduite dès les premières versions de Java mais depuis Java 2, la bibliothèque de gestion de fenêtre officielle est Swing. q Toutefois, AWT sert encore de fondement à Swing, dans la mesure où de nombreuses classes Swing héritent de classes AWT. q AWT emploie les composants natifs de la plateforme, alors que Swing utilise des composants en pur Java. q AWT n'est pas compatible avec Swing.

Composants simples import java. awt. List; Un bouton Button est un composant graphique. import java. awt. Button; La méthode add() de Applet ajoute un composant import java. awt. Label; graphique dans l'espace de l'applet. import java. awt. Text. Field; import java. awt. Checkbox; Un "label" Label est un texte constant affiché dans import java. applet. Applet; notre applet. public class Prog 44 extends Applet { public void init ( ) { Button mon. Bouton = new Button ("bouton"); Une liste à choisir List permet de choisir une valeur parmi plusieurs, ici, seuls 2 sont visibles à la fois mais add (mon. Bouton); un curseur permet de faire défiler toute la liste. Label mon. Label = new Label("label"); add(mon. Label); Un champ texte Text. Field est une zone éditable simple List ma. Liste = new List(2); d'une ligne. ma. Liste. add("bleu"); ma. Liste. add("rouge"); Une case à cocher Checkbox prend une valeur binaire ma. Liste. add("vert"); selon qu'il est coché (true) ou non (false). add(ma. Liste); Text. Field champ. Texte = new Text. Field("du texte", 15); add(champ. Texte); Checkbox case. ACocher = new Checkbox ("ok ? ", true); add(case. ACocher); } }

Composants simples Text. Area zone. Texte = new Text. Area(10, 20); add(zone. Texte); zone. Texte. set. Text("une premiere ligne n"); zone. Texte. append("une seconde ligne"); Checkbox. Group choix. Couleur = new Checkbox. Group(); public class Prog 45 Checkbox case. Rouge = new extends Applet { Checkbox("rouge", false, choix. Couleur); public void init() { List ma. Liste = new List (3, true); add(case. Rouge); ma. Liste. add("bleu"); Checkbox case. Bleu = new ma. Liste. add("rouge"); Checkbox("bleu", false, choix. Couleur); ma. Liste. add("vert"); add(case. Bleu); ma. Liste. add("noir"); Checkbox case. Vert = new add(ma. Liste); Checkbox("vert", false, choix. Couleur); ma. Liste. select(0); ma. Liste. select(2); add(case. Vert); choix. Couleur. set. Selected. Checkbox(case. Bleu); } } import java. awt. List; import java. awt. Text. Area; import java. awt. Checkbox. Group; import java. applet. Applet;

Composants simples q Une liste à choisir peut être à sélection unique ou multiple : q Unique : au plus un élément de la liste peut être sélectionné. q Ici, elle est multiple (true). q La méthode select() permet de faire une sélection, les choix sont indicés à partir de 0. q Un "éditeur" Text. Area est une zone de texte éditable sur plusieurs lignes, avec souvent des barres de défilement : q Ici, il fait 10 lignes et 20 colonnes. q La méthode set. Text modifie son contenu texte intégralement. q La méthode append ajoute du texte. q Les cases à cocher Checkbox sont, sans indication, indépendantes. q Un Checkbox. Group permet d'en regrouper pour que leur sélection soit mutuellement exclusive : une, au plus, est cochée ! q La méthode setselected. Checkbox permet d'en cocher une dans le groupe.

Composants simples q Button : un bouton à cliquer. q Constructeurs : q Button() crée un bouton sans texte. q Button(String texte) crée un bouton avec texte centré. q Quelques méthodes : q set. Label(String texte) spécifie le texte du bouton. q get. Label() retourne le texte du bouton. q Label : étiquette : affiche un petit texte/message. q Constructeurs : q Label() crée une étiquette sans texte. q Label(String texte) crée une étiquette avec texte aligné à gauche. q Label(String texte, int aligne) crée une étiquette avec texte aligné selon aligne : Label. LEFT, Label. CENTER, Label. RIGHT. q Quelques méthodes : q set. Text(String texte) spécifie le texte. q get. Text() retourne le texte de l'étiquette. q set. Alignment(int aligne) spécifie l'alignement. q get. Alignment().

Composants simples q Text. Field : champ texte d'une ligne pour saisir et/ou afficher du texte modifiable q Constructeurs : q Text. Field() crée un champ sans texte. q Text. Field(int nombre) crée un champ sans texte d'une largeur de nombre caractères. q Text. Field(String texte) crée un champ avec texte. q Text. Field(String texte, int nombre) crée un champ avec texte et d'une largeur de nombre caractères. q Quelques méthodes : q set. Text(String texte) spécifie le texte du champ. q get. Text() retourne le texte contenu dans le champ. q get. Columns() retourne la largeur du champ en nombre caractères. q set. Columns() définit la largeur du champ en nombre caractères. q set. Editable(boolean modifiable) spécifie si le texte du champ est modifiable. q is. Editable() retourne un boolean qui indique si le texte du champ est modifiable. q set. Echo. Char(char masque) spécifie le caractère de masquage de la saisie (pour les passwords). q echo. Char. Set() retourne un boolean qui indique si le masquage est en vigueur. q get. Echo. Char() retourne le caractère de masquage.

Composants simples q Text. Aera : éditeur de texte pour saisir et/ou afficher du texte modifiable sur plusieures lignes, muni de barres de défilement de comportements prédéfinies : sélection de texte à la souris, raccourci clavier copier/coller, . . . , q Constructeurs : q Text. Aera() crée un éditeur sans texte. q Text. Aera(int ligne, int largeur) crée un éditeur sans texte d'une largeur en nombre de caractères et d'un nombre de lignes spécifiés. q Text. Aera(String texte) crée un éditeur avec texte. q Text. Aera(String texte, int ligne, int largeur) crée un éditeur avec texte et d'une largeur et d'un nombre de lignes spécifiés. q Quelques méthodes : q insert. Text(String texte, int position) insère le texte à la position indiquée. q replace. Text(String texte, int départ, int fin) remplace les caractères entre les positions indiquées par le texte spécifié. q get. Text(). . . q set. Text() q is. Editable() q set. Editable()

Composants simples q Checkbox et Checkbox. Group : cases à cocher et boutons radios, peuvent être plusieurs (indépendantes ou exclusives ) et permettent le déclanchement d'action. Les cases à cocher sont indépendantes, les boutons radios sont en exclusion mutuelle, c'est à dire qu'un seul au plus peut être coché. q Constructeurs : q Checkbox(String texte) crée une case à cocher (initialisée à non cochée) avec texte associé. q Checkbox(String texte, boolean cochée) crée une case à cocher avec texte associé, cochée ou non selon la valeur booléenne. q Checkbox. Group() crée un groupe de boutons radios. q Checkbox(String texte, boolean cochée, Checkbox. Group groupe) crée une bouton radio avec texte associé, cochée ou non selon la valeur booléenne, faisant partie du groupe indiqué. q Quelques méthodes de Checkbox : q set. Label(String texte) spécifie le texte de la case à cocher (ou bouton radio). q get. Label() retourne le texte de la case à cocher. q get. State() retourne true si la case est cochée. q set. State(boolean cochée) coche ou non la case selon la valeur booléenne. q Quelques méthodes de Checkbox. Group : q set. Selected. Checkbox(Checkbox un. Bouton. Radio) permet d'en cocher un dans le groupe.

Composants simples q List : une liste à choisir peut être à sélection unique ou multiple : q Constructeurs : q List() crée une liste de choix. q List(int nombre) crée une liste de choix avec nombre lignes visible. q List(int nombre, boolean choix. Multiple) crée une liste de choix avec nombre lignes visible et à sélection unique si choix. Multiple est false sinon à choix multiple. q Quelques méthodes : q add(String choix) ajoute un choix en fin de liste. q is. Multiple. Mode() true si la liste est en choix multiple. q get. Selected. Index() renvoie l'index de la sélection dans la liste (numérotée à partir de 0), ou -1 s'il n'y en a pas ou s'il y en a plus d'une. q get. Selected. Indexes() renvoie un tableau d'entiers : les index des sélections dans la liste. q select(int indice) sélectionne un choix dans la liste à l'indice indiqué.

Composants conteneurs import java. awt. Label; import java. awt. Frame; import java. awt. Button; import java. awt. Checkbox; public class Prog 58 extends Frame { public Prog 58 ( ) { add ("South", new Button ("bouton 1")); add ("East", new Label ("label 1")); add ("Center", new Button ("bouton 2")); add ("West", new Checkbox ("case à cocher", false)); set. Visible (true); pack (); } public static void main (String args[]) { new Prog 58 ( ); } }

Frame q Frame est une fenêtre de haut niveau (top level): une fenêtre d'application, elle peut contenir des composants graphique : la méthode add permet de les ajouter, elle est donc aussi un container. q Les Applets que nous avons souvent utilisés sont des containers mais ne sont pas des fenêtres top level, la fenêtre top level d'une applet est celle du navigateur qui la visualise ou celle de Appletviewer. q L'application crée dans sa méthode main une instance objet graphique "de type Frame". q Les frames sont gérées par défaut par le gestionnaire Border. Layout : qui divise un composant container en 5 zones: North, East, South, West, Center. q La méthode add doit être utilisé ainsi : add ("zone", composant). q pack() re-dimensionne la frame et ses composants à la taille "idéale". q Pour terminer l'application, la "croix " ou bouton de fermeture ne marche pas car nous n'avons pas mis en place le code nécessaire. q Pour l'instant, CTRL-C dans la console permet de terminer l’application.

Frame : gestionnaire Flow. Layout import java. awt. Label; import java. awt. Frame; import java. awt. Button; import java. awt. Checkbox; import java. awt. Flow. Layout; public class Prog 59 extends Frame { public Prog 59() { set. Layout (new Flow. Layout (Flow. Layout. LEFT, 5, 15)); add (new Button ("bouton 1")); add (new Label ("label 1")); Frame est le container ici et les boutons, label, add (new Button ("bouton 2")); case à cocher sont les composants contenus dedans. add (new Checkbox ("case à cocher", false)); Flow. Layout est un des gestionnaires de placement set. Visible (true); ou encore un geometry manager : ici il organisera pack(); les composants contenus dans la frame selon une } "politique" à gauche d'abord et avec un espace public static void main(String args[]) horizontale de 5 pixels entre les composants { contenus et verticalement de 15 pixels. new Prog 59(); set. Layout détermine le nouveau geometry manager } du composant container Frame. }

Frame : gestionnaire Grid. Layout import java. awt. Label; import java. awt. Frame; import java. awt. Button; import java. awt. Checkbox; import java. awt. Grid. Layout; Le geometry manager Grid. Layout a une organisation en grille : ici, 2 lignes et 2 colonnes. Les composants contenus sont introduits au fer et à mesure par add en (1, 1) puis en (1, 2) puis en (2, 1) puis en (2, 2). set. Size() redimensionne la Frame à la dimension indiquée. public class Prog 69 extends Frame { public Prog 69() { set. Layout (new Grid. Layout (2, 2)); add (new Button ("bouton 1")); add (new Label ("label 1")); add (new Button ("bouton 2")); add (new Checkbox ("case à cocher", false)); set. Size(200, 40); set. Visible(true); } public static void main(String args[]) { new Prog 69(); } }

Panel import java. awt. Label; import java. awt. Frame; import java. awt. Button; import java. awt. Checkbox; import java. awt. Grid. Layout; import java. awt. Panel; public class Prog 70 extends Frame { public Prog 70() { set. Layout (new Grid. Layout (3, 1)); add (new Button("bouton 1")); Panel boite=new Panel (); boite. add (new Label ("label 2")); boite. add (new Button ("bouton 2")); add (boite); add(new Checkbox("case à cocher", true)); set. Visible(true); pack(); } public static void main(String args[]) { new Prog 70(); } } Panel est juste un container : dans ce container, nous plaçons le label 2 et le bouton 2. Le geometry manager de Panel est par défaut le Flow. Layout manager. Ce panel est ajouté dans la Frame. Pour la frame, notre Panel est un composant contenu.

Création de nouveaux composants à partir de Panel import java. awt. Button; import java. awt. Grid. Layout; import java. awt. Panel; import java. applet. Applet; class Panneau. Clavier extends Panel { Panneau. Clavier ( ) { set. Layout (new Grid. Layout (4, 3)); for (int num=1; num <= 9 ; num++) add (new Button(Integer. to. String(num))); add(new Button("*")); add(new Button("0")); add(new Button("# ")); } } public class demo extends Applet { public void init() { add (new Panneau. Clavier ( )); } }

Même chose avec Frame import java. awt. Button; import java. awt. Grid. Layout; import java. awt. Frame; public class Maframe extends Frame { public Maframe() { set. Layout (new Grid. Layout (4, 3)); for (int num=1; num <= 9 ; num++) add(new Button(Integer. to. String(num))); add(new Button("*")); add(new Button("0")); add(new Button("# ")); set. Visible(true); pack(); } public static void main(String args[]) { new Maframe(); } }

Charger une image dans une applet import java. awt. Dimension; import java. awt. Graphics; import java. awt. Image; import java. awt. Media. Tracker; import java. awt. Panel; import java. awt. Toolkit; import java. applet. Applet; class LIVRE extends Panel { private Image image; public LIVRE(String filename) { image = Toolkit. get. Default. Toolkit(). get. Image("livre. gif"); try { Media. Tracker mt = new Media. Tracker(this); mt. add. Image(image, 0); mt. wait. For. All(); } catch (Exception e) { e. print. Stack. Trace(); } this. set. Preferred. Size(new Dimension (image. get. Width(this), image. get. Height(this))); } public void paint(Graphics g) { g. draw. Image(image, 0, 0, null); } } public class Affiche. Image extends Applet { public void init() { add (new LIVRE ("LIVRE")); } } Remarque : Le chargement avec Toolkit se fait de façon asynchrone. Il faut alors utiliser une instance de la classe Media. Tracker pour patienter le temps de chargement de l'image et ainsi pouvoir déterminer sa taille pour la reporter sur la taille du composant.

Charger une image dans une applet

Ajouter une applet dans une frame import java. awt. Graphics; import java. applet. Applet; public class dessin extends Applet { public void paint (Graphics g) { g. draw. Line (10, 30, 200, 30); g. draw. Rect (20, 40, 100, 50); g. draw. Oval (140, 50, 50); g. draw. String ("bonjour !", 10, 120); } } import java. awt. Frame; public class Maframe 2 extends Frame { public Maframe 2() { add ("Center", new dessin()); set. Visible(true); set. Size(300, 200) ; } public static void main(String args[]) { new Maframe 2(); } }

Classe Component q La plupart des Classes de l'AWT hérite de la classe abstraite Component (composant en français). q Quelques méthodes : q paint(Graphics g) est la méthode appelée à chaque fois que le contenu du composant doit être redessiné (la 1ére fois, quand il fut masqué puis démasqué, . . . ); elle est à redéfinir en spécifiant tout ce qui doit être dessiné. q repaint() provoque un appel à paint(), donc redessine le contenu du composant. q get. Graphics() renvoie le contexte graphique de type Graphics du composant : c'est à dire la trousse à dessiner actuelle. q set. Visible(boolean visible) affiche ou masque le composant. q set. Enabled(boolean actif) active ou non le composant, c'est à dire le rend sensible aux événements.

Classe Component q get. Size() donne la dimension actuelle du composant, retourne le type Dimension qui est utilisable ainsi : get. Size(). height et get. Size(). width. q get. Prefered. Size() donne la taille "idéale" du composant, retourne le type Dimension. q set. Size(Dimension d) redimensionne le composant à la dimension indiquée. q set. Size(int largeur, int hauteur) redimensionne le composant. q move(int coord. X, int coord. Y) déplace le composant au point indiqué (coin haut et gauche). q set. Foreground(Color couleur) définit la couleur d'avant-plan (de dessin) du composant. q set. Background(Color couleur) définit la couleur de fond. q set. Cursor(Cursor curseur) définit la couleur du curseur.

Classe Container q Classe abstraite pour les composants qui contiennent et gèrent d'autres composants (conteneur en français). q Chaque container possède un gestionnaire de placement par défaut, layout ou "geometry manager", qui range les composants graphiques fils dans le container. q Il est possible de ne pas les utiliser en plaçant chaque composant à l'aide de la méthode set. Location(int coord. X, coord. Y). q Quelques méthodes : q set. Layout (Layout. Manager manager) spécifie le geometry manager qui rangera (arrangera) les composants contenus. q add (composant) ajoute un composant dans le container.

Héritage entre composants Object Graphics Label Button Classes abstraites Component Canvas Checkbox Window Container List Panal Fenêtre ordinaire Fenêtre top-level Frame Applet

Frame q Frame : fenêtre top-level conteneur d'une application avec barre de titre et des boutons de fermeture. q Le layout par défaut est Border. Layout q Constructeurs : q Frame() crée une fenêtre sans titre. q Frame(String titre) crée une fenêtre avec titre. q Quelques méthodes : q pack() redimensionne la frame et ses composants à leur preferred. Size (la taille juste nécessaire). q set. Title(String titre) spécifie le titre. q set. Menu. Bar(Menu. Bar) applique une barre de menu en haut du cadre. q set. Resizable(boolean) détermine si le cadre peut être redimensionné par l'utilisateur.

Panel q Panel : composant conteneur d'autres composants. q La classe Applet hérite de Panel. q Le layout par défaut est Flow. Layout. q Constructeurs : q Panel() crée un Panel. q Panel(Layout. Manager manager) crée un Panel avec le geometry manager spécifié.

Geometry manager q Plusieurs gestionnaires de placement, geometry manager, qui rangent des composants graphiques dans un container. Il est possible de ne pas les utiliser en placant chaque composant dans un Panel à l'aide de la méthode set. Location (int coord. X, coord. Y) q Flow. Layout : range de gauche à droite et de haut en bas. q Constructeurs : q Flow. Layout() range les composants en les centrant avec un "vspacing et hspacing" (espace vertival, respectivement horizontal) de 5 pixels. q Flow. Layout(int aligne) range les composants en les alignant selon aligne : Flow. Layout. LEFT, Flow. Layout. CENTER, Flow. Layout. RIGHT avec un vspacing et hspacing de 5 pixels. q Flow. Layout(int aligne, int hspacing, int vspacing) range selon l'alignement et le vspacing et le hspacing spécifiés.

Geometry manager q Grid. Layout : range dans une grille/matrice de gauche à droite et de haut en bas. q Constructeurs : q Grid. Layout(int ligne, int colonne) range les composants dans la grille de rangement. q Grid. Layout(int ligne, int colonne, int hspacing, int vspacing) idem avec le vspacing et le hspacing spécifiés. q Border. Layout : divise un composant container en 5 zones: North, East, South, West, Center q Constructeurs : q Border. Layout() crée 5 zones. q Border. Layout(int hspacing, int vspacing) idem avec un espacement spécifié. q La méthode add doit être utilisé ainsi : add("North", composant).

Exemple : Frame import java. awt. Button; import java. awt. Grid. Layout; import java. awt. Frame; public class Maframe extends Frame { java. awt Class Frame java. lang. Object java. awt. Component java. awt. Container java. awt. Window java. awt. Frame public Maframe() { set. Layout (new Grid. Layout (4, 3)); for (int num=1; num <= 9 ; num++) add(new Button(Integer. to. String(num))); add(new Button("*")); Classe Container add(new Button("0")); add(new Button("# ")); set. Visible(true); Classe Component pack(); Classe Frame } public static void main(String args[]) { new Maframe(); }}

Evénements q Mettre en place un "écouteur" (listener). import java. awt. Button; import java. awt. Label; import java. applet. Applet; import java. awt. Color; Un Button émet un événement Action. Event lorsqu'il est pressé/cliqué. Par défaut, personne n'écoute/ne reçoit cet événement, qui est perdu. La méthode add. Action. Listener() spécifie que désormais un objet Delegue 1 écoutera/sera récepteur d'un tel événement, l'objet Delegue 1 reçoit le Label en paramètre. public class Prog 46 extends Applet { public void init() { Button mon. Bouton = new Button ("Changer"); add(mon. Bouton); Label mon. Label = new Label ("Changer"); add(mon. Label); mon. Label. set. Foreground(Color. red); mon. Bouton. add. Action. Listener(new Delegue 1(mon. Label)); } }

Evénements import java. awt. event. Action. Listener; Delegue 1 implémente l'interface Action. Listener import java. awt. event. Action. Event; puisqu'il est susceptible de recevoir de tel import java. awt. Label; événement. La réception d'un tel événement import java. awt. Color; provoque l'exécution de la méthode public class Delegue 1 action. Performed. implements Action. Listener { Ici, la méthode action. Performed change la private Label le. Label; couleur du label de notre Applet puisque l'objet private boolean etat. Label; Delegue 1 à une référence sur le label. public Delegue 1(Label lab) { le. Label = lab; Label est un Component dont la méthode etat. Label=true; set. Foreground est héritée. } public void action. Performed (Action. Event event) { etat. Label = ! etat. Label; if (etat. Label) le. Label. set. Foreground (Color. red); else le. Label. set. Foreground (Color. blue); } }

Evénements Button q Button : permet le déclanchement d'action. q Par défaut le nom de l'action d'un bouton est son texte. q Méthodes : q set. Action. Command (String texte) spécifie le nom de l'action du bouton. q get. Action. Command() retourne le nom de l'action du bouton. q add. Action. Listener(Action. Listener écouteur) met un "écouteur" d'événement sur le bouton. q remove. Action. Listener(Action. Listener écouteur) supprime un "écouteur" d'événement sur le bouton.

Délégué qui peut agir sur l'objet où s'est produit l'événement import java. awt. List; import java. awt. Label; import java. applet. Applet; public class Prog 47 extends Applet { private List ma. Liste; private Label mon. Label; private final Color tab. Couleur[]= {Color. red, Color. blue, Color. green, Color. yellow, Color. orange }; public void init() { ma. Liste = new List(3); ma. Liste. add("bleu"); ma. Liste. add("rouge"); ma. Liste. add("vert"); ma. Liste. add("jaune"); ma. Liste. add("orange"); add(ma. Liste); mon. Label = new Label ("Choisir"); add(mon. Label); ma. Liste. add. Action. Listener(new Delegue 2(this)); } public void change. Label () { int index = ma. Liste. get. Selected. Index(); mon. Label. set. Foreground(tab. Couleur[index]); } } Delegue 2 reçoit l'objet Applet en paramètre : donc le Delegue 2 aura une référence sur l'Applet. La méthode change. Label de changement de couleur du label est prévue. Lors d'une sélection de choix d'une List (double-cliquez !), l'événement Action. Listener est envoyé.

Délégué qui peut agir sur l'objet où s'est produit l'événement import java. awt. event. Action. Listener; import java. awt. event. Action. Event; import java. awt. Label; import java. awt. List; import java. awt. Color; public class Delegue 2 implements Action. Listener { private Prog 47 mon. Applet; public Delegue 2 (Prog 47 mon. App) { mon. Applet = mon. App; } public void action. Performed (Action. Event event) { mon. Applet. change. Label(); } }

import java. awt. Menu. Bar; import java. awt. Menu. Item; import java. awt. Label; import java. applet. Applet; import java. awt. Color; public class Prog 48 extends Applet { private Label mon. Label; public void init ( ) { Delegue 3 mon. Delegue= new Delegue 3 (this); Menu. Bar ma. Barre. De. Menu = new Menu. Bar(); add (ma. Barre. De. Menu); Menu menu 1 = new Menu("fond"); ma. Barre. De. Menu. add(menu 1); Menu. Item m 1 rouge = new Menu. Item("fond rouge"); m 1 rouge. add. Action. Listener (mon. Delegue); menu 1. add (m 1 rouge); Menu. Item m 1 bleu = new Menu. Item ("fond bleu"); m 1 bleu. add. Action. Listener (mon. Delegue); menu 1. add (m 1 bleu); Menu. Item m 1 vert = new Menu. Item ("fond vert"); m 1 vert. add. Action. Listener (mon. Delegue); menu 1. add (m 1 vert); menu 1. add. Separator ( ); Menus Menu. Item m 1 noir = new Menu. Item ("fond noir"); m 1 noir. add. Action. Listener (mon. Delegue); menu 1. add (m 1 noir); Menu menu 2 = new Menu ("texte"); ma. Barre. De. Menu. add (menu 2); Menu. Item m 2 rouge = new Menu. Item ("texte rouge"); m 2 rouge. add. Action. Listener(mon. Delegue); menu 2. add (m 2 rouge); Menu. Item m 2 bleu = new Menu. Item ("texte bleu"); m 2 bleu. add. Action. Listener (mon. Delegue); menu 2. add (m 2 bleu); Menu. Item m 2 vert = new Menu. Item ("texte vert"); m 2 vert. add. Action. Listener (mon. Delegue); menu 2. add (m 2 vert); Menu. Item m 2 noir = new Menu. Item ("texte noir"); m 2 noir. add. Action. Listener (mon. Delegue); menu 2. add (m 2 noir); mon. Label = new Label ("Changer"); add (mon. Label); set. Visible (true); pack(); } public void change. Label. Fond (Color couleur) { mon. Label. set. Background (couleur); } public void change. Label. Texte (Color couleur) { mon. Label. set. Foreground (couleur); }}

Menus import java. awt. event. Action. Listener; import java. awt. event. Action. Event; import java. awt. Color; public class Delegue 3 implements Action. Listener { private Prog 48 mon. Applet; public Delegue 3 (Prog 48 app) { mon. Applet = app; } public void action. Performed (Action. Event event) { Color couleur= Color. white; String nom. De. Menu. Choisi = event. get. Action. Command(); if (nom. De. Menu. Choisi. index. Of ("rouge")>=0) L'objet délégué ou listener doit distinguer couleur = Color. red; d'ou vient l'événement pour pouvoir agir, else if (nom. De. Menu. Choisi. index. Of ("bleu")>=0) dans l'événement passée en paramètre de la couleur = Color. blue; méthode action. Performed, se trouve les else if (nom. De. Menu. Choisi. index. Of ("vert")>=0) informations relatives à l'événement qui s'est couleur = Color. green; produit en particulier, par la méthode else if (nom. De. Menu. Choisi. index. Of ("noir")>=0) get. Action. Command, on récupère le nom couleur = Color. black; d'action. if (nom. De. Menu. Choisi. index. Of ("fond")>=0) Comme les noms d'actions étaient les mon. Applet. change. Label. Fond (couleur); mêmes que les noms d'items de menus, il est if (nom. De. Menu. Choisi. index. Of ("texte")>=0) possible de savoir quel item a été sélectionné. mon. Applet. change. Label. Texte (couleur); } }

Utiliser les valeurs modifiées de Text. Field import java. awt. Text. Field; private int convertir (String intensite) { import java. awt. Label; int val= (new Integer(intensite)). int. Value(); import java. applet. Applet; if (val <0) import java. awt. Color; return 0; public class Prog 49 extends Applet { private Text. Field valeur. R, valeur. V, valeur. B; else if (val >255) private Label mon. Label; return 255; public void init ( ) { else mon. Label = new Label ("intensité couleur [0 -255]"); return val; } add (mon. Label); public void change. Label ( ) { Delegue 4 mon. Delegue= new Delegue 4 (this); add (new Label ("R: ")); int r = convertir (valeur. R. get. Text()); valeur. R = new Text. Field ("255", 3); int v = convertir (valeur. V. get. Text()); add (valeur. R); int b = convertir (valeur. B. get. Text()); valeur. R. add. Action. Listener (mon. Delegue); mon. Label. set. Background (new Color(r, v, b)); add (new Label ("V: ")); }} valeur. V = new Text. Field ("255", 3); add (valeur. V); Un Text. Field envoie aussi un événement Action. Event valeur. V. add. Action. Listener (mon. Delegue); lorsque la modification du texte est confirmée par la add (new Label ("B: ")); frappe de la touche "entrée" le texte d'un Text. Field est valeur. B = new Text. Field ("255", 3); récupérée par la méthode get. Text(). Les couleurs peuvent add (valeur. B); être crées en précisant les intensités RVB (rouge, vert, valeur. B. add. Action. Listener (mon. Delegue); bleu) sur 8 bits chacune donc un entier entre 0 et 255. }

Utiliser les valeurs modifiées de Text. Field import java. awt. event. Action. Listener; import java. awt. event. Action. Event; public class Delegue 4 implements Action. Listener { private Prog 49 mon. Applet; public Delegue 4 (Prog 49 mon. App) { mon. Applet = mon. App; } public void action. Performed (Action. Event event) { mon. Applet. change. Label ( ); } }

Action. Listener q Les événements sont des actions ou des effets indirects d'action de l'utilisateur du GUI (Interface Graphique Utilisateur) : clic de souris, frappe de touche, fenêtre masquée par une autre, . . . qu'il faut gérer en mettant en place un "écouteur" de l'événement souhaité sur le composant graphique considéré, puis définir le comportement (les instructions à exécuter, le Handler d'événement) lorsque l'événement surviendra. q Action. Listener est une interface pour écouter et traiter les Action. Events. q Par exemple, bouton. add. Action. Listener (composant) met un écouteur (d'Action. Event) sur le bouton, le "Handler" sera assurée au niveau du composant désigné qui implémente l'Action. Listener; pour un bouton, l'Action. Event est provoquée par un clic de souris (bouton enfoncé puis relâché). q remove. Action. Listener(Action. Listener écouteur) supprime un "écouteur" d'événement. q La classe qui implémente l'interface Action. Listener doit définir la méthode : q public void action. Performed(Action. Event e) {. . . qui est le "Handler" q get. Action. Command() est une méthode de Action. Event récupère le nom de la commande d'action associé au composant par exemple un bouton (par défaut son label).

Evénements des Frames et la classe siège de l'événement qui est son propre délégué try { import java. awt. Label; import java. awt. Frame; Thread. sleep (5000); import java. awt. event. Window. Listener; } catch (Interrupted. Exception ie) { import java. awt. event. Window. Event; System. exit (1); import java. awt. Flow. Layout; } public class Prog 71 extends Frame set. Visible (false); implements Window. Listener { public static void main(String args[]) dispose (); { System. exit (0); new Prog 71(); } } public void window. Opened(Window. Event e) {} public Prog 71() { public void window. Activated(Window. Event e) {} set. Title("Prog 71"); set. Size(200, 100); public void window. Deactivated(Window. Event e) {} set. Layout(new Flow. Layout(Flow. Layout. CENTER)); public void window. Closed(Window. Event e) {} set. Visible(true); public void window. Iconified(Window. Event e) {} add. Window. Listener (this); public void window. Deiconified(Window. Event e) {} } } public void window. Closing (Window. Event e) { add (new Label("fini dans 5 secondes !")); pack();

Lignes de la classe q La Frame peut être le siège de plusieurs événements Window. Event : q Ouvrir la Frame. q La rendre active ou passive. q La mettre en icone ou l'inverse. q La fermer par le window manager (ou bureau) : window. Closing. q La fermer par la méthode dispose() : window. Closed. q L'objet Prog 71 est le siège d'événements Window. Event et est aussi le délégué (le listener) de cet événement par l'instruction : add. Window. Listener(this); q La méthode static sleep de la classe Thread attend le nombre de millisecondes indiquées q dispose est la méthode qui ferme la Frame et toutes sous-fenêtres s'il y a.

Evénements en résumé Composant Action Button, List, Sélectionner, valider Menu. Item, Text. Field, Checkbox, Canvas Text. Area, Text. Field Changer le texte Frame Container Ouvrir, fermer Evénement Interface d'écoute Action. Event Action. Listener Text. Event Text. Listener Window. Event Window. Listener Mouvement et clic de Mouse. Event, Mouse. Listener, souris, frappe au Mouse. Motion. Event, Mouse. Motion. Listener, clavier Key. Event Key. Listener

Technique des Adapters import java. awt. Frame; import java. awt. Dimension; import java. awt. Label; import java. awt. event. Window. Adapter; import java. awt. event. Window. Event; import java. awt. Flow. Layout; public class Prog 72 extends Frame { public static void main(String args[]) { new Prog 72(); } public Prog 72() { set. Title("Prog 72"); set. Size(200, 100); set. Layout(new Flow. Layout(Flow. Layout. CENTER)); add. Window. Listener (new Window. Adapter() { public void window. Closing(Window. Event e) { add(new Label("fini dans 5 secondes !")); pack(); try { Thread. sleep(5000); } catch (Interrupted. Exception ie) { System. exit(1); } set. Visible(false); dispose(); System. exit(0); } public void window. Deiconified(Window. Event e) { Dimension dim=get. Size(); set. Size(dim. width, dim. height); } }); set. Visible(true); }}

Window. Adapter q La classe Window. Adapter est un écouteur prédéfinie (un délégué) qui implémente l'interface Window. Listener (c’est une classe abstraite qui contient 10 méthodes), c’est une classe "écouteur" pour les fenêtres Frame, Dialog, . . . q Dans Prog 72, nous redéfinissons uniquement les méthodes dont nous avons besoin : window. Closing et window. Deiconified. Cela se fait en mettant l'instanciation d'une classe sans nom qui est sous classe de window. Adapter suivies des redéfinitions de méthodes (cette classe est une inner-classe). q Les Classes Adapters évite l'implémentation de toutes les méthodes abstraites d'une interface Listener. q L'interface Window. Listener déclare 7 méthodes abstraites qui sont, dans la classe Window. Adapter définies avec le corps {}; q En Pratique, il faut : q Créer une sous-classe Ecouteur de Window. Adapter et redéfinir les méthodes souhaitées : par exemple, public void window. Closing(Window. Event e) {. . . }; et dans le composant à l'"écoute" d'un évènement "fermeture de fenêtre", mettre en place l'écoute : add. Window. Listener(objet. Ecouteur); q Ou utiliser la technique d'inner classe décrite ci-dessus.

Application graphique : Editer un fichier import java. awt. *; import java. io. *; import java. awt. event. *; public class Editer. Fichier extends Frame implements Action. Listener { Text. Area texte; String message. Fichier="Donnez ici un nom de fichier"; String message. Texte="Saisir le texte ici"; Text. Field champ. Fichier; public static void main(String[] args) { new Editer. Fichier(); } public Editer. Fichier() { this. set. Title("Editer un Fichier"); texte= new Text. Area(message. Texte, 20, 50); texte. set. Editable(true); this. add("Center", texte); champ. Fichier= new Text. Field(message. Fichier, 20); this. add("South", champ. Fichier); Menu. Bar barre. Menu= new Menu. Bar(); this. set. Menu. Bar(barre. Menu); Menu menu. Fichier= new Menu("Fichier"); barre. Menu. add(menu. Fichier); Menu. Item menu. Ouvrir= new Menu. Item("Ouvrir"); menu. Ouvrir. add. Action. Listener(this); menu. Fichier. add(menu. Ouvrir); Menu. Item menu. Enregistrer= new Menu. Item("Enregistrer"); menu. Enregistrer. add. Action. Listener(this); menu. Fichier. add(menu. Enregistrer); Menu. Item menu. Quitter= new Menu. Item("Quitter"); menu. Quitter. add. Action. Listener(this); menu. Fichier. add(menu. Quitter); this. pack(); this. set. Visible(true); }

Application graphique : Editer un fichier public void action. Performed (Action. Event e) { String menu. Selectionne= e. get. Action. Command(); if (menu. Selectionne. equals("Quitter")) { this. set. Visible(false); this. dispose(); System. exit(0); } else if (menu. Selectionne. equals("Enregistrer")) { if(!champ. Fichier. get. Text(). equals(message. Fichier)) enregistrer. Fichier(champ. Fichier. get. Text()); } else if (menu. Selectionne. equals("Ouvrir")) if(!champ. Fichier. get. Text(). equals(message. Fichier)) charger. Fichier(champ. Fichier. get. Text()); } public void charger. Fichier(String nom. Fichier) { Fichier fichier= new Fichier(nom. Fichier); if (!fichier. lire. Possible()) { champ. Fichier. set. Text(message. Fichier); return; } texte. set. Text(""); try { File. Reader flot. Lecture = new File. Reader(fichier); longueur. Fichier= fichier. length(); int deja. Lu = 0; char car=0; while (deja. Lu < longueur. Fichier) { car= (char)flot. Lecture. read(); deja. Lu = deja. Lu + 1; texte. append(String. value. Of(car)); } flot. Lecture. close(); } catch (IOException e) { System. out. println(" erreur : " + e. to. String()); } } public void enregistrer. Fichier(String nom. Fichier) { Fichier fichier= new Fichier(nom. Fichier); if (fichier. ecrire. Possible()) { try { File. Writer flot. Ecriture = new File. Writer(fichier); flot. Ecriture. write(texte. get. Text()); flot. Ecriture. close(); } catch (IOException e) { System. out. println(" erreur : " + e. to. String()); texte. set. Text(message. Texte); } champ. Fichier. set. Text(message. Fichier); }} }

Application graphique : Editer un fichier

Exercice q Le but de ce TP est d'écrire un programme qui permet de tracer des arcs (pleins ou en fil de fer) en lisant au clavier les valeurs de l'angle de départ et la longueur de l'arc à tracer (sous forme d'angle également) : Longueur de l'arc à tracer Angle de départ

Exercice q Regarder dans la documentation Java à quoi servent les deux méthodes draw. Arc et Fill. Arc de la classe Graphics et comment elles s'utilisent. q Regarder la documentation de la classe Canvas : vous remarquerez notamment qu'on doit écrire une méthode paint lorsqu'on étend la classe Canvas. q Regarder à quoi ressemble cette méthode paint dans la classe Canvas, ainsi que les méthodes update et repaint dans la classe Component. q Ecrire une classe Mon. Canvas qui étend la classe Canvas et qui a trois attributs : angle. Debut et angle. Total sont des entiers et permettent de savoir à partir de quel angle on dessine et sur quelle longueur d'arc, le booléen plein indique si on dessine en fil de fer (false) ou pas (true); cette classe contiendra une méthode paint.

Exercice q Ecrire la méthode paint qui permet de dessiner l'arc (soit plein, soit en fil de fer) en rouge (utiliser set. Color de la classe Graphics), ainsi que les deux axes du repère en noir, et éventuellement des graduations comme sur la figure ci-dessous (utiliser pour cela la méthode get. Bounds de la classe Component ou les méthodes get. Width et get. Height). q Ecrire une classe Mon. Panel permettant de mettre en place l'interface du programme : les boutons en bas, le canvas au dessus. q On pourra tout écrire dans le constructeur, sans rien mettre en attribut. q Ecrire une classe Mon. Ecouteur qui contient deux attributs de type Text. Field et un attribut de type Canvas. Cette classe est chargée de mettre à jour le booléen plein et les deux entiers angle. Debut et angle. Total et de rafraichir l'affichage lorsqu'on clique sur l'un des boutons. q Ecrire une classe Test. Canvas contenant une méthode main pour tester le programme.

Révision

Héritage entre composants Object Graphics Label Button Classes abstraites Component Canvas Checkbox Container Menu. Component Menu. Item List Checkbox. Menu. Item Window Menu. Bar Fenêtre top-level Frame Fenêtre ordinaire Panel Applet Menu

Geometry manager q Border. Layout : q Divise un composant container en 5 zones: North, East, South, West, Center. q Constructeurs : q Border. Layout() crée 5 zones. q Border. Layout(int hspacing, int vspacing) idem avec un espacement spécifié. q La méthode add doit être utilisé ainsi : add ("North", composant). Les frames sont gérées par défaut par le gestionnaire Border. Layout

Geometry manager q Flow. Layout : q Range de gauche à droite et de haut en bas. q Constructeurs : q Flow. Layout() range les composants en les centrant avec un "vspacing et hspacing" (espace vertival, respectivement horizontal) de 5 pixels. q Flow. Layout(int aligne) range les composants en les alignant selon aligne : Flow. Layout. LEFT, Flow. Layout. CENTER, Flow. Layout. RIGHT avec un vspacing et hspacing de 5 pixels. q Flow. Layout(int aligne, int hspacing, int vspacing) range selon l'alignement et le vspacing et le hspacing spécifiés. Le geometry manager de Panel est par défaut le Flow. Layout manager

Geometry manager q Grid. Layout : q Range dans une grille/matrice de gauche à droite et de haut en bas. q Constructeurs : q Grid. Layout(int ligne, int colonne) range les composants dans la grille de rangement. q Grid. Layout(int ligne, int colonne, int hspacing, int vspacing) idem avec le vspacing et le hspacing spécifiés. set. Layout détermine le nouveau geometry manager

Evénements en résumé Composant Action Button, List, Sélectionner, valider Menu. Item, Text. Field, Checkbox, Canvas Text. Area, Text. Field Changer le texte Frame Container Ouvrir, fermer Evénement Interface d'écoute Action. Event Action. Listener Text. Event Text. Listener Window. Event Window. Listener Mouvement et clic de Mouse. Event, Mouse. Listener, souris, frappe au Mouse. Motion. Event, Mouse. Motion. Listener, clavier Key. Event Key. Listener
- Slides: 73