Les packages AWT et SWING Le package AWT

  • Slides: 123
Download presentation
Les packages AWT et SWING Le package "AWT" (java. awt. * ) Le package

Les packages AWT et SWING Le package "AWT" (java. awt. * ) Le package "SWING" ( javax. swing. *) La classe de dessin "Graphics" ( java. awt. Graphics)

AWT (Abstract Window Toolkit) C'est une bibliothèque ou package de classes intégrée à partir

AWT (Abstract Window Toolkit) C'est une bibliothèque ou package de classes intégrée à partir de la version jdk 1. 0 et est actuellement inclus dans toutes les versions de Java. Ce package est la base des extensions ultérieures comme le Swing. Les classes contenues dans AWT dérivent (héritent) toutes de la classe "Component". Nous allons étudier les principales classes pour construire une IHM standard.

AWT Button Checkbox Container: Classe abstraite décrivant des composants pouvant contenir d'autres Dialog composants

AWT Button Checkbox Container: Classe abstraite décrivant des composants pouvant contenir d'autres Dialog composants Choice Object Component Container Label Component: Classe abstraite (non instanciable)décrit les caractéristiques communes à tous les composants Window Frame Panel Applet Scroll. Pane List Scrollbar Text. Component Text. Area Text. Field

Applet= Application internet Une des raisons initiales, du succès de Java peut être la

Applet= Application internet Une des raisons initiales, du succès de Java peut être la raison majeure, réside dans la capacité de ce langage à créer des applications directement exécutables dans un navigateur web contenant une MVJ. Ces applications sont nommées Applet. Une applet doit être insérée ds un fichier HTML (Hyper. Text Markup Language) qui est un langage de balises (parenthèse de description contextuelle). Ce fichier est destiné au navigateur web afin qu'il assure l'affichage de la page web.

Applet dans un fichier HTML Un fichier HTML commence toujours par la balise <HTML>

Applet dans un fichier HTML Un fichier HTML commence toujours par la balise <HTML> et termine par la balise </HTML>. Une applet Java est invoquée grâce au balise "Applet" insérées dans le corps de la page HTML. <HTML> <APPLET CODE = "XXX. class" WIDTH = "200 " HEIGHT = "200 " </APPLET> </HTML> Les paramètres : CODE indique le nom du fichier. class contenant l’applet. WIDTH et HEIGHT fixent la largeur et la hauteur, en pixels, de la zone graphique.

Les méthodes d'une applet Pour programmer une applet, il faut importer (java. applet. *)

Les méthodes d'une applet Pour programmer une applet, il faut importer (java. applet. *) et hériter la classe Applet //mon. Applet. java import java. applet. *; class mon. Applet extends Applet { //les méthodes à définir sont: public void init(){…} public void start(){…} public void paint(Graphic g){…} public void stop(){…} public void destroy(){…}; }

Méthodes de l'applet init() est appelée juste après la création de l'applet et permet

Méthodes de l'applet init() est appelée juste après la création de l'applet et permet de réaliser les initialisations; start() appelée au démarrage de l'applet ou lorsqu'elle est revisitée. paint(Graphics g) permet de programmer les effets visuels. Elle reçoit en paramètre un objet g de la classe Graphics, sur lequel on peut appliquer des opérations de dessin. repaint(), sans paramètre, pour forcer le rafraîchissement de la zone graphique de l’applet stop() appelée lorsque la page n'est plus à l'écran. destroy() appelée lorsque l’applet est détruite cad lorsque le navigateur ferme la page de l'applet

Initialisation d'une Applet

Initialisation d'une Applet

Lancement et arrêt

Lancement et arrêt

Destruction et dessin

Destruction et dessin

Exemple: Une applet qui affiche les étapes de chargement //Simple. Applet. java import java.

Exemple: Une applet qui affiche les étapes de chargement //Simple. Applet. java import java. applet. *; public class Simple. Applet extends Applet{ public void init() {System. out. println("Init. . "); } public void start() {System. out. println("start. . . "); } public void stop() {System. out. println("stop. . . "); } public void destroy(){System. out. println("se détruit. . . "); } public void paint(Graphics g){ System. out. println("Paint"); }} Le fichier HTML qui va charger l'applet est : <HTML> <Applet code = "Simple. Applet. class" width = "400" height = "200"> </Applet> </HTML> Exécution: "appletviewer nom. Applet. html"

Graphiques en Java

Graphiques en Java

QQ fonctions graphiques du AWT void set. Color(Color c) : Modifie la couleur courante.

QQ fonctions graphiques du AWT void set. Color(Color c) : Modifie la couleur courante. Toutes les opérations graphiques ultérieures utiliseront la même couleur. Une couleur peut prendre les valeurs: Color. black, . blue, . cyan, . dark. Gray, . green, light. Gray, . magenta, . orange, . pink, . red, . white, . yellow. Color(int R, int G, int B) 0=<R, G, B<=255 pour définir une couleur. Ex: Color c=new Color(R, V, B); public void Paint(Graphics g){ set. Background(Color c); set. Color(Color c); draw. String("chaine", x, y); …} Ex: modifier la couleur du fond de l'applet en bleu ; insérer une chaîne de caractères de couleur jaune

Suite Simple. Applet. java import java. awt. *; // pr Color dans la méthode

Suite Simple. Applet. java import java. awt. *; // pr Color dans la méthode paint(Graphics g) on ajoute les insts : set. Background(Color. blue); g. set. Color(Color. yellow); g. draw. String("La première applet ", 50);

QQ fonctions graphiques Toutes les fts suivantes doivent être associées un objet Graphics qui

QQ fonctions graphiques Toutes les fts suivantes doivent être associées un objet Graphics qui est passé en paramètres de la ft paint(). void draw. Line(int x 1, int y 1, int x 2, int y 2) : Dessine une ligne entre les points de coordonnées (x 1 , y 1) et (x 2, y 2). void draw. Rect(int x, int y, int width, int height) un rectangle. Les paramètres sont: les coordonnées de son coin gauche supérieur, sa largeur et sa hauteur.

QQ fts graphiques AWT void draw. Oval(int x, int y, int width, int height)

QQ fts graphiques AWT void draw. Oval(int x, int y, int width, int height) le contour d'une ellipse. Les paramètres spécifient le rectangle englobant. coordonnées x, y du coin supérieur gauche du rectangle, width (largeur) du rectangle et height (sa hauteur). void draw. Polygon(Polygon p) Des segments rejoignant les points successifs de l'objet Polygon. Paramètres : un polygone p. Exercice: Insérer ds une applet "Graphics. Test" les formes graphiques : draw. Line(); draw. Oval(); draw. Rect() et draw. Polygon();

Un code de l'applet import java. awt. *; import java. applet. *; public class

Un code de l'applet import java. awt. *; import java. applet. *; public class Graphics. Test extends Applet{ public void init(){ set. Background(Color. white); } public void paint(Graphics g){ g. set. Color(Color. blue); g. draw. Line(10, 50, 50); g. draw. Oval(10, 30, 40); g. draw. Rect(130, 20, 50, 20); Polygon le. Poly=new Polygon(); le. Poly. add. Point(60, 200); le. Poly. add. Point(70, 140); le. Poly. add. Point(90, 100); g. draw. Polygon(le. Poly); }}

Pr une description détaillée de certains composants AWT, veuillez consulter le doc: Fonctions. Graphiques.

Pr une description détaillée de certains composants AWT, veuillez consulter le doc: Fonctions. Graphiques. AWT. doc

Exercice-1 Créer une applet "Lamp. java" qui affiche le dessin suivant:

Exercice-1 Créer une applet "Lamp. java" qui affiche le dessin suivant:

Lamp. java import java. awt. *; import java. applet. Applet; public class Lamp extends

