Graphical User Interface

Slides:



Advertisements
Présentations similaires
Conception d’IHM en Java
Advertisements

Evénements Java Beans Java RMI
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
Gestion des événements (suite)
Programmation événementielle
Page 1 Les applets Jacques Lonchamp. Page 2 Présentation Une applet est téléchargée à partir dune machine distante qui fournit le code. Ce chargement.
Approfondissement du langage
(Classes prédéfinies – API Java)
F. Voisin : Introduction à Java 1 Introduction à Java - les interfaces - Frédéric VOISIN FIIFO - « Remise à Niveau »
Voisin-Polian : Introduction à Java 1 Introduction à Java - AWT - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Partiel : le sujet Un graphe non-orienté :
contrat Creative Commons Paternité-Pas d'Utilisation Commerciale- Partage des Conditions Initiales à l'Identique.
Vos premiers pas en Swing
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Leçon 3 : Héritage IUP 2 Génie Informatique
Classes locales classes définies à l'intérieur d'un bloc de code,
Par Fabrice Pasquier Cours IV
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
1 1 Université Evry Val d'Essonne Y. Laborde Une calculatrice (sans MVC) fonctionnant sur la base d'un modèle en Java.
Écouteurs de click d'une fenêtre
Python Interfaces graphiques
Langage Oriente Objet Cours 4.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Graphical User Interface (GUI)
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
DESS CCI POO-JAVA TD n°7 exercice n°1
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Multi-Thread Jian-Yun Nie
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Formation Développeur Java Applet et interfaces graphiques avec AWT
COURS DE PROGRAMMATION ORIENTEE OBJET :
Android View, onClick, Activity, Modèle Vue Contrôleur
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Biologie – Biochimie - Chimie
Objectifs À la fin de ce cours, vous serez capables de :
Interfaces Graphiques
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Evénements. Plan Evénements Principes Exemples Adapteur.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Cours 7 Classes locales Clonage Divers: tableaux.
Cours 91 9 Interfaces graphiques avec awt. Cours 92 Plan Introduction : deux bibliothèques graphiques 1.Comment se dessine une fenêtre ?  Un exemple.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
14 La gestion d’événements
Tutorat en bio-informatique
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
POWERPOINT.
© Sofia ZAIDENBERG CNRS Mai Interface utilisateur graphique en Java Construire une interface graphique en Java (suite) adaptateurs d’événements.
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Iterator Design Pattern Alessandro Soro Sylvain Giroux.
Construire une interface graphique en Java
Introduction à la programmation objet avec java
Iup MIAGe 3° année Projet MIAGe Toulouse – Groupe 21 Charte graphique.
Graphical User Interface
 1) Il faut connaître le modèle et son fonctionnement  2) Définir le contrôle que l’on veut faire ouvrir, fermer, afficher, etc.) sur le modèle  3)
