Archives mensuelles : juillet 2008

Antialiasing en Java

Introduction

L'antialiasing concerne 2 catégories différentes : les dessins et le texte. Pour le paramétrer, on utilise dans les 2 cas la fonction setRenderingHint de la classe Graphics2D, mais les paramètres et les valeurs à positionner sont différents.

Les dessins

Pour les dessins (les traits, les cercles, etc…), il vaut mieux toujours activer l'antialiasing sur le Graphics2D qui est fournit dans la fonction paintComponent(Graphics g) :

((Graphics2D) g).setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON );

Le texte

Activer l'antialising ou pas pour le texte dépend de la plate-forme et de la fonte. Je vous conseille de ne pas changer les fontes que Java à définit pour votre interface graphique. Il vaut mieux ne pas activer systématique l'antialiasing, mais obéir aux paramètres définis par le système d'exploitation. Pour obtenir ces paramètres, je vous suggère d'obtenir ces paramètres dans le constructeur de votre classe (qui dérive probablement de JPanel) l'information et de la stocker dans une variable.

Map renderingHints = (Map)Toolkit.getDefaultToolkit()
            .getDesktopProperty("awt.font.desktophints");

Ensuite, il faut utiliser cette information dans paintComponent(Graphics g) :

((Graphics2D)g).setRenderingHints(renderingHints);

Remarque

Il faut bien positionner les paramètres d'antialiasing à chaque appel de la fonction paintComponent(Graphics g), parce qu'il n'est jamais garanti que l'objet Graphics que vous recevez en argument de la fonction est le même d'un appel à l'autre