Redessiner. Chapitre 9. Dessiner avec Java. Mé thodes repaint. Plan. paint vs paintcomponent. Introduction. paintcomponent. Dessiner dans un composant



Documents pareils
Développement Logiciel

Programmation Orientée Objet

Interfaces graphiques avec l API Swing

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Introduction au langage Java

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Auto-évaluation Programmation en Java

Desktop Intégration. Rémi Forax

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Solutions du chapitre 4

TUTORIEL PAINTPOT. Louise Henninot - Anne- Cécile Patou - Julie Roquefort

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Objets et Programmation. origine des langages orientés-objet

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Programmer en JAVA. par Tama

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation stochastique

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Adobe Illustrator Logiciel de dessin vectoriel et de Cartographie Assistée par Ordinateur

My Custom Design ver.1.0

GIMP. Le traitement d'images libre INSTALLATION SUR WINDOWS

TD/TP PAC - Programmation n 3

Introduction au langage C

Java 7 Les fondamentaux du langage Java

Les algorithmes de base du graphisme

Analyse de sécurité de logiciels système par typage statique

Chapitre V. Les classes : Object, Vector, etc.

INITIATION AU LANGAGE JAVA

L'essentiel de Java et de l'objet

{less} Guide de démarrage

Environnements de développement (intégrés)

as Architecture des Systèmes d Information

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Web Tier : déploiement de servlets

TD/TP PAC - Programmation n 3

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Certificat Big Data - Master MAthématiques

Réalisation de cartes vectorielles avec Word

INF 321 : mémento de la syntaxe de Java

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Programmation Objet I

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

LOG4430 : Architecture logicielle et conception avancée

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

1. La notion de cascade

Logiciel de gestion de caisse et d ardoises

Machines virtuelles fonctionnelles (suite) Compilation ML Java

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

UML. Diagrammes de classes (suite) Delphine Longuet.

.. CSS. Damien Nouvel. Damien Nouvel (Inalco) CSS 1 / 15

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

TP : Gestion d une image au format PGM

Tp 1 correction. Structures de données (IF2)

Synchro et Threads Java TM

Corrigé des exercices sur les références

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Corrigés des premiers exercices sur les classes

Conventions d écriture et outils de mise au point

Chapitre 10. Les interfaces Comparable et Comparator 1

Héritage presque multiple en Java (1/2)

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Généralités sur le Langage Java et éléments syntaxiques.

Programmation système I Les entrées/sorties

TP1 : Initiation à Java et Eclipse

Java 1.5 : principales nouveautés

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Introduction : les processus. Introduction : les threads. Plan

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Remote Method Invocation Les classes implémentant Serializable

Du Premier au Second Degré

Cours: Administration d'une Base de Données

CPR Informatique. (poste 3159 ou 3164) Septembre 2002

Présentation du langage et premières fonctions

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Codage d information. Codage d information : -Définition-

Aide GeoGebra. Manuel Officiel 3.2. Markus Hohenwarter et Judith Hohenwarter

Langage Java. Classe de première SI

2. Comprendre les définitions de classes

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Education Delivery Intelligent Tool

PR OC E D U RE S D E B A S E

PROGRAMMATION PAR OBJETS

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Opérations de base sur ImageJ

RIE LE RENDU THEO. 2 e trim ÉTAPE DE FINITION BOÎTE DE DIALOGUE. remarques

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

ActoPalm 1.0 b. Logiciel d'aide au relevé d'observation in situ sur Organiseurs PalmOS Compatibles. Alain Kerguelen, mai 2002

Transcription:

Redessiner Chapitre 9 Dessiner avec Java Les méthodes précédentes sont appelées : lorsque le systè me le juge nécessaire le composant est rendu visible le composant a changé de taille un autre composant a bougé et a rendu visible une portion du composant => TestAutomaticRepaint.java Lorsque l application le juge nécessaire via un appel à une méthode repaint 16/03/04 Dessiner avec Java page 1 16/03/04 Dessiner avec Java page 5 Introduction Classe Graphics Classe Graphics2D Plan Mé thodes repaint repaint() redessine tout le composant repaint(long milliseconds) demande que le composant soit redessine avant milliseconds repaint (int x, int y, int width, int height) redessine la portion du composant 16/03/04 Dessiner avec Java page 2 16/03/04 Dessiner avec Java page 6 paint vs paintcomponent Introduction Swing en fait implémente paint pour tout objet JComponent en faisant appel à : paintcomponent paintborder paintchildren Il ne faut pas chercher (en général) à redéfinir paintborder et paintchildren. 16/03/04 Dessiner avec Java page 3 16/03/04 Dessiner avec Java page 7 Dessiner dans un composant Pour tout composant, il est possible de définir comment celui-ci doit être dessiné en redéfinissant une méthode. AWT public void paint(graphics g) Swing public void paintcomponent(graphics g) paintcomponent public class MyPanel extends JPanel protected void paintcomponent(graphics g) // Let UI delegate paint first including // background filling, if I'm opaque) super.paintcomponent(g); // paint my contents next... 16/03/04 Dessiner avec Java page 4 16/03/04 Dessiner avec Java page 8