Les interfaces de gestion d’événements (la suite).
Programmation mobile: Android
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
PROCESSING Semaine 03. PLAN DE LEÇON Interaction avec un programme Gestion de la souris Gestion du clavier.
Programmation événementielle. Logiciel traditionnel, sans interface utilisateur { Lire les entrées d’un fichier Effectuer des calculs Écrire les sorties.
Java Swing. Principes de base  Des composants graphiques (exemple: JFrame, JButton …)  Hiérarchie de classes  Des événements et les actions à effectuer.
Transcription de la présentation:

Graphical User Interface Dessiner avec JAVA Contexte Graphique Rafraîchissement Cours de P. Genoud

Adaptateurs d’événements Dessin des segments de droite Gestion des événements souris Déplacement de la souris sur la zone de dessin met à jour les coordonnées du curseur dans la barre d’état MOUSE_MOVED, MOUSE_DRAGGED type d ’événement MouseEvent source : zone de dessin interface d ’écoute : MouseListener récepteur : zone de dessin Appuyer sur un bouton de la souris (MOUSE_PRESSED) définit le début d ’une droite Relacher le bouton de la souris (MOUSE_RELEASED) définit la fin de la droite < interface > MouseListener void mouseClicked(MouseEvent) void mouseEntered(MouseEvent) void mouseExited(MouseEvent) void mousePressed(MouseEvent) void mouseReleased(MouseEvent) Comme pour la fermeture de la fenêtre seule deux des méthodes de l ’interface nous intéressent

Adaptateurs d’événements Dessin des segments de droite import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ZoneGraphique extends JPanel implements MouseMotionListener { private BarreEtat be; public ZoneGraphique(BarreEtat be) { setBackground(Color.white); setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); this.be = be; addMouseMotionListener(this); } public void mouseMoved(MouseEvent e) { be.afficheCoord(e.getX(),e.getY()); public void mouseDragged(MouseEvent e) { } // ZoneGraphique Pour ne pas avoir à définir des méthodes inutiles possibilité d ’utiliser un adaptateur d ’événements : MouseAdapter import java.awt.event.*; public class GestionnaireClic extends MouseAdapter { ZoneGraphique zone; public GestionnaireClic(ZoneGraphique z) { zone = z; } public void mousePressed(MouseEvent e) zone.initieDroite(e.getX(),e.getY()); public void mouseReleased(MouseEvent e) zone.termineDroite(e.getX(),e.getY()); addMouseListener(new GestionnaireClic(this)); public void initieDroite(int x, int y) { be.afficheMessage(« Relacher pour dessiner la droite »); // on complétera ensuite } public void termineDroite(int x, int y) { be.afficheMessage(« Cliquer pour initier une droite »);

Adaptateurs d’événements Dessin des segments de droite import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ZoneGraphique extends Jpanel implements MouseMotionListener { private BarreEtat be; public ZoneGraphique(BarreEtat be) { setBackground(Color.white); setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); this.be = be; addMouseMotionListener(this); } public void initieDroite(int x, int y) { be.afficheMessage(« Relacher pour dessiner la droite »); // on complétera ensuite public void termineDroite(int x, int y) { be.afficheMessage(« Cliquer pour initier une droite »); ... } // ZoneGraphique Avec une classe interne (inner classe) anonyme addMouseListener( ); new MouseAdapter() { public void mousePressed(MouseEvent e) { initieDroite(e.getX(),e.getY()); } public void mouseReleased(MouseEvent e) termineDroite(e.getX(),e.getY()); L ’instance de la classe anonyme a implicitement accès à l ’instance de la classe externe qui (c.a.d. l ’instance) a provoqué sa création : en conséquence elle a accès aux membres de la classe externe this.ZoneGraphique

Dessiner avec Java Dessin des segments de droite import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ZoneGraphique extends Jpanel implements MouseMotionListener { private BarreEtat be; public ZoneGraphique(BarreEtat be) { setBackground(Color.white); setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); this.be = be; addMouseMotionListener(this); } public void initieDroite(int x, int y) { be.afficheMessage(« Relacher pour dessiner la droite »); // on complétera ensuite public void termineDroite(int x, int y) { be.afficheMessage(« Cliquer pour initier une droite »); ... } // ZoneGraphique addMouseListener( ); new MouseAdapter() { public void mousePressed(MouseEvent e) { initieDroite(e.getX(),e.getY()); } public void mouseReleased(MouseEvent e) termineDroite(e.getX(),e.getY()); Comment dessiner avec Java ? // on complétera ensuite // on complétera ensuite

Dessiner avec Java la classe Graphics Ici le support du dessin représenté par une instance de la classe JPpanel avec java.awt dans la plupart des cas il s’agit d ’une instance de la classe Canvas Il faut des outils pour dessiner : primitives géométriques (droites, cercles, rectangles …) gestion des attributs de tracé (couleur du trait, couleur de remplissage, polices de caractères …) Ces outils sont représentés en Java par la classe Graphics du package java.awt Object Graphics The Graphics class is the abstract base class for all graphics contexts that allow an application to draw onto components that are realized on various devices, as well as onto off-screen images. A Graphics object encapsulates state information needed for the basic rendering operations that Java supports. Classe abstraite : les instances de cette classe sont fournies à la demande par le système d ’exploitation qui grâce à la machine virtuelle instanciera une sous-classe de Graphics spécifique à la plate-forme utilisée Graphics2D Introduite dans la plateforme Java 2 avec l ’API Java2D fournis des possibilités de dessin beaucoup plus élaborées This Graphics2D class extends the Graphics class to provide more sophisticated control over geometry, coordinate transformations, color management, and text layout. This is the fundamental class for rendering 2-dimensional shapes, text and images on the Java(tm) platform

Dessiner avec Java la classe Graphics2D Démonstration des possibilités de Graphics2D programme de démonstration dans $JAVA_HOME/demo/jfc/JAVA2D/Java2Demo.jar

Dessiner avec Java Dessin des segments de droite Repère graphique X y type d ’événement MouseEvent Appuyer sur un bouton de la souris (MOUSE_PRESSED) définit le début d ’une droite Relacher le bouton de la souris (MOUSE_RELEASED) définit la fin de la droite x y ? ? x y 150 50 250 110 Coordonnées position de la souris Exprimées dans le repère de la source de l ’événement : le JPanel

Dessiner avec Java Dessin des segments de droite import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ZoneGraphique extends Jpanel implements MouseMotionListener { private BarreEtat be; public ZoneGraphique(BarreEtat be) { setBackground(Color.white); setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); this.be = be; addMouseMotionListener(this); addMouseListener( new MouseAdapter() { ... } ); } public void initieDroite(int x, int y) { be.afficheMessage(« Relacher pour dessiner la droite »); public void termineDroite(int x, int y) { be.afficheMessage(« Cliquer pour initier une droite »); ... } // ZoneGraphique int xInit, yInit; xInit = x; yInit = y; lorsque le bouton de la souris est pressé : mémoriser le début d ’un nouveau segment lorsque le bouton de la souris est relaché : Graphics g = this.getGraphics(); 1) récupérer le contexte graphique associé au JPanel g.drawLine(xInit,yInit,x,y); 2) Utiliser l ’objet Graphics pour effectuer le dessin

Dessiner en Java « rafraichissement » du dessin Problème de réaffichage après que la fenêtre ait été masquée, redimensionnée… GO 1 Zone non rafraichie 2 Application seule ne peut pas décider du moment où elle doit être rafraîchie Le système ne prend pas en charge seul le rafraichissement averti uniquement l ’application qu’elle doit se redessiner (en lui indiquant quel est son rectangle invalide) à la charge de celle-ci de se redessiner 3

Dessiner en Java « rafraichissement » du dessin Chaque composant graphique possède une méthode qui définit comment il doit se dessiner public void paint(Graphics g) pour les composants awt public void paintComponent(Graphics g) pour les composants swings Evidemment pour les composants standards (fenêtre, boutons, …) il est inutile de définir comment ils doivent s ’afficher une fenêtre affichera son cadre et son fond puis affichera tout les composants qu ’elle contient un conteneur affichera son fond puis affichera recursivement tous les composants qu ’il contient … Mais dès que l’application gère ses propres graphiques via un contexte graphique (objet Graphics) elle devra se soucier de leur rafraichissement

Dessiner en Java « rafraichissement » du dessin Redessiner les segments de droite disparus il faut stocker les informations pour afficher à nouveau tous les segments déjà dessinés classes SegmentDroite et Dessin import java.util.*; import java.awt.*; public class Dessin { private List lesDroites = new Vector(); public void ajouterDroite(SegmentDroite d) { lesDroites.add(d); } public void dessineToi(Graphics g) { for (Iterator it=lesDroites.iterator(); it.hasNext();) { SegmentDroite d = (SegmentDroite) it.next(); d.dessineToi(g); public void efface() { lesDroites.clear(); public void defaire() { if (! lesDroites.isEmpty()){ lesDroites.remove(lesDroites.lastElement()); } // Dessin import java.awt.*; public class SegmentDroite { private int xInit, yInit, xFin, yFin; private Color couleur; public SegmentDroite(int xi, int yi, int xf, int yf, Color c) { xInit = xi; yInit = yi; xFin = xf; yFin = yf; couleur = c; } public void dessineToi(Graphics g) { g.setColor(couleur); g.drawLine(xInit, yInit,xFin,yFin);

Dessiner en Java « rafraichissement » du dessin Redessiner les segments de droite disparus import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ZoneGraphique extends Jpanel implements MouseMotionListener { private BarreEtat be; private int xInit, yInit; public ZoneGraphique(BarreEtat be) { ... } public void initieDroite(int x, int y) { be.afficheMessage(« Relacher pour dessiner la droite »); xInit = x; yInit =y; public void termineDroite(int x, int y) { be.afficheMessage(« Cliquer pour initier une droite »); Graphics g = this.getGraphics(); g.drawLine(xInit,yInit,x,y); } // ZoneGraphique private Dessin dessin = new Dessin(); Rajout d ’un objet dessin pour mémoriser les segments dessinés Mémorisation des nouveaux objets tracés SegmentDroite droite = new SegmentDroite(x,y,xInit,yInit,couleurCourante); dessin.ajouterDroite(droite); droite.dessineToi(g); public void paintComponent(Graphics g) { super.paintComponent(g); dessin.dessineToi(g); } Redéfinition de la méthode paintComponent pour gérer la réaffichage

Dessiner en Java rafraichissement du dessin import java.awt.event.*; import java.awt.*; public class BarreOutils extends JPanel { public BarreOutils(final ZoneDessin zd) { ... JButton bDefaire = new JButton("Défaire"); this.add(bDefaire); JButton bEffacer = new JButton("Tout effacer"); this.add(bEffacer); bDefaire.addActionListener( ); bEffacer.addActionListener( } new ActionListener() { public void actionPerformed(ActionEvent e) { zd.efface(); zd.defaire(); récepteurs : utilisation de classes anonymes dans le constructeur de la Barre d ’Outils Efface toute la zone de dessin Annule le dernier tracé type d ’événement ActionEvent source les JButton interface d ’écoute ActionListener

1) Modification de l ’objet mémorisant le dessin import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ZoneGraphique extends Jpanel implements MouseMotionListener { private BarreEtat be; private int xInit, yInit; Dessin dessin new Dessin(); public ZoneGraphique(BarreEtat be) { ... } public void initieDroite(int x, int y) { public void termineDroite(int x, int y) { public void paintCompoent(Graphics g) { } // ZoneGraphique Prise en compte des opérations défaire et effacer sur la zone de dessin public void defaire() { dessin.defaire(); } 1) Modification de l ’objet mémorisant le dessin 2) réaffichage de la zône de dessin il faut prévenir l ’application que le dessin a changé et qu ’il faut rafraîchir le composant repaint(); méthode repaint() se charge de rappeler la méthode d ’affichage du composant (paint ou paintComponent) avec le bon contexte graphique public void efface() { dessin.efface(); repaint(); }