Java 2D

 

INTRODUCTION

AFFICHAGE JAVA
Méthode générique
Affichage évolué

GRAPHIQUES
VECTORIELS

IMAGES BITMAP

TEXTE ET POLICES
DE CARACTÈRES

IMPRESSION

EXEMPLES

 

WB01624_.gif (281 octets) RETOUR

Introduction

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

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

Technique issue du J.D.K. 1.0.

Surcharge de la méthode void paint(Graphics g) des classes Java de base gérant un affichage. Les classes développées seront obtenues par dérivation et surcharge de cette méthode.

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 de l'objet.

L'objet Graphics est géré par le rendeur et est utilisé par le programmeur uniquement au sein des fonctions paint pour réaliser les opérations élémentaires de dessin.

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 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,
  • ...

Fonctions membres de la classe Graphics (environ 50 fonctions)

Exemples:

  • Choix de la couleur de tracé.

void setColor(Color c);

c est la couleur 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.

  • 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).

Affichage évolué

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

Implantation

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

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

Fonctions membres de la classe Graphics2D (environ 40 fonctions)

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 (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 réalisées sont cumulées au sein de cet objet. Tout objet graphique dessiné sera préalablement affecté de cette transformation.

  • 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: Stroke, Paint
    • Clipping
    • Composition de pixels, d'images
    • Gestion de l'optimisation vitesse <-> qualité d'affichage
    • ...

Les graphiques vectoriels

Objets vectoriels

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

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.

Exemples

Applets

Applications