Traduction officieuse du tutorial de Michael Martak. Dont je n'ai pas trouvé l'e-mail: si ca dérange quelqu'un, je veux bien enlever cette traduction.
La version originale est sur java.sun.com (et ici un zip contenant la traduction pour la regarder offline )


Page Precedente Page Suivante

Rendu actif contre rendu passif

Comme cité précédemment, la plupart des applications fonctionnent mieux si elles commandent le dessin. Dans une application traditionnelle possédant GUI (Graphical User Interface), la question « quand peindre ? » est habituellement laisser à l'OS. Lorsqu'on travaille dans un environnement avec des fenêtres, cela prend tout son sens. Une fenetre d'application ne sait pas si l'utilisateur est en train de bouger, redimmensionner ou cacher une application par une autre fenêtre jusqu'à ce que ça arrive. Dans une application Java graphique, l'OS delivre une paint event à l'AWT, qui calcule ce qui doit être peint, crée un objet java.awt.Graphics avec la taille appropriée, puis appelle la méthode paint avec cet objet Graphics.
// Traditional GUI Application paint method:
// This can be called at any time, usually from the event dispatch thread
public void paint(Graphics g) {
    // Use g to draw my Component
}
Cela est souvent désigné par rendu passif ( passive rendering). Comme vous pouvez l'imaginer, ce système implique un « sur-traitement » qui ennuiera grandement les programmeurs AWT et Swing soucieux des perfomances.
En mode plein écran, vous n'avez plus à vous soucier de savoir si la fenêtre est en train d'être redimensionnée, etc.. (à moins que vous n'ayez ignoré ma suggestion de désactivé le redimmensionnement). A la place, la fenêtre est dessinée directement à l'écran (rendu actif, active rendering). Cela simplifie un peut le dessin, puisque vous n'avez plus à vous soucier des paint events. En fait, les paint events délivrées par l'OS peuvent même l'être à des moments inappropriés ou imprévisibles en mode plein écran.
Au lieu de se fier à la la méthode paint en mode plein écran, le code de dessin ,drawing code, est habituellement fait dans une boucle de rendu, rendering loop:
public void myRenderingLoop() {
    while (!done) {
        Graphics myGraphics = getPaintGraphics();
        // Draw as appropriate using myGraphics
        myGraphics.dispose();
    }
}
Une telle boucle de rendu peut être faite depuis n'importe quel thread, que ce soit le sien propre ou en profitant du thread principal de l'application.

Astuces de programmation

Quelques astuces à propos de l'utilisation du rendu actif:



Page Precedente Page Suivante