Lamp. java import java. awt. *; import java. applet. Applet; public class Lamp extends java. applet. Applet { public void paint(Graphics g) { //La plate-forme sous la lampe g. fill. Rect(0, 250, 290); //La base de la lampe g. draw. Line(125, 250, 125, 160); g. draw. Line(175, 250, 175, 160); //ombre de la lampe, bords haut et bas g. draw. Arc(85, 157, 130, 50, -65, 312); g. draw. Arc(85, 87, 130, 50, 62, 58); //ombre de la lampe, côtés g. draw. Line(85, 177, 119, 89); g. draw. Line(215, 177, 181, 89); //points sur l'ombre g. fill. Arc(78, 120, 40, 63, -174); g. fill. Oval(120, 96, 40); g. fill. Arc(173, 100, 40, 110, 180); } } <HTML> <Applet code = "Lamp. class" width = "400" height = "600"> </Applet> </HTML>

Exercice-2 Créer une applet qui affiche 20 carrés pleins dont la position, la taille

Exercice-2 Créer une applet qui affiche 20 carrés pleins dont la position, la taille et la couleur sont tirées au hasard. pr trier un nombre entre 0 et n (n exclus) on peut utiliser la méthode suivante: int hasard(int n) { Double D=new Double(Math. random()*n); return D. int. Value(); } Pour ne pas dépasser les coordonnées de la fenêtre contenant l'applet définie ds le fichier html on utilise la constante entière: int maxi= Math. min(get. Size(). width/2, get. Size(). height/2);

carres. java import java. awt. *; import java. applet. *; /** Applet affichant des

carres. java import java. awt. *; import java. applet. *; /** Applet affichant des carrés dont la couleur, la position * et la dimension est choisie au hasard. * Il suffit de masquer le contenu de l'applet (par exemple * en iconisant la fenêtre du navigateur) puis de la refaire * apparaitre pour obtenir un nouveau dessin. * Normal : chaque appel à la méthode paint produit un nouveau * dessin. */ public class carres extends Applet { //nombre de carrés à dessiner int nb. Cars; /** * Initialisation du nombre de carrés et de la * couleur de fond */ public void init() { nb. Cars=20; set. Background(Color. white); }

Suite /** * Tirer un nombre au hasard entre 0 et n (n exclus)

Suite /** * Tirer un nombre au hasard entre 0 et n (n exclus) */ int hasard(int n) { Double D=new Double(Math. random()*n); return D. int. Value(); // ou return (int)Math. floor(Math. random()*n); } /** * Dessiner un carré : couleur, position et taille sont * tirés au hasard en utilisant la méthode hasard. */ void dessine. Carre(Graphics g) { //choix de la couleur Color col=new Color(hasard(256), hasard(256)); //maximum pour coordonnées et côté int maxi=Math. min(get. Size(). width/2, get. Size(). height/2); //coordonnées int x=hasard(maxi), y=hasard(maxi); //côté int c=hasard(maxi); //on trace g. set. Color(col); g. fill. Rect(x, y, c, c); }

 /** * La méthode paint dessine nb. Cars carrés en appelant la *

/** * La méthode paint dessine nb. Cars carrés en appelant la * la méthode de dessin d'un carré autant de fois que * nécessaire. */ public void paint(Graphics g) { for (int i=0; i<nb. Cars; i++) dessine. Carre(g); } } Carres. html <HTML> <APPLET CODE="carres. class" WIDTH="300" HEIGHT="300"> </APPLET> </HTML>

Exercice-3 Créer une applet "paysage" qui dessine la figure suivante:

Exercice-3 Créer une applet "paysage" qui dessine la figure suivante:

paysage. java import java. applet. *; import java. awt. *; public class paysage extends

paysage. java import java. applet. *; import java. awt. *; public class paysage extends Applet { /* on dessine dans un rectangle de 300 sur 200 */ public void paint(Graphics g) { //ciel et prairie g. set. Color(Color. blue); g. fill. Rect(0, 0, 300, 110); g. set. Color(Color. green); g. fill. Rect(0, 110, 300, 90); //soleil g. set. Color(Color. yellow); g. fill. Oval(220, 30, 30); //maison g. set. Color(Color. white); g. fill. Rect(80, 100, 50, 70); g. set. Color(Color. black); g. draw. Rect(80, 100, 50, 70);

Suite //toit en triangle int[] x={80, 130, 105}; int[] y={100, 50}; g. set. Color(Color.

Suite //toit en triangle int[] x={80, 130, 105}; int[] y={100, 50}; g. set. Color(Color. red); g. fill. Polygon(x, y, 3); g. set. Color(Color. black); g. draw. Polygon(x, y, 3); //porte g. draw. Rect(90, 140, 20, 30); g. draw. Line(110, 155, 105, 155); } }

paysage. html <HTML> <APPLET CODE="paysage. class" WIDTH="300" HEIGHT="200"> </APPLET> </HTML>

paysage. html <HTML> <APPLET CODE="paysage. class" WIDTH="300" HEIGHT="200"> </APPLET> </HTML>

Quelques méthodes de la classe "Component" void enable()/disable()/set. Enabled(boolean) active/désactive le composant void set.

Quelques méthodes de la classe "Component" void enable()/disable()/set. Enabled(boolean) active/désactive le composant void set. Foreground(Color c)/Color get. Foreground() couleur du composant void set. Background(Color c)/ Color get. Background() Couleur du fond void set. Label(String s)/String get. Label() attribue|récupère étiquette au composant void show()/hide()/set. Visible(boolean) une frame est par défaut non visible. Rendre la fenêtre visible et l'amène au-dessus des autres fenêtres/invisible Graphics get. Graphics() récupère la surface de travail du composant pour pouvoir réaliser d'autres tracés.

Composants "Label" et "Button" Label : ligne de texte non modifiable par l'utilisateur. Constructeur:

Composants "Label" et "Button" Label : ligne de texte non modifiable par l'utilisateur. Constructeur: Label(String) set. Label(String str) / get. Label(); set. Text(String); set. Background(Color); set. Foreground(Color) import java. awt. *; import java. applet. *; public class Awt. Test extends Applet{ Label test. Label; public void init(){ set. Layout(new Flow. Layout()); //pr la mise en forme des composants test. Label=new Label("LABEL"); add(test. Label); }} Button : création d'un bouton poussoir classique. Button(String label) Button test. Button=new Button("BUTTON"); add(test. Button);

import java. awt. *; import java. applet. *; public class awt. Test extends Applet{

import java. awt. *; import java. applet. *; public class awt. Test extends Applet{ Button b=new Button(); Public void init(){ b. set. Label("Bouton 1"); b. set. Foreground(Color. blue); b. set. Background(Color. yellow); //b. set. Enabled(false); add(b); } } ***************** <HTML> <Applet code = "awt. Test. class" width = "400" height = "200"> </Applet> </HTML>

Text. Area et Choice Text. Area pour la saisie de texte. Text. Area(String texte)

Text. Area et Choice Text. Area pour la saisie de texte. Text. Area(String texte) Ou Text. Area(String texte, int nb. Lignes, int nb. Colonnes); sans paramètres; il permet d'utiliser tout le container set. Editable(bool b); // changement du droit d'écriture Choice un menu déroulant de choix. Constructeur Choice(); void add(String s); String get. Selected. Item(); void select(String s).

Text. Field et List Text. Field une seule ligne. Text. Field(String texte, int nb.

Text. Field et List Text. Field une seule ligne. Text. Field(String texte, int nb. Colonnes); set. Editable(bool b); set. Echo. Character(char c): méthode de masquage du champ par les caractères c (pr les mots de passe); char get. Echo. Char(): retourne le caractère de masquage du champ Boolean echo. Char. Is. Set(): renvoie true si le champ est masqué List : liste de sélection. List l= new List(int nbre. Items); l. get. Selecteditem(); renvoie l'item sélectionné l. get. Selected. Index(); renvoie l'index de l'item sélectionné (à partir du 0) l. select(int i); sélectionne l'item donné en paramètre

Checkbox et Checkbox. Group Checkbox interrupteur de contrôle. Checkbox(String label): construction initialisation à false.

Checkbox et Checkbox. Group Checkbox interrupteur de contrôle. Checkbox(String label): construction initialisation à false. Checkbox. Group les interruptions peuvent être organisés en groupe (1 seul sélectionné). Pour cela il faut les grouper. Le checkbox. Group n'est ni un composant ni un conteneur, mais un objet qui sert à gérer les relations entre plusieurs objets checkbox. Par conséquent, on ne peut pas ajouter de Checkbox. Group à un conteneur. Checkbox. Group gr=new Checkbox. Group(); Checkbox c 1= new Checkbox("A", gr, false), c 2= new Checkbox("B", gr, false), c 3=new Checkbox("C", gr, true); add(c 1); add(c 2); add(c 3);

Exemple import java. awt. *; import java. applet. *; public class awt. Test extends

Exemple import java. awt. *; import java. applet. *; public class awt. Test extends Applet{ public void init(){ set. Layout(new Flow. Layout()); Label test. Label=new Label("LABEL"); add(test. Label); Button test. Button=new Button("BUTTON"); add(test. Button); Text. Field test. Text. Field=new Text. Field("TEXTFIELD", 20); add(test. Text. Field); test. Text. Field. set. Editable(false); Text. Area test. Text. Area= new Text. Area("TEXTAREA", 3, 50); add(test. Text. Area);

Checkbox test. Check. Box=new Checkbox("CHECKBOX"); add(test. Check. Box); Checkbox. Group gr= new Checkbox. Group();

Checkbox test. Check. Box=new Checkbox("CHECKBOX"); add(test. Check. Box); Checkbox. Group gr= new Checkbox. Group(); Checkbox c 1= new Checkbox("A", gr, false), c 2= new Checkbox("B", gr, false), c 3=new Checkbox("C", gr, true); add(c 1); add(c 2); add(c 3); Choice test. Choice=new Choice(); test. Choice. add. Item("1"); test. Choice. add. Item("2"); test. Choice. add. Item("3"); add(test. Choice); test. Choice. select("3"); System. out. println(" " +test. Choice. get. Selected. Item());

List test. List=new List(2); test. List. add("Item 1"); test. List. add("item 2"); test. List.

List test. List=new List(2); test. List. add("Item 1"); test. List. add("item 2"); test. List. select(0); System. out. println("item selectionne index = " +test. List. get. Selected. Index() + ", valeur =" + test. List. get. Selected. Item() ); add(test. List); } } // le code HTML <HTML> <Applet code="awt. Test. class" width=600 height=600 > </Applet> </HTML>

Gestionnaire de mise en forme Les principaux gestionnaires prédéfinies dans AWT les + utilisés

Gestionnaire de mise en forme Les principaux gestionnaires prédéfinies dans AWT les + utilisés et les + faciles à manipuler sont: Border. Layout, Flow. Layout et Grid. Layout. set. Layout(new Flow. Layout()); Flow. Layout : composants placés les uns après les autres dans leur ordre d’ajout le tout doit être centré. C'est par défaut pr les Applets ds les dernières versions Java Border. Layout: sur les bord du conteneur: nord, sud, est, west String s = Border. Layout. (NORTH |SOUTH|CENTER|EAST|WEST) add(instance Composant, String s); Grid. Layout(nbre. Ligne, nbre. Colonnes) : en matrice.

Mise en forme: Flow. Layout import java. applet. *; import java. awt. *; public

Mise en forme: Flow. Layout import java. applet. *; import java. awt. *; public class Flow. Layout 1 extends Applet{ public void init(){ set. Layout(new Flow. Layout()); // par défaut pr les applets for(int i=1; i<=20; i++) add(new Button("Button " +i) ); } }

Border. Layout import java. applet. *; import java. awt. *; public class Border. Layout

Border. Layout import java. applet. *; import java. awt. *; public class Border. Layout 1 extends Applet{ public void init(){ set. Layout(new Border. Layout()); add(new Button("North"), Border. Layout. NORTH); add(new Button("South"), Border. Layout. SOUTH); add(new Button("East"), Border. Layout. EAST); add(new Button("West"), Border. Layout. WEST); add(new Button("Center"), Border. Layout. CENTER); } }

Grid. Layout import java. applet. *; import java. awt. *; public class Grid. Layout

Grid. Layout import java. applet. *; import java. awt. *; public class Grid. Layout 1 extends Applet{ public void init(){ set. Layout(new Grid. Layout(5, 3)); // nbre. Ligne, nbre. Colonnes for(int i=1; i<15; i++) add(new Button("Button " +i) ); add(new Label("Fin")); } }

Panel: regroupement de composants import java. applet. *; import java. awt. *; public class

Panel: regroupement de composants import java. applet. *; import java. awt. *; public class Border. Layout. Panels extends Applet{ public void init(){ set. Layout(new Border. Layout()); Panel p 1 = new Panel(), p 2=new Panel(), p 3=new Panel(), p 4=new Panel();

p 1. set. Layout(new Flow. Layout()); p 1. add(new Label("L 1")); p 1. add(new

p 1. set. Layout(new Flow. Layout()); p 1. add(new Label("L 1")); p 1. add(new Text. Field("T 1")); p 2. set. Layout(new Border. Layout()); p 2. add(new Label("L 2"), Border. Layout. NORTH); p 2. add(new Text. Area("Text. Area ", 5, 5), Border. Layout. CENTER); p 3. add(new Button("P 3")); p 4. add(new Button("P 4")); add(p 1, Border. Layout. NORTH); add(p 2, Border. Layout. SOUTH); add(p 3, Border. Layout. EAST); add(p 4, Border. Layout. WEST); } // init() : on réserve le centre pr un dessin public void paint(Graphics g){ set. Background(Color. pink); g. set. Color(Color. blue); g. draw. String("Zone paint ", 50); // Les coordonnées doivent être bien à l'extérieur des panneaux //ajoutes sinon le dessin sera caché. g. draw. Line(70, 160, 190); } // paint } // classe principale

La classe java. awt. Frame Cette classe sert à afficher une fenêtre. Il ne

La classe java. awt. Frame Cette classe sert à afficher une fenêtre. Il ne faut pas ajouter directement des composants au Frame, mais il faut appeler la méthode get. Content. Pane() et les ajouter au conteneur renvoyé par cette méthode. Le gestionnaire de disposition par défaut de ce conteneur est une instance de java. awt. Border. Layout. Les principales méthodes st: ● public Frame(): Const. de la fenêtre ● public Frame(String titre): Const. avec un titre ● public void set. Title(String titre): attribue un titre ● String get. Title: retourne le titre ● set. Background(Color c)/ Color get. Background; ● public Container get. Content. Pane(): récupère le conteneur du Frame. Ex: Container cp=get. Content. Pane() ● public void set. Menu. Bar(Menu. Bar barre. Menu): attribue une intance de barre de menu

Frame (fenêtre): création import java. awt. *; Ds ce code la frame ne répond

Frame (fenêtre): création import java. awt. *; Ds ce code la frame ne répond pas aux événements public class Ma. Frame extends Frame { fen. set. Location(100, 100) + set. Size(250, 150) Ma. Frame(){// const Frame fen = new Frame ("…" ); fen. set. Bounds(100, 250, 150); fen. set. Background(Color. white); System. out. println(fen. get. Background()); fen. set. Resizable(false); fen. set. Visible(true); //doit être tjs la dernière inst à appeler. } public static void main(String[] args){ ALT+CTRL+DELETE pr arrêter Ma. Frame f=new Ma. Frame(); l'application }// main }// Ma. Frame

Fermeture de la "frame": adaptateur d'événements –sera détaillé après -- import java. awt. *;

Fermeture de la "frame": adaptateur d'événements –sera détaillé après -- import java. awt. *; import java. awt. event. *; public class Ma. Frame extends Frame { Frame fen; Ma. Frame(){ fen = new Frame (" ma Frame" ); fen. set. Bounds(100, 250, 150); fen. set. Visible ( true ); // gestion d'evts fen. add. Window. Listener( new Window. Adapter() { public void window. Closing(Window. Event e){ fen. hide(); fen. dispose(); // System. exit(0); }}); } public static void main(String[] args){new Ma. Frame(); }}

La programmation événementielle ds une IHM Les applications comportant une interface graphique IHM (GUI)

La programmation événementielle ds une IHM Les applications comportant une interface graphique IHM (GUI) sont dirigées par les événements et leurs traitements. Une application graphique ne fait rien jusqu'à ce que l'utilisateur fait une action: bouge la souris, clique un bouton de la souris ou appuie sur une touche clavier … ÞSeules interventions de l’utilisateur sur les instances de l'application déclenchent l’exécution des routines associées. ÞEn effet, le SE attend l'action de l’utilisateur (un événement). Cette action déclenche un message que le système traite et l'envoie éventuellement à un objet de l'application qui l'exécute.

Modèle événementiel Dans une interface graphique, un événement correspond à toute opération effectuée sur

Modèle événementiel Dans une interface graphique, un événement correspond à toute opération effectuée sur un composant (clic, déplacement de souris, entrée de texte, …) Un événement doit être intercepté par un contrôleur (ou objet cible). Button Event. Object Frame Utilisateur CLIC de SOURIS La fenêtre contenant le bouton

Event. Object est la super. Classe de toutes les classes d'événement. public Object get.

Event. Object est la super. Classe de toutes les classes d'événement. public Object get. Source() Event. Object Component Listener Implémente les interfaces d'evts qu'ils voudrait intercepter => peut recevoir les evts qd ils se produisent Listener Un contrôleur (objet cible d'evt) = une instance d'une classe qui implémente une interface de contrôle ( leurs noms se terminent tjs par le suffixe "Listener"). Un composant peut être le récepteur de +ieurs evts

Principales classes d'événements "Window. Event": évts effectués sur une fenêtre : fermeture, iconifier, …

Principales classes d'événements "Window. Event": évts effectués sur une fenêtre : fermeture, iconifier, … "Key. Event" : interception des touches clavier "Mouse. Event": déplacement et comportement de la souris "Action. Event" : évts relatifs à l'action principale d'un composant: clic sur un bouton, sur un menu, . . "Item. Event" : évts de sélection sur un composant: sélection dans une liste, ds un checkboxgroup … "Text. Event": saisie de texte ds une Text. Area ou Text. Field

Le récepteur d'evts ou objet cible Il doit être notifié par l'objet source lorsque

Le récepteur d'evts ou objet cible Il doit être notifié par l'objet source lorsque certains événements se produisent. public void add<Listener. Type>(<Listener. Type> listener) Ex: this. add. Action. Listener(instance d'une classe qui hérite la classe d'evt on l'appelle classe listener); Un récepteur peut annuler à tout moment sa demande de notification. La méthode d'annulation de notification a la signature suivante : public void remove<Listener. Type>(<Listener. Type> listener)

Exemple: ajout d'evts aux composants AWT en utilisant les classes internes //gestion d'événements d'un

Exemple: ajout d'evts aux composants AWT en utilisant les classes internes //gestion d'événements d'un bouton, Text. Area et Text. Field //Objectif récupérer le clic du bouton, saisie de lettre et de texte //(touche Entrée) ds un Text. Area import java. awt. *; import java. applet. *; import java. awt. event. *; public class Test. Evt extends Applet{ Button test. Button; Text. Field test. Text. Field; Text. Area test. Text. Area; public void init(){ set. Layout(new Flow. Layout()); test. Button=new Button("BUTTON"); add(test. Button);

// clic sur le bouton test. Button. add. Action. Listener(new Action. Listener(){ public void

// clic sur le bouton test. Button. add. Action. Listener(new Action. Listener(){ public void action. Performed(Action. Event e){ test. Text. Area. append("Bouton cliquen"); }}); test. Text. Field=new Text. Field("TEXTFIELD", 20); add(test. Text. Field); //ajout ou effacement d'un caractère test. Text. Field. add. Text. Listener( new Text. Listener(){ public void text. Value. Changed(Text. Event e) { test. Text. Area. append(test. Text. Field. get. Text()+" : vs venez d'ajouter la derniere lettre n"); } }); // touche Enter test. Text. Field. add. Action. Listener( new Action. Listener(){ public void action. Performed(Action. Event e) { test. Text. Area. append(test. Text. Field. get. Text()+" est entre n"); } }); test. Text. Area= new Text. Area(". . . ", 30); add(test. Text. Area); } // init }// classe principale

Saisie de mot de passe: pr comparer 2 String il faut utiliser la méthode

Saisie de mot de passe: pr comparer 2 String il faut utiliser la méthode "equals" et non pas "==" // sur l'exemple précèdent // touche Enter test. Text. Field. add. Action. Listener( new Action. Listener(){ public void action. Performed(Action. Event e) { if( test. Text. Field. get. Text(). equals("abcde")) test. Text. Area. append(" mot de passe correct " + test. Text. Field. get. Text() + "n"); else test. Text. Area. append(test. Text. Field. get. Text() + " : mot de passe incorrect n"); } });

L'interface Key. Listener Afin d'intercepter une touche clavier. Key. Event. VK_UP; Key. Event. DOWN;

L'interface Key. Listener Afin d'intercepter une touche clavier. Key. Event. VK_UP; Key. Event. DOWN; Key. Event. LEFT; Key. Event. RIGHT; … retourne un entier Un exemple sera implémente pour les Swing après.

Interface Définition: C'est une classe n'ayant que des méthodes abstraites (pas de code; uniquement

Interface Définition: C'est une classe n'ayant que des méthodes abstraites (pas de code; uniquement la signature: type. Acces type. Retour nom. Ft et les types des paramètres) et/ou des constantes Intérêts Définir des spécifications standardisées Permet de simuler l’héritage multiple non supportée par Java

Déclaration et implémentation d'interfaces //nom. Interface. java public interface <nom. Interface> { type att=val;

Déclaration et implémentation d'interfaces //nom. Interface. java public interface <nom. Interface> { type att=val; //implicitement final static => cste …. [public|protected|private]type. Retour meth 1(types 1, type 2, … ); public void meth 2(…); …. //toutes les méthodes st implicitement abstract } Implémentation d'interface class nom. Classe implements mon. Interface 1, mon. Interface 2, …. {les attributs et les méthodes} Toute classe qui implémente l'interface doit disposer (spécifier) toutes les méthodes de l'interface même si leurs corps st vides.

EXEMPLE: Interface << //interface Moteur. java public interface Moteur { int V_MAX=130; public double

EXEMPLE: Interface << //interface Moteur. java public interface Moteur { int V_MAX=130; public double accelerer(double v); public void arreter(); public double vitesse(); public void aff(); } >>

public class Voiture implements Moteur { private String marque; private double vitesse; Voiture(String s,

public class Voiture implements Moteur { private String marque; private double vitesse; Voiture(String s, double v){marque=s; vitesse=v; } // méthodes de l'interface public double accelerer(double v){ System. out. println("vitesse augmentée de="+v); return v; } public void arreter(){System. out. println("voiture est arretee"); } // méthodes non utilisées public double vitesse(){return 0; } public void aff(){} public static void main(String[] args){ Voiture v 1=new Voiture("V 1", 40); v 1. accelerer(20. 4); v 1. arreter(); System. out. println("la vitesse maximale= " + V_MAX); } // main } // voiture

Interface d'événement : Window. Listener <<interface>> Window. Listener void window. Closing(Window. Event e) void

Interface d'événement : Window. Listener <<interface>> Window. Listener void window. Closing(Window. Event e) void window. Closed(Window. Event e) void window. Opened(Window. Event e) void window. Iconified(Window. Event e) void window. Deiconified(Window. Event e) void window. Activated(Window. Event e) void window. Deactivated(Window. Event e)

fermeture d'une "Frame" à l'aide d'interface import java. awt. event. *; import java. awt.

fermeture d'une "Frame" à l'aide d'interface import java. awt. event. *; import java. awt. *; public class Evenements extends Frame implements Window. Listener{ Evenements(){this. add. Window. Listener(this); /*1 er this= objet courant le 2 nd = classe d'evt est définie ds la classe Evenements qu'on travaille dedans */ } //les méthodes de l'interface "Window. Event": public void window. Closing(Window. Event e){System. exit(0); } Classe d'evts public void window. Opened(Window. Event e){} public void window. Closed(Window. Event e){} public void window. Iconified(Window. Event e){} public void window. Deiconified(Window. Event e){} public void window. Activated(Window. Event e){} public void window. Deactivated(Window. Event e){}

public static void main(String[] args){ Frame f=new Evenements(); f. set. Title("Evenements"); f. set. Size(300,

public static void main(String[] args){ Frame f=new Evenements(); f. set. Title("Evenements"); f. set. Size(300, 300); f. set. Visible(true); } // meth. main }// classe Evenemnts

Création d'une classe qui hérite la classe d'evt //Evt. java import java. awt. event.

Création d'une classe qui hérite la classe d'evt //Evt. java import java. awt. event. *; import java. awt. *; public class Evt extends Frame { Evt(){ Evt. Fen a= new Evt. Fen(); this. add. Window. Listener(a); } public static void main(String[] args){ Frame f=new Evt(); f. set. Title("Evt"); f. set. Size(300, 300); f. set. Visible(true); } // main }// fin classe principale Classe d'evt

class Evt. Fen implements Window. Listener{ public void window. Closing(Window. Event e) {System. exit(0);

class Evt. Fen implements Window. Listener{ public void window. Closing(Window. Event e) {System. exit(0); } public void window. Opened(Window. Event e){} public void window. Closed(Window. Event e){} public void window. Iconified(Window. Event e){} public void window. Deiconified(Window. Event e){} public void window. Activated(Window. Event e){} public void window. Deactivated(Window. Event e){} }

Adaptateur d'événements = classe qui implémente une interface d'evt Pour ne pas avoir à

Adaptateur d'événements = classe qui implémente une interface d'evt Pour ne pas avoir à définir des méthodes qu'on n'a pas besoin L'objectif d'un adaptateur est de faciliter l'implémentation des classes réceptrices d'événements (ayant plusieurs méthodes). Un adaptateur fournit par défaut des méthodes à corps vide pour chacune des méthodes de l'interface. Ex: Window. Adapter pr Window. Listener, Mouse. Adapter pr Mouse. Listener), etc. Les interfaces ayant une seule méthode n'ont pas d'adaptateur. Ex: Action. Listener, Text. Listener et Item. Listener (c. f. Annexe)

Fermeture de la "frame" // exemple déjà vu import java. awt. *; import java.

Fermeture de la "frame" // exemple déjà vu import java. awt. *; import java. awt. event. *; public class Ma. Frame extends Frame { Frame fen; Ma. Frame(){ fen = new Frame (" ma Frame" ); fen. set. Bounds(100, 250, 150); fen. set. Visible ( true ); fen. add. Window. Listener( new Window. Adapter() { public void window. Closing(Window. Event e){ System. exit(0); } // window. Closing } // Window. Adapter() ); // add. Window. Listener } // Ma. Frame() public static void main(String[] args){new Ma. Frame(); }}

Fenêtre qui change de couleur (pink/green) Une étiquette d'indication Un panneau: son background est

Fenêtre qui change de couleur (pink/green) Une étiquette d'indication Un panneau: son background est initialement en Jaune Objectif: le passage de la souris sur le panneau doit provoquer un changement de sa couleur. Lorsque la souris entre ds le panneau sa couleur devient Rose Lorsque la souris sorte du panneau sa couleur devient Vert

Démarche 1. Création et ajout des composants de la fenêtre 2. Identification des événements

Démarche 1. Création et ajout des composants de la fenêtre 2. Identification des événements associés à chaque composant 3. Mettre les composants en attente d'événements: add<Type>Listener 4. Implémentation du (des) comportement(s) (méthode(s)) associé(s) aux événements par les composant concernés

Le code import java. awt. *; import java. awt. event. *; class Fenetre. Rose.

Le code import java. awt. *; import java. awt. event. *; class Fenetre. Rose. Vert extends Frame { Panel cadre; Label titre; Fenetre. Rose. Vert(){ cadre = new Panel(); titre = new Label("Changer la couleur. . . en passant"); cadre. set. Background(Color. yellow); set. Layout(new Border. Layout()); add(cadre, Border. Layout. CENTER); add(titre, Border. Layout. NORTH); // fermeture de la fenêtre this. add. Window. Listener( new Window. Adapter(){ public void window. Closing(Window. Event e){System. exit(0); } } );

 cadre. add. Mouse. Listener( new Mouse. Adapter(){ public void mouse. Entered(Mouse. Event e){

cadre. add. Mouse. Listener( new Mouse. Adapter(){ public void mouse. Entered(Mouse. Event e){ cadre. set. Background(Color. pink); } // mouse. Entered public void mouse. Exited(Mouse. Event e){ cadre. set. Background(Color. green); } //mouse. Exited }// Mouse. Adapter ); // add. Mouse. Listener } //constr. Fenetre. Rose. Vert() public static void main (String[] args) { Fenetre. Rose. Vert f = new Fenetre. Rose. Vert(); f. set. Size(300, 300); f. set. Visible(true); }// main }// classe principale Fenetre. Rose. Vert

Couleur du fond aléatoire Ds la classe "Fenetre. Rose. Vert" on ajoute la ft

Couleur du fond aléatoire Ds la classe "Fenetre. Rose. Vert" on ajoute la ft : public Color couleur. Aleatoire(){ int i, j, k; i= (int) Math. random()*255; // retourne Long j= (int) Math. random()*255; k=(int) Math. random()*255; Color c=new Color(i, j, k); return c; } Math. random => long entre 0. 0 et 1. 0 Afin d'obtenir un num entre [0. . 255] on multiplie par 255

Appel de la ft des méthodes: mouse. Entered et mouse. Exited cadre. add. Mouse.

Appel de la ft des méthodes: mouse. Entered et mouse. Exited cadre. add. Mouse. Listener(new Mouse. Adapter(){ public void mouse. Entered(Mouse. Event e){ cadre. set. Background(couleur. Aleatoire()); } public void mouse. Exited(Mouse. Event e){ } } ); } cadre. set. Background( couleur. Aleatoire() );

Une chaîne de caractères pr chaque clic souris Remettre l'espace de dessin à vide

Une chaîne de caractères pr chaque clic souris Remettre l'espace de dessin à vide Par la methode repaint() Zone de dessin (panneau) de chaîne de caractères: qui affiche la position du curseur souris Méthode: mouse. Pressed qui récupère l'objet graphique pr pouvoir afficher la chaîne

class Zone. Graphique extends Panel { Zone. Graphique(){ this. add. Mouse. Listener(new Mouse. Adapter(){

class Zone. Graphique extends Panel { Zone. Graphique(){ this. add. Mouse. Listener(new Mouse. Adapter(){ public void mouse. Pressed(Mouse. Event e) { Graphics g= get. Graphics(); String ch="curseur est à x= " + e. get. X() + ", y= "+ e. get. Y(); g. draw. String(ch, e. get. X(), e. get. Y()); }}); }//zone. Graphique() void efface(){ repaint(); // rafraîchissement de la zone de dessin }// efface() } // Zone graphique

Suite code //Dessin. Chaine. java import java. awt. event. *; import java. awt. *;

Suite code //Dessin. Chaine. java import java. awt. event. *; import java. awt. *; public class Dessin. Chaine extends Frame{ Button b= new Button("effacer"); Zone. Graphique z; Dessin. Chaine(){ this. set. Layout(new Border. Layout()); z=new Zone. Graphique(); this. add(z, Border. Layout. CENTER); this. add(b, Border. Layout. NORTH );

this. add. Window. Listener(new Window. Adapter(){ public void window. Closing(Window. Event e){System. exit(0); }

this. add. Window. Listener(new Window. Adapter(){ public void window. Closing(Window. Event e){System. exit(0); } } ); b. add. Action. Listener(new Action. Listener(){ public void action. Performed(Action. Event e){ z. efface(); } }); }//Dessin. Chaine() constr. public static void main(String[] args){ Dessin. Chaine f = new Dessin. Chaine(); f. set. Title("Dessin chaîne "); f. set. Size(500, 500); f. set. Visible(true); } // main } // classe principale

Le diagramme des classes en UML de l'application "Dessin. Chaine. java" "association navigable" source

Le diagramme des classes en UML de l'application "Dessin. Chaine. java" "association navigable" source cible L'objet source contient une référence vers le cible Classe principale Qui est une sous. Classe de la classe java. awt. Frame super. Classe extends import ---- "dependency"

Ajout de menu Séquence des instructions-1

Ajout de menu Séquence des instructions-1

Séquence des instructions-2

Séquence des instructions-2

Frame: "ajout de Menu" 1. Menu. Bar : Création d'une barre des menus dans

Frame: "ajout de Menu" 1. Menu. Bar : Création d'une barre des menus dans la fenêtre. 2. Menu: Création de menu de la barre des menus de la fenêtre. 3. Menu. Item: Création de sous-menus d'un menu principal Menu. Bar mbar=new Menu. Bar( ); Menu meprinc 1=new Menu("Fichier"); Menu meprinc 2=new Menu("Edition"); Menu. Item item 1=new Menu. Item("choix n° 1"); Menu. Item item 2 =new Menu. Item("choix n° 2"); meprinc 1. add(item 1); meprinc 1. add(item 2); mbar. add(meprinc 1); mbar. add(meprinc 2); fen. set. Menu. Bar(mbar); //pas de méthode add pr la menu. Bar fen. set. Visible(true);

Code import java. awt. *; import java. awt. event. *; public class Ma. Frame

Code import java. awt. *; import java. awt. event. *; public class Ma. Frame { Frame fen= new Frame ("ma. Frame" ); Text. Field txt= new Text. Field(20); Ma. Frame(){ fen. set. Bounds(100, 250, 150); fen. set. Layout(new Flow. Layout( )); fen. add(txt);

Menu. Bar mbar = new Menu. Bar( ); Menu meprinc 1 = new Menu("Fichier"),

Menu. Bar mbar = new Menu. Bar( ); Menu meprinc 1 = new Menu("Fichier"), meprinc 2 = new Menu("Edition"); Menu. Item item 1 = new Menu. Item("choix n° 1"), item 2 = new Menu. Item("choix n° 2"); meprinc 1. add(item 1); meprinc 1. add(item 2); mbar. add(meprinc 1); mbar. add(meprinc 2); fen. set. Menu. Bar(mbar); fen. set. Visible(true ); fen. add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event e){System. exit(0); }});

item 1. add. Action. Listener(new Action. Listener(){ public void action. Performed(Action. Event e){ txt.

item 1. add. Action. Listener(new Action. Listener(){ public void action. Performed(Action. Event e){ txt. set. Text("item 1 est clique"); …. . }}); item 2. add. Action. Listener(new Action. Listener(){ public void action. Performed(Action. Event e){ txt. set. Text("item 2 est clique"); …. }}); } public static void main(String[] args){ new Ma. Frame(); } }

Evt sous forme d'attribut public class Ma. Frame extends Frame { Frame fen=new Frame();

Evt sous forme d'attribut public class Ma. Frame extends Frame { Frame fen=new Frame(); Text. Field txt=new Text. Field(20); Action. Listener a= new Action. Listener(){ public void action. Performed(Action. Event e){ String t=((Menu. Item)e. get. Source()). get. Label(); txt. set. Text(t); }}; Ma. Frame(){ ……. . /* au lieu de : item 1. add. Action. Listener(new Action. Listener(){ public void action. Performed(Action. Event e){…. item 1. add. Action. Listener(a); item 2. add. Action. Listener(a); }}); */

Evénements sous forme d'atts: +ieurs composants peuvent les utiliser Ds la classe principale ns

Evénements sous forme d'atts: +ieurs composants peuvent les utiliser Ds la classe principale ns ajoutons l'attribut du type Action. Listener: Action. Listener a = new Action. Listener(){ public void action. Performed(Action. Event e){ String t=( (Menu. Item) e. get. Source() ). get. Label(); …. . }}; Object qu'il faut convertir en 1 composant de notre application ici c'est un Menu. Item (il peut etre n'importe quel autre composant AWT : Button, Combo. Box, …. . ) afin d'appeler la meth adéquate ici get. Label() Chaque composant qui veut recevoir l'evt doit s'inscrire auprès du listener. composant. add<type>Listener(a);

Event. Object est la super. Classe de toutes les classes d'événement. Elle contient la

Event. Object est la super. Classe de toutes les classes d'événement. Elle contient la méthode get. Source() qui permet d'identifier l'objet ayant intercepté l'evt : public Object get. Source() Component Intercèpte implements Listener

Editeur de rectangle, rectangle plein et oval Menu de sélection du forme à tracer:

Editeur de rectangle, rectangle plein et oval Menu de sélection du forme à tracer: Panneau : zone de dessin Cf. Editeur. Rect. java Barre d'outils contenant un bouton permettant d'effacer la zone de dessin

import java. awt. *; import java. awt. event. *; public class Editeur. Rect extends

import java. awt. *; import java. awt. event. *; public class Editeur. Rect extends Frame { Zone. Graphique z = new Zone. Graphique(); int forme=0; // 1: rectangle 2: rectangle Plein 3: oval Editeur. Rect() { set. Layout(new Border. Layout()); add(new Barre. Outils(), Border. Layout. NORTH); add(z, Border. Layout. CENTER);

Menu. Bar menu. Bar = new Menu. Bar(); Menu menu. Forme = new Menu("Forme");

Menu. Bar menu. Bar = new Menu. Bar(); Menu menu. Forme = new Menu("Forme"); Menu. Item rect = new Menu. Item("Rectangle"), rect. P = new Menu. Item("Rectangle Plein"), oval = new Menu. Item("Oval"); menu. Forme. add(rect. P); menu. Forme. add(oval); menu. Bar. add(menu. Forme); set. Menu. Bar(menu. Bar); rect. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { forme=1; } }); rect. P. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { forme=2; } }); oval. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { forme=3; } }); this. add. Window. Listener(new Window. Adapter(){ public void window. Closing(Window. Event e){System. exit(0); } }); }// Editeur. Rect()

public static void main(String[] argv) { Editeur. Rect f = new Editeur. Rect(); f.

public static void main(String[] argv) { Editeur. Rect f = new Editeur. Rect(); f. set. Size(500, 500); f. set. Visible(true); } class Zone. Graphique extends Panel { Zone. Graphique() { set. Background(Color. white); add. Mouse. Listener(new Mouse. Adapter() { public void mouse. Pressed(Mouse. Event e) { Graphics g = get. Graphics(); if (forme==1)g. draw. Rect(e. get. X(), e. get. Y(), 40, 30); if(forme==2) g. fill. Rect(e. get. X(), e. get. Y(), 40, 30); if(forme==3) g. draw. Oval(e. get. X(), e. get. Y(), 40, 30); } }); } public void efface() { repaint(); } } //Zone. Graphique

///Barre d'outils class Barre. Outils extends Panel { Button Bouton. Effacer = new Button("Tout

///Barre d'outils class Barre. Outils extends Panel { Button Bouton. Effacer = new Button("Tout effacer"); Barre. Outils() { this. add(Bouton. Effacer); Bouton. Effacer. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { z. efface(); } }); } // constr. } // Barre. Outils } // classe principale PB: Si on essaie de maximiser la fenêtre on perd les graphiques déjà tracés Sol: il faut les stocker ds une liste

Forme int X, Y; // position int id; // id Forme public void dessine.

Forme int X, Y; // position int id; // id Forme public void dessine. Toi(Graphics g) Cette classe permet de définir les formes par: un id et leurs coordonnées. Afin de pouvoir les retracer après un rafraîchissement. Elle sera instanciée ds la classe Zone. Graphique "dessine. Toi" appelle ds cet exemple g. draw. Rect; g. fill. Rect ou g. draw. Oval;

class Forme { private int X, Y, id; // position id 1, 2 ou

class Forme { private int X, Y, id; // position id 1, 2 ou 3 public Forme(int x, int y, int i) { X= x; Y = y; id=i; } public void dessine. Toi(Graphics g){ if(id==1) g. draw. Rect(X, Y, 40, 30); if(id==2) g. fill. Rect(X, Y, 40, 30); if(id==3) g. draw. Oval(X, Y, 40, 30); } }

Dessin Array. Liste liste; void ajouter. Liste(Forme d); void redessiner. Liste(Graphics g) void efface();

Dessin Array. Liste liste; void ajouter. Liste(Forme d); void redessiner. Liste(Graphics g) void efface(); Cette classe définit une liste permettant de stocker des instances de la classe Forme. Elle sera instanciée ds la classe Zone. Graphique Chaque objet tracé, ds Zone. Graphique, doit être ajouter à la liste. "redessiner. Liste" permet de retracer les objets stockés ds la liste en appelant la meth dessine. Toi de la classe Forme "efface()" met la liste à vide

class Dessin { private Array. List liste = new Array. List(); public void ajouter.

class Dessin { private Array. List liste = new Array. List(); public void ajouter. Liste(Forme d) { liste. add(d); } public void redessiner. Liste(Graphics g) { for(int i=0; i<liste. size(); i++ ) ((Forme) liste. get(i)). dessine. Toi(g); } public void efface() { liste. clear(); } } // Dessin

Zone. Graphique Dessin dessin; Forme f; void efface(); public void paint(Graphics g); Pr chaque

Zone. Graphique Dessin dessin; Forme f; void efface(); public void paint(Graphics g); Pr chaque clic souris cette classe créée une instance Forme et elle l'ajoute a la liste de l'instance Dessin. Ensuite elle appelle la meth "dessine. Toi" de la classe Forme pr tracer l'objet "efface()" met la liste de l'objet dessin à vide et rafraîchit l'objet graphique en appelant repaint(); La methode paint(Graphics g) est heritée du Panel doit etre refefinie afin de redessiner les objets stockés ds la liste de la classe Dessin: {dessin. redessiner. Liste(g); }

class Zone. Graphique extends Panel { Dessin dessin = new Dessin(); Forme f; Zone.

class Zone. Graphique extends Panel { Dessin dessin = new Dessin(); Forme f; Zone. Graphique(){ this. add. Mouse. Listener(new Mouse. Adapter(){ public void mouse. Pressed(Mouse. Event e) { Graphics g = get. Graphics(); f = new Forme(e. get. X(), e. get. Y(), forme); dessin. ajouter. Liste(f); f. dessine. Toi(g); }}); }//zone. Graphique() void efface(){ dessin. efface(); repaint(); forme=0; } public void paint(Graphics g) {dessin. redessiner. Liste(g); } } //Zone. Graphique Cf. Editeur. Rect 1. java

SWING En 1997 Sun annonce les Java Fondation Classes (JFC) pour la création d’interfaces

SWING En 1997 Sun annonce les Java Fondation Classes (JFC) pour la création d’interfaces graphiques plus élaborées: des composants plus riches en apparence et en fonctionnalités intégré à partir du JDK 1. 1 en tant que package javax. swing. * Pour la plupart des composants AWT, il suffit d’ajouter une "J" au nom des classes des composants awt. Exemple : JButton, JLabel, JText. Field, JMenu. Bar, . . De nouveaux composants: JCombo. Box(au lieu de JList), JScroll. Pane, JOption. Pane (boite de dialogue) etc.

Component (AWT) et JComponent (Swing) Il est possible d’utiliser des objets dérivant de "Component"

Component (AWT) et JComponent (Swing) Il est possible d’utiliser des objets dérivant de "Component" et de "JComponent"dans le même programme mais c’est déconseillé Les événements associés à la fermeture de "JFrame" st implicitement implémentés add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event e){ System. exit(0); } } ); N'est pas indispensable pr les JFrame

Container de Swing Il est indispensable d'ajouter les composants Swing au conteneur (JWindow: JFrame,

Container de Swing Il est indispensable d'ajouter les composants Swing au conteneur (JWindow: JFrame, JDialog, JPanel et JApplet). B 1 import java. awt. *; import javax. swing. *; Container c=this. get. Content. Pane(); JButton b=new JButton("B 1"); c. add(b); …….

Ex: JCombo. Box Création d'une liste de sélection (JCombo. Box) et d'un champ de

Ex: JCombo. Box Création d'une liste de sélection (JCombo. Box) et d'un champ de texte qui affiche les items sélectionnés de la liste (index et label). Les composants et les principales méthodes à utiliser: JCombo. Box(); combo. Box. add. Item(String s); combo. Box. get. Selected. Index(); ((JCombo. Box)e. get. Source()). get. Selected. Item();

Editeur de rectangle, rectangle plein et oval avec les composants Swing Menu de sélection

Editeur de rectangle, rectangle plein et oval avec les composants Swing Menu de sélection du forme à tracé: menu. Forme. add Separator(); Mais il faut remplacer la meth paint du Panel ds la zone graphique par paint. Component() du JPanel

La méthode paint. Component() au lieu de paint - En Swing on utilise la

La méthode paint. Component() au lieu de paint - En Swing on utilise la méthode paint. Component au lieu de la méthode paint de AWT - Pour rafraîchir un affichage il faut appeler la paint. Component de la classe mère qui est ds cet exemple le JPanel Ds Editeur. Rect 2. java, on remplace la methode paint de la zone. Graphique par : public void paint. Component(Graphics g) { super. paint. Component(g); // appelle de la meth. du JPanel dessin. redessiner. Liste(g); }

Fenêtre de dialogue-1 void JOption. Pane. show. Message. Dialog(null, "message", "titre", JOption. Pane. WARNING_MESSAGE);

Fenêtre de dialogue-1 void JOption. Pane. show. Message. Dialog(null, "message", "titre", JOption. Pane. WARNING_MESSAGE); [ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, PLAIN_MESSAGE] 1. 2. 3. 4. le premier paramètre indique la fenêtre "parent" ; le second est le message ; le troisième paramètre est le titre de la fenêtre de dialogue ; le quatrième paramètre est le type de message (icône)

Fenêtre de dialogue-2 JOption. Pane. show. Confirm. Dialog(null, "message", "titre", JOption. Pane. YES_NO_CANCEL_OPTION, INFORMATION_MESSAGE

Fenêtre de dialogue-2 JOption. Pane. show. Confirm. Dialog(null, "message", "titre", JOption. Pane. YES_NO_CANCEL_OPTION, INFORMATION_MESSAGE ); [DEFAULT_OPTION; YES_NO_CANCEL_OPTION OK_CANCEL_OPTION] Retourne int : 0 pr oui 1 pr non et 2 pr annuler ou -1 pr la fermeture Cf. javax. JOption. JDialog. doc pr + de détails Application: création de boite d’info

Split. Pane les 2 composants ds un « split pane » st déposés: du

Split. Pane les 2 composants ds un « split pane » st déposés: du gauche à droite JSplit. Pane. HORIZONTAL_SPLIT en utilisant du haut vers le bas par JSplit. Pane. VERTICAL_SPLIT Syntaxe JSplit. Pane split. Pane. V JSplit. Pane(JSplit. Pane. VERTICAL_SPLIT ); get. Content. Pane(). add( split. Pane. V); split. Pane. V. set. Top. Component( panel 1 ); split. Pane. V. set. Bottom. Component( panel 2 ); = new

Exemple JSplit. Pane /*les 2 composants ds un split pane peuvent etre alignés du

Exemple JSplit. Pane /*les 2 composants ds un split pane peuvent etre alignés du gauche à droite en utilisant JSplit. Pane. HORIZONTAL_SPLIT du haut vers le bas par JSplit. Pane. VERTICAL_SPLIT */ import java. awt. *; import javax. swing. *; class Split. Pane extends JFrame{ JSplit. Pane split. Pane. V, split. Pane. H; JPanel panel 1, panel 2, panel 3; Split. Pane() { set. Title( "Application Split. Pane" ); set. Background( Color. gray ); // appel de fts de creation des 3 panneaux creer. Panel 1(); creer. Panel 2(); creer. Panel 3();

split. Pane. V = new JSplit. Pane( JSplit. Pane. VERTICAL_SPLIT ); get. Content. Pane().

split. Pane. V = new JSplit. Pane( JSplit. Pane. VERTICAL_SPLIT ); get. Content. Pane(). add( split. Pane. V); split. Pane. H = new JSplit. Pane( JSplit. Pane. HORIZONTAL_SPLIT ); split. Pane. V. set. Top. Component( split. Pane. H ); split. Pane. V. set. Bottom. Component( panel 3 ); split. Pane. H. set. Left. Component( panel 1 ); split. Pane. H. set. Right. Component( panel 2 ); }

public void creer. Panel 1(){ panel 1 = new JPanel(); panel 1. set. Layout(

public void creer. Panel 1(){ panel 1 = new JPanel(); panel 1. set. Layout( new Border. Layout() ); panel 1. add( new JButton( "Nord" ), Border. Layout. NORTH ); panel 1. add( new JButton( "Sud" ), Border. Layout. SOUTH ); panel 1. add( new JButton( "Est" ), Border. Layout. EAST ); panel 1. add( new JButton( "Ouest" ), Border. Layout. WEST ); panel 1. add( new JButton( "Centre" ), Border. Layout. CENTER ); } public void creer. Panel 2(){ panel 2 = new JPanel(); panel 2. set. Layout( new Flow. Layout() ); panel 2. add( new JButton( "B 1" ) ); panel 2. add( new JButton( "B 2" ) ); panel 2. add( new JButton( "B 3" ) ); } public void creer. Panel 3(){ panel 3 = new JPanel(); panel 3. set. Layout( new Border. Layout() ); panel 3. add( new JLabel( "Notes: " ), Border. Layout. NORTH ); panel 3. add( new JText. Area(), Border. Layout. CENTER ); }

public static void main( String args[] ) { Split. Pane fen = new Split.

public static void main( String args[] ) { Split. Pane fen = new Split. Pane(); fen. set. Size(400, 400); fen. set. Visible( true ); } }// classe principale

Interception de touches du clavier composant. request. Focus(); le composant demande le focus afin

Interception de touches du clavier composant. request. Focus(); le composant demande le focus afin de recevoir l'événement correspondant aux frappes des touches. L'adaptateur d'evenements est: add. Key. Listener(new Key. Adapter(){ public void key. Typed(Key. Event evt){ if (evt. get. Key. Char() == 'a') …. . } }) ; Chaque composant dispose la methode paint. Component(Graphics g) qui le dessine. On peut la redéfinir.

Exemple JPannel qui contient des Jlabel definissant les indications JPannel qui contient l'oval :

Exemple JPannel qui contient des Jlabel definissant les indications JPannel qui contient l'oval : class Dessin extends JPanel{ public void paint. Component(Graphics g) {g. fill. Oval(20, 100, 100); } Ds le constructeur de la fenetre on implemente l'adaptateur: add. Key. Listener(new Key. Adapter(){ public void key. Typed(Key. Event evt){ int code = evt. get. Key. Code(); if (evt. get. Key. Char()== 'r') … cp. repaint(); La méthode repaint() pour forcer le rafraîchissement de la zone graphique du composant lorsque l’affichage est modifié. Elle appelle la methode public void paint. Component(Graphics g){…. }

Code import javax. swing. *; import java. awt. event. *; class Dessin extends JPanel{

Code import javax. swing. *; import java. awt. event. *; class Dessin extends JPanel{ public void paint. Component(Graphics g){ g. fill. Oval(20, 100, 100); }} class Essai. Touche extends JFrame{ Dessin dessin = new Dessin(); JLabel label. R = new JLabel(" touche r : disque rouge"); JLabel label. B = new JLabel(" touche b : disque bleu"); JLabel label. V = new JLabel(" touche v : disque vert"); JLabel label. E = new JLabel(" touche e : effacer"); JLabel label 0 = new JLabel("touche 0 : disque en blanc"); JPanel indications = new JPanel(); // pr grouper les JLabel Container cp;

Suite Essai. Touche(){ cp= this. get. Content. Pane(); indications. set. Layout(new Grid. Layout(3, 2));

Suite Essai. Touche(){ cp= this. get. Content. Pane(); indications. set. Layout(new Grid. Layout(3, 2)); indications. add(label. R); indications. add(label. B); indications. add(label. V); indications. add(label. E); indications. add(label 0); cp. set. Layout(new Border. Layout()); cp. add(indications, Border. Layout. NORTH); cp. add(dessin, Border. Layout. CENTER);

Suite add. Key. Listener(new Key. Adapter(){ public void key. Typed(Key. Event evt){ int code

Suite add. Key. Listener(new Key. Adapter(){ public void key. Typed(Key. Event evt){ int code = evt. get. Key. Code(); if (evt. get. Key. Char()== 'r') dessin. set. Foreground(Color. red); else if (evt. get. Key. Char() == 'b') dessin. set. Foreground(Color. blue); else if (evt. get. Key. Char() == 'v') dessin. set. Foreground(Color. green); else if (evt. get. Key. Char() == 'e') dessin. set. Foreground(dessin. get. Background()); else if (evt. get. Key. Char()== '0') dessin. set. Foreground(Color. WHITE); cp. repaint(); } // key. Typed }); // addkey. Listener } // constructeur

Suite public static void main(String[] argv){ Essai. Touche essai. Touche=new Essai. Touche(); // pr

Suite public static void main(String[] argv){ Essai. Touche essai. Touche=new Essai. Touche(); // pr recuperer le Focus essai. Touche. set. Size(400, 400); essai. Touche. set. Visible(true); essai. Touche. request. Focus(); } }

Une applet ds une fenêtre /*gestion d'événements d'un bouton, Text. Area et Text. Field

Une applet ds une fenêtre /*gestion d'événements d'un bouton, Text. Area et Text. Field Objectif récupérer le clic du bouton, saisie de lettre et de texte (touche Entree) ds un Text. Area +Gestion de la fermeture de la fenêtre insertion de l'applet ds une fenêtre (pas de besoin du code HTML) */ //le code de l'applet est celui écrit ds "Test. Evt. java" // Applet. Sans. HTML. java import java. awt. *; import java. applet. *; import java. awt. event. *;

// classe principale class Applet. Sans. HTML extends Frame{ public static void main(String[] args){

// classe principale class Applet. Sans. HTML extends Frame{ public static void main(String[] args){ Frame fen=new Frame("Test. Evt. . . "); Mon. Applet t=new Mon. Applet(); t. init(); fen. add(t); fen. set. Size(400, 400); fen. set. Resizable(false); // gestion fermeture fenetre fen. add. Window. Listener(new Window. Adapter(){ public void window. Closing(Window. Event e){ System. exit(0); }}); fen. set. Visible(true); } // main } // Applet. Sans. HTML

class Mon. Applet extends Applet{ Button test. Button; Text. Field test. Text. Field; Text.

class Mon. Applet extends Applet{ Button test. Button; Text. Field test. Text. Field; Text. Area test. Text. Area; public void init(){ set. Layout(new Flow. Layout()); test. Button=new Button("BUTTON"); add(test. Button); test. Button. add. Action. Listener(new Action. Listener(){ public void action. Performed(Action. Event e){ test. Text. Area. append("Bouton cliquen"); }}); test. Text. Field=new Text. Field("TEXTFIELD", 20); add(test. Text. Field); test. Text. Field. add. Text. Listener( new Text. Listener(){ public void text. Value. Changed(Text. Event e) { test. Text. Area. append(test. Text. Field. get. Text()+" : 1 lettre ajoute n"); } });

test. Text. Area= new Text. Area(". . . ", 30); add(test. Text. Area); test.

test. Text. Area= new Text. Area(". . . ", 30); add(test. Text. Area); test. Text. Field. add. Action. Listener( new Action. Listener(){ public void action. Performed(Action. Event e) { test. Text. Area. append(test. Text. Field. get. Text()+" est entre n"); } }); } // init } // la classe Mon. Applet