0% ont trouvé ce document utile (0 vote)
4 vues5 pages

Dessin en Java : Guide Graphics et Graphics2D

Le document traite des méthodes de dessin en Java, en se concentrant sur les classes Graphics et Graphics2D. Il explique comment redessiner des composants, utiliser des timers pour des mises à jour régulières, et les différentes méthodes de peinture. De plus, il aborde les formes 2D, les courbes, et les techniques de remplissage avec des objets de couleur, de dégradé ou de texture.

Transféré par

aMOR BENGOURICH
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues5 pages

Dessin en Java : Guide Graphics et Graphics2D

Le document traite des méthodes de dessin en Java, en se concentrant sur les classes Graphics et Graphics2D. Il explique comment redessiner des composants, utiliser des timers pour des mises à jour régulières, et les différentes méthodes de peinture. De plus, il aborde les formes 2D, les courbes, et les techniques de remplissage avec des objets de couleur, de dégradé ou de texture.

Transféré par

aMOR BENGOURICH
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Redessiner

• Les mé thodes pré cé dentes sont appelé es :


Chapitre 9 –lorsque le systè me le juge né cessaire
• le composant est rendu visible
• le composant a changé de taille
Dessiner avec Java • un autre composant a bougé et a rendu visible une
portion du composant
=> [Link]
–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

Plan Mé thodes repaint


• Introduction • repaint()
• Classe Graphics –redessine tout le composant

• Classe Graphics2D • 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
• Swing en fait implé mente paint pour tout
Introduction 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 paintComponent


• Pour tout composant, il est possible de public class MyPanel extends JPanel {
dé finir comment celui-ci doit être dessiné protected void paintComponent(Graphics g) {
en redé finissant une mé thode. // Let UI delegate paint first including
• AWT // background filling, if I'm opaque)
public void paint(Graphics g) [Link](g);
• Swing // paint my contents next....
public void paintComponent(Graphics g) }
}

16/03/04 Dessiner avec Java page 4 16/03/04 Dessiner avec Java page 8
Dessiner incré mentalement Exemple
• Redessiner (systé matiquement) tout un composant • Pour redessiner toutes les 20ms un composant
– perte de temps donné , on é crira :
– scintillement possible Timer t = new Timer(20, new ActionListener()
• Il est pré fé rable : {
– d’utiliser la mé thode repaint(x,y,width,height) public void actionPerformed(ActionEvent e)
– de ré cupé rer un contrô leur graphique et de l’utiliser {
– d’utiliser un timer [Link]();
}
});

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). Classe Graphics
• 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
• => [Link]

16/03/04 Dessiner avec Java page 10 16/03/04 Dessiner avec Java page 14

Relâ cher un contrô leur graphique Classe Graphics


• Un contrô leur graphique peut être obtenu : • Propose un ensemble de fonctionnalité s simple
–automatiquement : argument des mé thodes mais limité .
paint ou paintComponent • Les proprié té s du controleur sont dé finies par :
–À la demande : mé thode getGraphics – void setColor(Color c)
• Dans le premier cas, il est relâ ché – void setFont(Font font)
automatiquement à la fin de la mé thode – void setPaintMode()
• Dans le second cas, il faut le relâ cher avec – void setXORMode(Color c1)
la mé thode dispose. – 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 Modes de dessin


• Un Timer permet d’effectuer une action à • PaintMode : mode (par dé faut) qui permet de
intervalle ré gulier. remplacer les pixels existants par ceux qui sont
tracé s.
• Il suffit d’enregistrer un ActionListener
• XORMode : mode qui permet de combiner les
auprè s de lui. pixels existants avec ceux qui sont tracé s.
• On peut donc redessiner tout un composant – on utilise en gé né ral la couleur de fond à l’appel
de façon ré guliè re. – un second tracé efface toujours le pré cé dent
=> [Link]

