Dessin

L'apparence d'un composant est déterminée par sa méthode paintComponent. Si on souhaite modifier cette apparence, on peut soit agir indirectement (par exemple modifier sa couleur de fond avec setBackground), soit agir directement en redéfinissant paintComponent :

import javax.swing.JComponent;
import java.awt.Graphics;
 
public class Bonjour extends JComponent {
  @Override
  protected void paintComponent(Graphics pinceau) {
    // obligatoire : on crée un nouveau pinceau pour pouvoir le modifier plus tard
    Graphics secondPinceau = pinceau.create();
    // obligatoire : si le composant n'est pas censé être transparent
    if (this.isOpaque()) {
      // obligatoire : on repeint toute la surface avec la couleur de fond
      secondPinceau.setColor(this.getBackground());
      secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
    }
    // maintenant on dessine ce que l'on veut
    secondPinceau.setColor(this.getForeground());
    secondPinceau.drawString("Bonjour !", 10, 20);
  }
}

Dans ce cas, le composant est rempli avec sa couleur de fond, puis on peut ajouter des éléments à l'aide du pinceau (un objet de la classe Graphics).

On trouve dans cette classe toutes les méthodes élémentaires pour le dessin :

drawString
pour écrire du texte,
drawLine
pour dessiner un segment,
drawRect
pour dessiner un rectangle plat,
drawOval
pour dessiner une ellipse,
drawArc
pour dessiner un arc elliptique,
fillRect
pour remplir un rectangle plat.

Le pinceau peut également être configuré, notamment en ce qui concerne la couleur de dessin (setColor) et la police de caractères (setFont). Comme il est fortement recommandé de ne pas modifier le pinceau d'origine, il vaut mieux travailler avec une copie du pinceau (create).

Il est possible d'utiliser des images au format .jpeg, .gif ou .png, si on a pensé à les charger au préalable :

import javax.swing.JComponent;
import java.awt.*;
 
public class Bonjour extends JComponent {
  private Image pingouin;
  public Bonjour() {
    super();
    this.pingouin = Toolkit.getDefaultToolkit().getImage("walk-0.png");
  }
  @Override
  protected void paintComponent(Graphics pinceau) {
    Graphics secondPinceau = pinceau.create();
    if (this.isOpaque()) {
      secondPinceau.setColor(this.getBackground());
      secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
    }
 
    secondPinceau.drawImage(this.pingouin, 10, 20, this);
  }
}

Remarque Toutes les méthodes de dessin, images comprises, tiennent compte de la transparence.

  1. Formes. Écrivez une application qui ouvre une fenêtre contenant :

    • un carré bordé de bleu de 50 pixels de côté,
    • un disque entièrement vert de 25 pixels de rayon,
    • le texte >o< dessiné en corps 24 gras et en violet.
    • l'image suivante :

  2. Sautoir. Écrivez une application qui ouvre une fenêtre ayant cette apparence :

    Remarque Il est conseillé de concevoir un composant qui dessine un «sablier» et de le dupliquer 25 fois.

  3. Accueil. Une interface graphique est souvent améliorée par le travail d'un graphiste. Cette image vous donne la base d'un écran d'authentification. Concevez une application qui ouvre une fenêtre ayant l'apparence imposée et dans laquelle on peut entrer ses identifiants.

    Remarque Dans ce genre de situation, un gestionnaire de mise en page n'est pas utile.

  4. Cercles. Écrivez une application qui ouvre une fenêtre ayant cette apparence :

retour à la page d'accueil

retour au sommet