Dessiner sous Java

Dessiner sur un composant

On peut faire plus que changer la couleur de fond du panneau : on peut dessiner dessus.

Pour dessiner sur un composant il faut tenir compte du fait que Swing gère en permanence ce qu'on voit à l'écran, puisqu'il doit être capable de répondre aux modifications de la fenêtre (agrandissement ou réduction, déplacement, masquage par d'autres fenêtres...). Il ne faut pas interférer avec cette gestion, mais l'utiliser.

Chaque fois que Swing doit redessiner un composant, il fait appel à une méthode de ce composant, appelée paintComponent. En créant une version personnalisée de paintComponent , on peut personnaliser l'aspect du composant.

Dans la classe PanneauPerso, après le constructeur, ajouter :

public void paintComponent(Graphics g){
  super.paintComponent(g); 
  g.setColor(Color.WHITE);
  g.fillOval(0,0,500,500);
}
 

Une méthode paintComponent prend pour paramètre un objet de type Graphics appelé ici, comme souvent, g (Graphics appartient à la bibliothèque java.awt).

La première ligne super.paintComponent(g) permet de s'assurer que le panneau sera d'abord dessiné comme n'importe quel JPanel (super désigne la classe parente de PanneauPerso, ici JPanel).

Les instructions qui suivent utilisent des méthodes de la classe Graphics pour dessiner sur le panneau. On obtiendra ici un gros disque blanc contenu dans un rectangle (ici, carré) de coin supérieur gauche (0,0) et de largeur × hauteur = 500 × 500 en pixels. On peut le vérifier en exécutant Appel.

Avec le code ci-dessus, si on change la taille de la fenêtre, le dessin ne change pas. Les instructions getWidth() et getHeight() permettent d'obtenir la taille d'un composant et d'adapter éventullement le dessin en conséquence.

Ici on peut par exemple remplacer dans la méthode paintComponent la ligne g.fillOval(0,0,500,500);

par
g.fillOval(0,0,this.getWidth(), this.getHeight());
Le disque blanc va alors s'agrandir et se déformer, si on redimensionne la fenêtre, de façon à toujours toucher les bords. En effet "this.getWidth()" est une méthode qui renvoie la largeur du composant courant ("this"="ceci"), c'est à dire ici le PanneauPerso. (idem pour this.getHeight() )

Voir ici pour un tour d'horizon des autres méthodes de dessin de la classe Graphics.
N'hésitez pas à les tester pour dessiner sur le panneau ce qui vous passe par la tête (ou presque, on est en classe tout de même...) , en utilisant toujours la même syntaxe : g. suivi du nom de la méthode et de ses paramètres.

 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé