bg150.jpg (723 octets) 

Java 2D

 

INTRODUCTION

AFFICHAGE JAVA
Méthode générique
héritée de Java 1.0

Affichage évolué
en Java2D

GRAPHIQUES
VECTORIELS

IMAGES BITMAP

TEXTE ET POLICES
DE CARACTÈRES

IMPRESSION

EXEMPLES

 

WB01624_.gif (281 octets) RETOUR

Introduction

Java 2D: Ensemble de classes destinées à la gestion de l'affichage 2D sous Java 2.

Manipulation de:

  • graphiques vectoriels,
  • images bitmap,
  • texte et polices de caractères,
  • fonctions d'impression,
  • ...

Classes Java2D non regroupées au sein d'un package unique. Complément aux classes préexistantes de l'AWT (Abstract Windows Toolkit).

L'affichage en Java

Une technique générique pour l'affichage héritée de Java 1.0

Surcharge de la méthode void paint(Graphics g) des classes Java de base gérant un affichage (en fait toutes les classes héritant de Component qui est la classe abstraite définissant paint). Les classes développées seront obtenues par dérivation et surcharge de cette méthode pour la gestion de leurs affichages.

Généralement dérivation d'une des deux classes:

  • java.applet.Applet: Écriture d'applets simples.
    Exemple: Une applet "AppletSimple.class" de téléchargement sur le net et d'affichage d'une image.

  • java.awt.Canvas: Écriture d'applets complexes et d'applications.
    Exemple: Une applet-application "AppletInterface.class" avec une interface utilisateur.

void paint(Graphics g)

Méthode appelée automatiquement en cas de détection par le rendeur Java d'un événement entraînant un affichage d'un objet.

L'objet Graphics obtenu en entête la fonction paint est instancié et géré par le rendeur Java. Il est utilisé par le programmeur uniquement au sein des fonctions paint pour réaliser les opérations élémentaires de dessin au moyen des méthodes qu'il propose.

Les affichages graphiques sont réalisés dans une fenêtre plongée dans un repère dont l'origine est en haut à gauche, l'axe des x est orienté vers la droite, l'axe des y est orienté vers le bas. Les coordonnées entières ou non représentent des nombres de pixels.

Exemple: Affichage d'une image et traçage d'un rectangle.

Image i = ...;

public void paint(Graphics g) {
  if ( i != null )
    g.drawImage(i,1,1,this) ;
  g.drawRect(0,0,100,160) ;
}

La classe Graphics fournit les fonctions de base nécessaires à l'affichage (non exhaustivement):

  • de sommets,
  • de segments de droites,
  • de rectangles remplis ou non,
  • de rectangles avec sommets arrondis remplis ou non,
  • de cercles remplis ou non,
  • d'ellipses remplies ou non,
  • d'arcs de cercles et d'ellipses remplis ou non,
  • de chaînes de caractères,
  • d'images,
  • ...

ainsi qu'à certaines opérations du type:

  • choix de la couleur de tracé,
  • choix du motif de tracé,
  • choix d'une police de caractères,
  • définition d'une zone de clipping,
  • ...

Exemples:

  • Choix de la couleur de tracé.

void setColor(Color coul);

coul est la couleur utilisée pour tous les tracés futurs jusqu'au prochain changement de couleur.

  • Traçage d'un rectangle non rempli.

void drawRect(int x,int y,
              int width,int height);

(x,y) est la position du coin supérieur gauche du rectangle. width et height sont les dimensions du rectangle en x et en y.

  • Affichage d'une image.

boolean drawImage(Image img,
                  int x,int y,
                  ImageObserver obs);

img est l'objet image à afficher. (x,y) est la position du coin supérieur gauche de l'image. obs est un objet interface ImageObserver destiné à gérer les problèmes liés à l'acquisition d'une image (par exemple un téléchargement en tâche de fond).

Fonctions membres de la classe Graphics (environ 50 fonctions)

Affichage évolué en Java2D

Nouvelles possibilités apportées avec Java2 -> Java2D.

Utilisation de la classe Graphics2D dérivant de Graphics et apportant des fonctionnalités supplémentaires tout en assurant une compatibilité ascendante grâce à la dérivation.

Implantation

Conservation de la technique générique consistant à écrire une méthode void paint(Graphics g). Instanciation d'un objet Graphics2D par casting sur l'objet Graphics de l'entête de méthode classique. Utilisation de cet objet pour les fonctions d'affichage.

public void paint(Graphics g) {
  Graphics2D g2 =(Graphics2D) g;
  ...
}

Fonctionnalités supplémentaires

  • Système de coordonnées

