JavaFX: dessiner #
La toile (Canvas
)
#
-
La classe
Canvas
spécifie une région 2D où on peut dessiner -
La région a une largeur et une hauteur
-
important: le
(0,0)
est dans le coin haut gauche -
En Java:
Canvas laToile = new Canvas(800,600);
Le pinceau (GraphicsContext
ou gc
)
#
-
Le gros du travail se fait avec le
GraphicsContext
GraphicsContext gc = laToile.getGraphicsContext2D();
-
On peut spécifier la mise en forme:
gc.setFill(Color.rgb(122,233,39)); gc.setStroke(Color.RED); gc.setLineWidth(3);
fill
est la couleur de fond (remplissage)stroke
est la couleur du contour (trait)
-
On peut dessiner avec des primitives:
gc.fillRectangle(coinHautGaucheX, coinHautGaucheY, largeur, hauteur); gc.strokeRectangle(coinHautGaucheX, coinHautGaucheY, largeur, hauteur);
-
Et plein d’autre chose https://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html, p.ex:
drawImage
pour les images bitmapappendSVGPath
pour les images vectoriellesclip
pour afficher seulement une sous-régiontranslate
,scale
,rotate
ettransform
pour appliquer des transformationsapplyEffect
pour appliquer des filtres (couleur, flou, etc.)
Sauvegarder/restaurer le gc
#
-
Il est utile de changer temporairement la mise en forme:
gc.save(); gc.setFill(Color.BLUE); gc.setLineWidth(10); gc.restore();
- après
restore
, legc
revient à la mise en forme d’avant lesave
- après
Il faut rafraîchir la toile manuellement #
-
Pour rafraîchir, on vide une portion de la toile et on redessine
gc.clearRect(cointHautGaucheX, coinHautGaucheY, largeur, hauteur);
-
Typiquement, on vide toute la toile:
gc.clearRect(0, 0, getWidth(), getHeight());
Mais le Canvas est de taille fixe #
- C’est pour ça qu’on va se définir un contrôle
CanvasPartie