Dessiner incrémentalement Redessiner (systé matiquement) tout un composant perte de temps scintillement possible Il est préférable : d utiliser la mé thode repaint(x,y,width,height) de récupérer un contrô leur graphique et de l utiliser d utiliser un timer Exemple Pour redessiner toutes les 20ms un composant donné, on écrira : Timer t = new Timer(20, new ActionListener() public void actionperformed(actionevent e) composant.repaint(); ); 16/03/04 Dessiner avec Java page 9 16/03/04 Dessiner avec Java page 13 Récupérer un contrô leur graphique Il suffit d appeler la méthode getgraphics (définie dans la classe Component). On peut alors utiliser ce contrô leur. Toutefois, les modifications apportées au graphisme sont perdues (à moins qu elles ne soient gérées) lors d un nouveau paint => TestControleur.java Classe Graphics 16/03/04 Dessiner avec Java page 10 16/03/04 Dessiner avec Java page 14 Relâ cher un contrô leur graphique Un contrô leur graphique peut être obtenu : automatiquement : argument des méthodes paint ou paintcomponent À la demande : méthode getgraphics Dans le premier cas, il est relâ ché automatiquement à la fin de la méthode Dans le second cas, il faut le relâ cher avec la méthode dispose. Classe Graphics Propose un ensemble de fonctionnalité s simple mais limité. Les proprié té s du controleur sont dé finies par : void setcolor(color c) void setfont(font font) void setpaintmode() void setxormode(color c1) void setclip(int x, int y, int width, int height) 16/03/04 Dessiner avec Java page 11 16/03/04 Dessiner avec Java page 15 Utiliser un Timer Un Timer permet d effectuer une action à intervalle régulier. Il suffit d enregistrer un ActionListener auprè s de lui. On peut donc redessiner tout un composant de façon réguliè re. Modes de dessin PaintMode : mode (par défaut) qui permet de remplacer les pixels existants par ceux qui sont tracé s. XORMode : mode qui permet de combiner les pixels existants avec ceux qui sont tracé s. on utilise en général la couleur de fond à l appel un second tracé efface toujours le précé dent => TestXORMode.java 16/03/04 Dessiner avec Java page 12 16/03/04 Dessiner avec Java page 16

Clipping Toute opération de dessin en dehors de la clipping area est sans effet. A comparer avec la méthode repaint prenant les mêmes arguments. TestClipping.java Obtenir un contrô leur Graphics2D De façon automatique : protected void paintcomponent(graphics g) super.paintcomponent(g); Graphics2D g2d = (Graphics2D)g; // dessiner avec g2d A la demande : Graphics2D g2d = (Graphics2D)getGraphics(); 16/03/04 Dessiner avec Java page 17 16/03/04 Dessiner avec Java page 21 Fonctions de dessin Fonctions principales drawrectangle drawroundrect draw3drect drawpolygon drawoval drawarc drawline drawimage fillrectangle fillroundrect filldrect fillpolygon filloval fillarc drawchars drawstring void draw(shape s) Dessiner une forme void fill(shape s) Remplir une forme Et shape? 16/03/04 Dessiner avec Java page 18 16/03/04 Dessiner avec Java page 22 Shape Classe Graphics2D Une classe générale qui représente toute forme. Cette classe abstraite possè de de nombreuses sous-classes. Chaque sous-classe représente un type de formes dont certaines pouvaient être dessinées directement avec Graphics. 16/03/04 Dessiner avec Java page 19 16/03/04 Dessiner avec Java page 23 Utiliser Graphics2D Formes é lé mentaires Il est possible de manipuler des objets Graphics2D pour toute version de Java compatible Java 2D. Pour utiliser ces objets, il suffit d effectuer un transtypage car de nombreuses fonctions de Java manipule des références Graphics. Or Graphics2D est une sous-classe de Graphics et pour toute version Java compatible Java 2D, les objets retourné s sont issus de cette sous-classe. Shape QuadCurve2D Line2D CubicCurve2D Arc2D RectangularShape Ellipse2D Rectangle2D RoundRectangle2D 16/03/04 Dessiner avec Java page 20 16/03/04 Dessiner avec Java page 24