Toutes les coordonnées passées à un objet Graphics2D sont spécifiées dans un repère à 2 dimensions (appelé UserSpace, espace utilisateur) indépendant du périphérique d'affichage. L'objet Graphics2D contient un objet AffineTransform qui définit comment convertir des coordonnées UserSpace vers leur équivalent dans le repère d'affichage. Les transformations géométriques 2D réalisées sur l'objet Graphics2D sont cumulées au sein de cet objet. Tout objet graphique dessiné sera préalablement affecté de cette transformation. Initialement, l'objet AffineTransform est configuré à l'identité.

  • Affichage plus évolué

    • Formes évoluées: Shape
    • Contrôle de l'outil de dessin : Anti-crénelage (anti-aliasing), ...
    • Pinceaux pour les bords et les intérieurs des surfaces: Stroke, Paint
    • Clipping
    • Composition de pixels, d'images
    • Gestion de l'optimisation vitesse <-> qualité d'affichage
    • ...

Fonctions membres de la classe Graphics2D (environ 40 fonctions)

Les graphiques vectoriels

Objets vectoriels

  • Segments de droites:
    - void drawLine(int x1,int y1,int x2,int y2);

  • Rectangles remplis ou non:
    - void drawRect(int x,int y,
                    int width,int height);
    - void fillRect(int x,int y,
                    int width,int height);

  • Rectangles avec sommets arrondis remplis ou non:
    - void drawRoundRect(int x,int y,
                         int width,int height,
                         int arcWidth,
                         int arcHeight);
    - void fillRoundRect(int x,int y,
                         int width,int height,
                         int arcWidth,
                         int arcHeight);

  • Cercles et ellipses remplis ou non:
    - void drawOval(int x,int y,
                    int width,int height);
    - void fillOval(int x,int y,
                    int width,int height);

  • Arcs de cercles et d'ellipses remplis ou non:
    - void drawArc(int x,int y,
                   int width,int height,
                   int startAngle,int arcAngle);
    - void fillArc(int x,int y,
                   int width,int height,
                   int startAngle,int arcAngle);

  • Polygones remplis ou non:
    - void drawPolygon(int[] xPoints,
                       int[] yPoints,
                       int nPoints);
    - void drawPolygon(Polygon p);
    - void fillPolygon(int[] xPoints,
                       int[] yPoints,
                       int nPoints);
    - void fillPolygon(Polygon p);

  • Formes évoluées remplies ou non:
    - void draw(Shape s);
    - void fill(Shape s);

Attributs graphiques

Les images bitmap et la gestion des pixels

  • Fonctions d'affichage des images:
    - boolean drawImage(Image img,int x,int y,
                        Color bgcolor,
                        ImageObserver observer);
    - boolean drawImage(Image img,int x,int y,
                        ImageObserver observer);
    - boolean drawImage(Image img,int x,int y,
                        int width,int height,
                        Color bgcolor,
                        ImageObserver observer);
    - boolean drawImage(Image img,int x,int y,
                        int width,int height,
                        ImageObserver observer);
    - boolean drawImage(Image img,
                        int dx1,int dy1,
                        int dx2,int dy2,
                        int sx1,int sy1,
                        int sx2,int sy2,
                        Color bgcolor,
                        ImageObserver observer);
    - boolean drawImage(Image img,
                        int dx1,int dy1,
                        int dx2,int dy2,
                        int sx1,int sy1,
                        int sx2,int sy2,
                        ImageObserver observer);
    - void drawImage(BufferedImage img,
                     BufferedImageOp op,
                     int x, int y);
    - boolean drawImage(Image img,
                        AffineTransform xform,
                        imageObserver obs);

  • Composition de pixels via le canal alpha (gestion de transparences):
    - void setComposite(Composite comp)

Le texte et les polices de caractères

Affichage de texte

  • Fonctions de la classe Graphics:
    - void drawString(AttributedCharacterIterator
                                            ite,
                      int x,int y);
    - void drawString(String str,int x,int y);

  • Fonctions de la classe Graphics2D:
    - void drawString(AttributedCharacterIterator
                                            ite,
                      float x,float y);
    - void drawString(AttributedCharacterIterator
                                            ite,
                      int x,int y);
    - void drawString(String s,
                      float x,float y);
    - void drawString(String str,int x,int y);

  • Fonction de la classe TextLayout:
    - void draw(Graphics2D g2,float x,float y);
    La classe TextLayout permet une large part des manipulations sur les polices de caractères.

Choix de la police de caractères

Liste des polices de caractères du système

Les fonctions lièes à l'impression

Java 2 fournit une architecture dédiée à l'impression:

  • Ecriture d'une classe implantant Printable pour spécifier la méthode destinée à dessiner une page sur l'imprimante:
    - int print(Graphics graphics,
                PageFormat pageFormat,
                int pageIndex);

  • Instanciation d'un objet de classe PrinterJob avec dans l'ordre l'appel aux méthodes:
    - static PrinterJob getPrinterJob();
    pour obtenir un objet de classe PrinterJob,
    - PageFormat defaultPage();
    pour obtenir un objet de classe PageFormat,
    - abstract void setPrintable(
                              Printable painter,
                              PageFormat format);

    pour spécifier la méthode de dessin de page,
    - abstract boolean printDialog();
    pour obtenir une fenêtre de dialogue dédiée au lancement d'une impression,
    - abstract void print();
    pour lancer l'impression.

Exemple d'applet réalisant une impression

Exemples

Applets

Applications