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
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:
void setColor(Color coul);
coul est la couleur utilisée pour tous les tracés futurs jusqu'au
prochain changement de couleur.
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.
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
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
|