2009-07-20 7 views
1

J'écris une application graphiquement intense qui rend un JLabel hors écran. Lorsque j'appelle la ligne suivante, les points de suspension apparaissent sur le mac mais pas sur la boîte de Windows.Rendu des polices sous Mac et Windows

g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 
    RenderingHints.VALUE_FRACTIONALMETRICS_ON); 

Maintenant, je devine qu'il est causé par Mac fait déjà un certain rendu de sous-pixels des polices, mais je voudrais simplement confirmer.

De plus, étant donné qu'il est impératif que FRACTIONALMETRICS soit activé sur Windows (l'application semble terrible autrement), quelqu'un peut-il suggérer un travail à court d'ajouter une vérification pour ne pas mac?

Merci.

Répondre

3

Les RenderingHints pour FractionalMetrics concernent l'arrondi des nombres flottants à ints lors du dimensionnement ou du crénage des polices. Les glyphes eux-mêmes ne sont pas affectés par ce paramètre. Vous pouvez lire tout à ce sujet au Java 2D FAQ.

Vous avez raison de dire que Java sur Mac OS X permet l'antialiasing du texte au niveau du système, et Windows ne l'est pas, mais il n'est pas nécessaire d'effectuer une vérification Mac uniquement. Ce que vous devez faire est de définir le TextAntiAlias ​​RenderingHint à la place.

gfx.setRenderingHint( 
     RenderingHints.KEY_TEXT_ANTIALIASING, 
     RenderingHints.VALUE_TEXT_ANTIALIAS_ON 
    ); 

Java 6 prend en charge le rendu des polices ClearType qui est beaucoup mieux sur les écrans LCD que l'anti-aliasing qui était en Java 5. ClearType a souvent besoin d'être mis sous Windows XP; C'est quelque part dans les paramètres d'affichage dans le Panneau de configuration. Ensuite, vous devez exécuter votre programme Java avec les arguments de ligne de commande correcte pour lui permettre (ou les insérer dans System.setProperty() avant d'afficher tous les composants Swing):

java -Dawt.useSystemAAFontSettings=lcd [...your gubbins here...] 
+0

grâce, l'astuce ClearType est agréable savoir, mais malheureusement, au-delà de la version que je vise. Une idée de ce qui cause l'ellipse dans un mais pas dans l'autre? Ou est-ce que l'anti-aliasing cogne la taille? –

+0

La chaîne est-elle rendue la même et est-elle dans la même police? Je ne me souviens pas si les applications Mac Java utilisent Lucida Grande par défaut ou non. Parfois, un large glyphe comme un majuscule W invoquera une ellipse sur un JLabel. Si votre gestionnaire de disposition le permet, essayez de le rendre un peu plus large. – banjollity

Questions connexes