badr benmammar bbm@badr-benmammar.com applet et interfaces graphiques avec awt

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

If you can't read please download the document

Post on 04-Apr-2015

109 views

Category:

Documents

2 download

Embed Size (px)

TRANSCRIPT

  • Page 1
  • Badr Benmammar bbm@badr-benmammar.com Applet et interfaces graphiques avec AWT
  • Page 2
  • Plan Applet Applet Interactive : couteurs Interfaces graphiques avec AWT Composants simples Button, Label, TextField, Checkbox, List, Composants conteneurs Frame et Panel Gestion des vnements BorderLayout FlowLayout GridLayout
  • Page 3
  • Applet : dessiner en JAVA import java.awt.Graphics ; import java.applet.Applet; public class Prog11 extends Applet { public void paint (Graphics g) { g.drawLine (10, 30, 200, 30); g.drawRect (20, 40, 100, 50); g.drawOval (140, 40, 50, 50); g.drawString ("bonjour !", 10, 120); } } applet Prog11 Une applet est un petit programme Java destin tre tlcharg et excut par un navigateur internet. Les lignes de la classe : Importer les packages graphique et applet. Notre classe hrite de la classe Applet : il suffit de re-dfinir la mthode paint en utilisant des mthodes de dessin de la classe Graphics. drawLine = dessiner une ligne du point (10,30) au point (200,30). Les lignes du fichier html : Une applet (une fois compile) doit tre appele dans un fichier html. Puis, pour tre excute, le fichier html sera visualis dans un navigateur ou dans l'outil AppletViewer. 400 et 300 seront les dimensions en pixel (respectivement largeur, hauteur) de la zone graphique de l'applet. Les points (pixel) composant la fentre sont reprs relativement au coin gauche haut de coordonnes (0,0). Le point de coordonnes (x,y) est plac x points du bord gauche et y points du haut.
  • Page 4
  • Applet : dessiner en JAVA Excution: appletviewer dessin.html
  • Page 5
  • import java.awt.Graphics; import java.awt.Color; import java.applet.Applet; public class Prog12 extends Applet { public void init( ) { setSize(220,120); setForeground(Color.red); setBackground(Color.white); } public void paint(Graphics g) { g.drawLine(10, 30, 200, 30); g.fillRect(20, 40, 100, 50); g.setColor(Color.blue); g.drawOval(140, 40, 50, 50); g.drawString("texte dessine", 10, 60); } Applet : dessiner en JAVA
  • Page 6
  • import java.awt.Graphics; import java.awt.Color; import java.applet.Applet; public class Prog12 extends Applet { public void init( ) { setSize(220,120); setForeground(Color.red); setBackground(Color.white); } public void paint(Graphics g) { g.drawLine(10, 30, 200, 30); g.fillRect(20, 40, 100, 50); g.setColor(Color.blue); g.drawOval(140, 40, 50, 50); g.drawString("texte dessine", 10, 60); } Applet : dessiner en JAVA La mthode paint reoit le contexte graphique par dfaut. La mthode init est appele une seule fois la cration de l'applet. Initialisation de l'applet : modification de sa taille, et des couleurs de fond et de dessin.
  • Page 7
  • Applet : dessiner en JAVA Une Applet ne possde pas de mthode main() mais une ou plusieures mthodes parmi les mthodes init(), start(), stop(), destroy() ou paint() hrites de la super-classe Applet : init() est lance par le Navigateur ds que le chargement de l'applet est termin. start() est lance aprs init() et chaque re-chargement de la page html. paint() est lance chaque fois que l'applet est rendue visible; cette mthode peut rcuprer le paramtre Graphics utile pour dessiner. stop() est lance quand le navigateur change de page ou quand l'applet se termine ou avant destroy(). destroy() est lance la fermeture du navigateur.
  • Page 8
  • Dessiner des Rectangles import java.awt.Graphics; public class Rectangle5 { double x, y, largeur, hauteur; Rectangle5 (double valX, double valY, double valL, double valH) { x = valX; y = valY; largeur = valL; hauteur = valH; } void dessiner(Graphics g) { g.drawRect((int)x, (int)y, (int)largeur, (int)hauteur); } import java.awt.Graphics; import java.applet.Applet; import java.awt.Color; public class Prog31 extends Applet { public void init( ) { setSize(220,180); setForeground(Color.red); setBackground(Color.white); } public void paint (Graphics g) { Rectangle5 r1, r2,r3; r1 = new Rectangle5(60,40,45,45); r2 = new Rectangle5(20,90,60,40); r3 = new Rectangle5(85,90,60,40); r1.dessiner(g); r2.dessiner(g); r3.dessiner(g); } }
  • Page 9
  • Affichage de treillis: croisement de lignes import java.awt.Graphics; import java.applet.Applet; public class Prog13 extends Applet { public void paint (Graphics g) { int x, y, t, i; x=30; y=40; t=140; for (i=0; i
  • Utiliser les valeurs modifies de TextField import java.awt.TextField; import java.awt.Label; import java.applet.Applet; import java.awt.Color; public class Prog49 extends Applet { private TextField valeurR, valeurV, valeurB; private Label monLabel; public void init ( ) { monLabel = new Label ("intensit couleur [0-255]"); add (monLabel); Delegue4 monDelegue= new Delegue4 (this); add (new Label ("R:")); valeurR = new TextField ("255",3); add (valeurR); valeurR.addActionListener (monDelegue); add (new Label ("V:")); valeurV = new TextField ("255",3); add (valeurV); valeurV.addActionListener (monDelegue); add (new Label ("B:")); valeurB = new TextField ("255",3); add (valeurB); valeurB.addActionListener (monDelegue); } private int convertir (String intensite) { int val= (new Integer(intensite)).intValue(); if (val 255) return 255; else return val; } public void changeLabel ( ) { int r = convertir (valeurR.getText()); int v = convertir (valeurV.getText()); int b = convertir (valeurB.getText()); monLabel.setBackground (new Color(r,v,b)); }} Un TextField envoie aussi un vnement ActionEvent lorsque la modification du texte est confirme par la frappe de la touche "entre" le texte d'un TextField est rcupre par la mthode getText(). Les couleurs peuvent tre cres en prcisant les intensits RVB (rouge, vert, bleu) sur 8 bits chacune donc un entier entre 0 et 255.
  • Page 55
  • Utiliser les valeurs modifies de TextField import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Delegue4 implements ActionListener { private Prog49 monApplet; public Delegue4 (Prog49 monApp) { monApplet = monApp; } public void actionPerformed (ActionEvent event) { monApplet.changeLabel ( ); }
  • Page 56
  • ActionListener Les vnements sont des actions ou des effets indirects d'action de l'utilisateur du GUI (Interface Graphique Utilisateur) : clic de souris, frappe de touche, fentre masque par une autre,...qu'il faut grer en mettant en place un "couteur" de l'vnement souhait sur le composant graphique considr, puis dfinir le comportement (les instructions excuter, le Handler d'vnement) lorsque l'vnement surviendra. ActionListener est une interface pour couter et traiter les ActionEvents. Par exemple, bouton.addActionListener (composant) met un couteur (d'ActionEvent) sur le bouton, le "Handler" sera assure au niveau du composant dsign qui implmente l'ActionListener; pour un bouton, l'ActionEvent est provoque par un clic de souris (bouton enfonc puis relch). removeActionListener(ActionListener couteur) supprime un "couteur" d'vnement. La classe qui implmente l'interface ActionListener doit dfinir la mthode : public void actionPerformed(ActionEvent e) {... qui est le "Handler" getActionCommand() est une mthode de ActionEvent rcupre le nom de la commande d'action associ au composant par exemple un bouton (par dfaut son label).
  • Page 57
  • Evnements des Frames et la classe sige de l'vnement qui est son propre dlgu import java.awt.Label; import java.awt.Frame; import java.awt.event.WindowListener; import java.awt.event.WindowEvent; import java.awt.FlowLayout; public class Prog71 extends Frame implements WindowListener { public static void main(String args[]) { new Prog71(); } public Prog71() { setTitle("Prog71"); setSize(200,100); setLayout(new FlowLayout(FlowLayout.CENTER)); setVisible(true); addWindowListener (this); } public void windowClosing (WindowEvent e) { add (new Label("fini dans 5 secondes !")); pack(); try { Thread.sleep (5000); } catch (InterruptedException ie) { System.exit (1); } setVisible (false); dispose (); System.exit (0); } public void windowOpened(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} }
  • Page 58
  • Lignes de la classe La Frame peut tre le sige de plusieurs vnements WindowEvent : Ouvrir la Frame. La rendre active ou passive. La mettre en icone ou l'inverse. La fermer par le window manager (ou bureau) : windowClosing. La fermer par la mthode dispose() : windowClosed. L'objet Prog71 est le sige d'vnements WindowEvent et est aussi le dlgu (le listener) de cet vnement par l'instruction : addWindowListener(this); La mthode static sleep de la classe Thread attend le nombre de millisecondes indiques dispose est la mthode qui ferme la Frame et toutes ses sous-fentres s'il y a.
  • Page 59
  • Evnements en rsum ComposantActionEvnementInterface d'coute Button, List, MenuItem, TextField, Checkbox, Canvas Slectionner, validerActionEventActionListener TextArea, TextFieldChanger le texteTextEventTextListener FrameOuvrir, fermerWindowEventWindowListener ContainerMouvement et clic de souris, frappe au clavier MouseEvent, MouseMotionEvent, KeyEvent MouseListener, MouseMotionListener, KeyListener
  • Page 60
  • Technique des Adapters import java.awt.Frame; import java.awt.Dimension; import java.awt.Label; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.FlowLayout; public class Prog72 extends Frame { public static void main(String args[]) { new Prog72(); } public Prog72() { setTitle("Prog72"); setSize(200,100); setLayout(new FlowLayout(FlowLayo