16/03/04 Dessiner avec Java page 12 16/03/04 Dessiner avec Java page 16
Clipping Obtenir un contrô leur Graphics2D
• Toute opé ration de dessin en dehors de la • De façon automatique :
clipping area est sans effet. protected void paintComponent(Graphics g) {
• A comparer avec la mé thode repaint prenant [Link](g);
les mêmes arguments. Graphics2D g2D = (Graphics2D)g;
• [Link] … // 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 • fillRectangle • void draw(Shape s)
• drawRoundRect • fillRoundRect –Dessiner une forme
• draw3DRect • fillDRect • void fill(Shape s)
• drawPolygon • fillPolygon –Remplir une forme
• drawOval • fillOval
• Et shape ?
• drawArc • fillArc
• drawLine • drawChars
• drawImage • drawString

16/03/04 Dessiner avec Java page 18 16/03/04 Dessiner avec Java page 22

Shape
• Une classe gé né rale qui repré sente toute
Classe Graphics2D 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 Shape
pour toute version de Java compatible Java 2D. QuadCurve2D

• Pour utiliser ces objets, il suffit d’effectuer un Line2D


transtypage car de nombreuses fonctions de Java CubicCurve2D
manipule des ré fé rences Graphics. RectangularShape

• Or Graphics2D est une sous-classe de Graphics et


pour toute version Java compatible Java 2D, les
Arc2D Ellipse2D Rectangle2D RoundRectangle2D
objets retourné s sont issus de cette sous-classe.

16/03/04 Dessiner avec Java page 20 16/03/04 Dessiner avec Java page 24
Formes 2D à virgule flottante Lignes
• Avec Java 2D, il est possible effectuer des
conversions entre une mesure naturelle (en
Graphics2D g2 = (Graphics2D)g:
mè tres par exemple) et une mesure en Point2D p1 = [Link](100,0);
pixels. Point2D p2 = [Link](0,300);

• Pour cette raison, les coordonné es sont Line2D line = new [Link](p1,p2);
[Link](line);
donné es en virgule flottante, c’est à dire en
float ou double.

16/03/04 Dessiner avec Java page 25 16/03/04 Dessiner avec Java page 29

Consé quence Rectangles


[Link]([Link]);
• La plupart des classes repré sentant des [Link](new BasicStroke(2.0f));
formes possè dent deux sous-classes Rectangle2D r = new [Link](0,0,
200,50);
statiques. [Link](r);
[Link]([Link]);
• L’une permet d’utiliser des coordonné es de [Link](r);
type float
[Link]([Link]);
• L’autre permet d’utiliser des coordonné es float[] dash = new Float(10.0f,10.0f};
[Link](new BasicStroke(1.0f,
de type double. BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER,10.0f,dash,0.0f);
RoundRectangle2D r = new
[Link](0,0, 180,50,5,5);
[Link](r);
16/03/04 Dessiner avec Java page 26 16/03/04 Dessiner avec Java page 30

Point2D Stroke
• Point2D qui n’est pas sous-classe de Shape • Il s’agit du trait utilisé .
utilise aussi cette technique. • Les caracté ristiques les plus inté ressantes
• Pour cré er un point, il faut é crire : sont :
–la largeur du trait employé (premier argument)
Point2D p = new [Link](5.0f,10.0f);
–le motif du trait (cinquiè me argument)
ou encore :
• Le motif du trait correspond à un tableau
Point2D p = new [Link](5.0,10.0); 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 Ellipses et arcs


• Pour Line2D sous-classe de Shape, on [Link]([Link]);
[Link](new BasicStroke(1.0f));
é crira : Ellipse2D e = new [Link](0,0,
200,50);
Line2D line = new [Link](p1,p2);
[Link](e);
ou encore : [Link]([Link]);
[Link](e);
Line2D line = new [Link](p1,p2);
[Link]([Link]);
où p1 et p2 repré sentent deux points.
[Link](new BasicStroke(8.0f,));
• De même pour les autres sous-classes. Arc2D a = new [Link](0,0,
180,50,90,135,[Link]);
[Link](a);

16/03/04 Dessiner avec Java page 28 16/03/04 Dessiner avec Java page 32
Arcs Exemple 1
• Lors de la int xs[] = {x, x+width, x, x+width};
int ys[] = {y, y+height, y+height, y};
construction; on
GeneralPath polygon = new
pré cise : GeneralPath(GeneralPath.WIND_EVEN_ODD);
Angle de dé part
Ange de l’arc – l’angle de dé part [Link](xs[0], ys[0]);
– l’angle de l’arc for (int i = 1; i < [Link]; i++)
[Link](xs[i], ys[i]);
– le type de fermeture
[Link]();
[Link]([Link]);
[Link](polygon);

16/03/04 Dessiner avec Java page 33 16/03/04 Dessiner avec Java page 37

Courbe quadratique Exemple 2


[Link]([Link]); public GeneralPath createPath(int x, int y)
[Link](new BasicStroke(4.0f)); {
QuadCurve2D q = new [Link](startX,startY, GeneralPath path = new GeneralPath();
controlX, controlY, stopX, stopY); x2 = x; y2 = y;
[Link](q); [Link](x, y);
x -= 100; [Link](x, y);
y += 50; [Link](x, y);
x += 100; [Link](x, y);
x += 10; y -= 10; x1 = x - 20; y1 = y - 20;
[Link](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


[Link]([Link]); • Lorsqu’on remplit une forme, il est possible
[Link](new BasicStroke(4.0f)); d’utiliser :
CubicCurve2D q = new [Link](startX,startY,
control1X, control1Y, control2X, control2Y,stopX, stopY); – un objet Color
[Link](q); [Link]([Link]);
– un objet GradientPaint
[Link](new GradientPaint(p1,[Link],p2,[Link]);
– un objet TexturePaint
[Link](new TexturePaint(bufferedImagep1,anchor));

16/03/04 Dessiner avec Java page 35 16/03/04 Dessiner avec Java page 39

GeneralPath Exemple
• GeneralPath, sous-classe de Shape, permet Ellipse2D e = new [Link](0,0,
200,50);
d’effectuer un tracé gé né ral. GradientPaint gp = new
• On utilise alors les mé thodes : GradientPaint(p1,[Link],p2,[Link]);
[Link](gp);
–moveTo [Link](e);
–lineTo
–quadTo
–curveTo
–closePath

16/03/04 Dessiner avec Java page 36 16/03/04 Dessiner avec Java page 40

Vous aimerez peut-être aussi