web-dev-qa-db-fra.com

Comment activer l'anti-aliasing dans des applications arbitraires Java?

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

50
rcreswick

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

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

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

-Dawt.useSystemAAFontSettings=on
72
rcreswick

Les contrôles Swing dans les dernières versions de Java 6/7 devrait automatiquement respecter les préférences à l'échelle du système. (Si vous utilisez Windows L&F sur un système d'exploitation Windows, le texte doit s'afficher à l'aide de ClearType si vous que ce paramètre soit activé à l'échelle du système.) Une solution pourrait donc simplement être: activer le look and feel natif?

Dans les applications que vous développez, si vous rendez votre propre texte directement, vous devez également faire quelque chose comme ça (à un moment donné avant d'appeler Graphics.drawText ou 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

7
Luke Usherwood

Pour mémoire, j'ai découvert que sur ma machine Windows 7,

  • Si je ne l'utilise pas dans mon code, j'obtiens le rendu de sous-pixel Nice ClearType.
  • Mais si j'utilise ceci, j'obtiens l'antialiasing noir et blanc classique qui est beaucoup plus laid.

Ce code doit donc être utilisé avec précaution. Je suppose que cela cessera d'être nécessaire du tout lorsque tous les utilisateurs de Linux auront mis à jour les versions d'OpenJDK qui gèrent bien l'alias par défaut.

6
Al-Khwarizmi

merci pour l'info. Je me posais cette question moi-même. J'utilise SoapUI (www.eviware.com) et il n'utilise PAS, par défaut, de texte AA. J'ai ajouté -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true au fichier de commandes qui le lance MAIS cela n'a fait aucune différence. Devinez, je dois demander dans leur forum.

0
anjanb