51 votes

Comment activer l'anti-crénelage dans les applications Java arbitraires ?

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

78voto

rcreswick Points 6429

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 cela est plus facile) vous pouvez simplement passer les propriétés du système ci-dessus dans le jvm en ajoutant ces options à la ligne de commande :

-Dawt.useSystemAAFontSettings=on

0 votes

Cette méthode ne fonctionne pas pour l'aspect et la convivialité de la substance, avez-vous une idée à ce sujet ?

0 votes

Cela ne fonctionne pas pour Graphics#paintString(String, int, int)

0 votes

Si vous travaillez avec les apis graphiques, cela peut vous aider : docs.oracle.com/javase/tutorial/2d/text/renderinghints.html

9voto

Luke Usherwood Points 687

Les contrôles Swing dans les dernières versions de Java 6 / 7 devraient se conformer automatiquement aux préférences du système. (Si vous utilisez le L&F de Windows sur un système d'exploitation Windows, le texte devrait être rendu en utilisant ClearType si ce paramètre est activé dans tout le système). Une solution pourrait donc être simplement d'activer le Look and Feel natif ?

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

6voto

Al-Khwarizmi Points 193

Pour information, j'ai découvert que dans ma machine Windows 7,

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

Ce code doit donc être utilisé avec précaution. Je pense qu'il ne sera plus du tout nécessaire lorsque tous les utilisateurs de Linux auront mis à jour leur système vers les versions d'OpenJDK qui gèrent bien l'aliasing par défaut.

7 votes

Essayez System.setProperty("awt.useSystemAAFontSettings", "lcd") ; et vous devriez obtenir ClearType.

0 votes

En tant qu'utilisateur de linux et de Windows, je n'aime pas "cleartype". Je le désactive volontairement.

0voto

anjanb Points 5579

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

0 votes

Il se peut qu'il interprète les arguments comme appartenant à l'application au lieu du jvm -- vous devrez peut-être creuser un peu plus dans le fichier bat. (ou il se peut que cela ne fonctionne pas pour toutes les applications... si c'est le cas, faites-le moi savoir / votez ma réponse vers le bas...)

1 votes

J'ai réussi à le faire fonctionner en éditant le fichier de lancement .sh de façon à ce que la dernière ligne soit : java -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dsoapui.properties=soapui.properties -Dgroovy.source.encoding=iso-8859-1 -cp $SOAPUI_CLASSPATH com.eviware.soapui.SoapUIPro $*

1 votes

Je pense que vous pouvez faire la même chose avec le fichier bat de soapui en ajoutant les paramètres -D.... listés ici à la ligne JAVA_OPTS, ou en spécifiant simplement JAVA_OPTS=-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true dans l'environnement environnant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X