Comment activer l’anti-aliasing dans les applications Java arbitraires?

De nombreuses applications Java n’utilisent pas de fonts anti-aliasées par défaut, malgré la capacité de Swing à les fournir. Comment pouvez-vous contraindre une application Java arbitraire à utiliser des fonts AA? (à la fois pour les applications que je lance et les applications que je développe)

Si vous avez access à la source, vous pouvez le faire dans la méthode principale:

// enable anti-aliased text: System.setProperty("awt.useSystemAAFontSettings","on"); System.setProperty("swing.aatext", "true"); 

ou, (et si vous n’avez pas access à la source, ou si cela est plus facile), vous pouvez simplement passer les propriétés du système ci-dessus dans jvm en ajoutant ces options à la ligne de commande:

 -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true 

Les contrôles Swing des dernières versions de Java 6/7 doivent automatiquement respecter les préférences du système. (Si vous utilisez Windows L & F sur un système d’exploitation Windows, alors le texte doit être affiché avec ClearType si ce paramètre est activé pour tout le système.) Une solution peut-être simplement être la suivante: activer l’apparence native?

Dans les applications que vous développez, si vous restituez directement votre propre texte, vous devez également faire quelque chose comme ça (à un moment donné, avant d’appeler Graphics.drawText ou vos amis):

 if (desktopHints == null) { Toolkit tk = Toolkit.getDefaultToolkit(); desktopHints = (Map) (tk.getDesktopProperty("awt.font.desktophints")); } if (desktopHints != null) { g2d.addRenderingHints(desktopHints); } 

Référence: http://weblogs.java.net/blog/chet/archive/2007/01/font_hints_for.html

Pour mémoire, j’ai découvert que dans ma machine Windows 7,

  • Si je ne l’utilise pas dans mon code, j’obtiens le joli rendu du sous-pixel ClearType.
  • Mais si je l’utilise, j’obtiens l’antialiasing classique en noir et blanc, qui est beaucoup plus moche.

Donc, ce code doit être utilisé avec précaution. Je suppose que cela cessera d’être nécessaire lorsque tous les utilisateurs Linux auront mis à jour les versions d’OpenJDK qui gèrent bien les alias par défaut.

Merci pour l’info. Je m’interrogeais à ce sujet moi-même. J’utilise SoapUI (www.eviware.com) et, par défaut, il n’utilise pas de texte AA. J’ai ajouté -Dawt.useSystemAAFontSettings = sur -Dswing.aatext = true au fichier batch qui le lance MAIS cela n’a pas fait de différence. Devinez, je dois demander dans leur forum.