Formes 2D à virgule flottante Avec Java 2D, il est possible effectuer des conversions entre une mesure naturelle (en mè tres par exemple) et une mesure en pixels. Pour cette raison, les coordonnées sont données en virgule flottante, c est à dire en float ou double. Lignes Graphics2D g2 = (Graphics2D)g: Point2D p1 = Point2D.Double(100,0); Point2D p2 = Point2D.Double(0,300); Line2D line = new Line2D.Double(p1,p2); g2.draw(line); 16/03/04 Dessiner avec Java page 25 16/03/04 Dessiner avec Java page 29 Consé quence Rectangles La plupart des classes représentant des formes possè dent deux sous-classes statiques. L une permet d utiliser des coordonnées de type float L autre permet d utiliser des coordonnées de type double. 16/03/04 Dessiner avec Java page 26 g2.setstroke(new BasicStroke(2.0f)); Rectangle2D r = new Rectangle2D.Double(0,0, g2.draw(r); g2.setpaint(color.green); g2.fill(r); float[] dash = new Float(10.0f,10.0f; g2.setstroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER,10.0f,dash,0.0f); RoundRectangle2D r = new RoundRectangle2D.Double(0,0, 180,50,5,5); g2.draw(r); 16/03/04 Dessiner avec Java page 30 Point2D Point2D qui n est pas sous-classe de Shape utilise aussi cette technique. Pour créer un point, il faut écrire : Point2D p = new Point2D.Float(5.0f,10.0f); ou encore : Point2D p = new Point2D.Double(5.0,10.0); Stroke Il s agit du trait utilisé. Les caractéristiques les plus intéressantes sont : la largeur du trait employé (premier argument) le motif du trait (cinquiè me argument) Le motif du trait correspond à un tableau donnant alternativement la largeur du tiret puis la largeur d un espace etc 16/03/04 Dessiner avec Java page 27 16/03/04 Dessiner avec Java page 31 Line2D Pour Line2D sous-classe de Shape, on écrira : Line2D line = new Line2D.Float(p1,p2); ou encore : Line2D line = new Line2D.Double(p1,p2); où p1 et p2 repré sentent deux points. De même pour les autres sous-classes. 16/03/04 Dessiner avec Java page 28 Ellipses et arcs g2.setstroke(new BasicStroke(1.0f)); Ellipse2D e = new Ellipse2D.Double(0,0, g2.draw(e); g2.setpaint(color.green); g2.fill(e); g2.setstroke(new BasicStroke(8.0f,)); Arc2D a = new Arc2D.Double(0,0, 180,50,90,135,ARC2D.OPEN); g2.draw(a); 16/03/04 Dessiner avec Java page 32

Arcs Exemple 1 Ange de l arc Angle de départ Lors de la construction; on précise : l angle de dé part l angle de l arc le type de fermeture int xs[] = x, x+width, x, x+width; int ys[] = y, y+height, y+height, y; GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD); polygon.moveto(xs[0], ys[0]); for (int i = 1; i < xs.length; i++) polygon.lineto(xs[i], ys[i]); polygon.closepath(); g2.setpaint(color.red); g2.fill(polygon); 16/03/04 Dessiner avec Java page 33 16/03/04 Dessiner avec Java page 37 Courbe quadratique Exemple 2 g2.setstroke(new BasicStroke(4.0f)); QuadCurve2D q = new QuadCurve2D.Double(startX,startY, controlx, controly, stopx, stopy); g2.draw(q); public GeneralPath createpath(int x, int y) GeneralPath path = new GeneralPath(); x2 = x; y2 = y; path.moveto(x, y); x -= 100; path.lineto(x, y); y += 50; path.lineto(x, y); x += 100; path.lineto(x, y); x += 10; y -= 10; x1 = x - 20; y1 = y - 20; path.curveto(x, y, x1, y1, x2, y2); return path; 16/03/04 Dessiner avec Java page 34 16/03/04 Dessiner avec Java page 38 Courbe cubique Remplissage g2.setstroke(new BasicStroke(4.0f)); CubicCurve2D q = new CubicCurve2D.Double(startX,startY, control1x, control1y, control2x, control2y,stopx, stopy); g2.draw(q); Lorsqu on remplit une forme, il est possible d utiliser : un objet Color g2.setpaint(color.pink); un objet GradientPaint g2.setpaint(new GradientPaint(p1,Color.red,p2,Color.blue); un objet TexturePaint g2.setpaint(new TexturePaint(bufferedImagep1,anchor)); 16/03/04 Dessiner avec Java page 35 16/03/04 Dessiner avec Java page 39 GeneralPath GeneralPath, sous-classe de Shape, permet d effectuer un tracé général. On utilise alors les méthodes : moveto lineto quadto curveto closepath Exemple Ellipse2D e = new Ellipse2D.Double(0,0, GradientPaint gp = new GradientPaint(p1,Color.red,p2,Color.white); g2.setpaint(gp); g2.fill(e); 16/03/04 Dessiner avec Java page 36 16/03/04 Dessiner avec Java page 40