Darstellung der Schriftart "Calibri" (z.B. als JLabel) unter XP nicht akzeptabel

DarthShader

Erfahrenes Mitglied
Hallo zusammen,

ich arbeite an einem Programm, bei dem die visuelle Darstellung als relativ wichtig einzustufen ist. Auf meinem Entwicklungsrechner läuft Windows Vista, auf den Zielsystemen läuft jedoch Windows XP.

Nun musste ich feststellen, dass die Darstellung der Schriftart "Calibri" unter Windows Vista gut aussieht, unter XP jedoch stark verändert ist - z.B. via JLabel angezeigt. Dabei ist zu erwähnen, dass die Darstellung der Calibri-Schriftart unter Windows XP nicht generell schlecht ist: wenn ich dies z.B. in Word 2007 unter Windows XP anzeige, sieht es exakt aus, wie unter Vista.

Um die Unterschiede zu verdeutlichen, hier mal 3 Vergleichs-Bilder:

calibri_font_compare_xp-vista.png

  • Auf dem ersten Bild sieht man die Darstellnng von Calibri (Plain, 18) unter Windows Vista, als JLabel
  • Auf dem zweiten Bild ist dasselbe, nur unter Windows XP zu sehen - man sieht deutlich die Unterschiede, die Schrift sieht so richtig schlecht aus, z.B. das zu dicke "W" von "Windows" und das "X" von XP.
  • Auf dem dritten Bild habe ich zur Überprüfung die Calibri Schriftart auf demselben Windows XP Rechner unter Word 2007 dargestellt - hier ist die Schriftart wieder korrekt.

Ich vermute also, es liegt an Java bzw. einem Zusammenspiel von Java und Windows XP. Gibt es da irgendwelche Möglichkeiten? Vielleicht eine Konfiguration am Windows XP, irgendeine Art von Schrift/Kantenglättung die man einstellen könnte (was ich nicht glaube, da die Darstellung unter Word ja korrekt ist). Oder gibt es unter Java irgendeine Möglichkeit?

Das Thema ist mir äußerst wichtig, da die Darstellung von Calibri unter Windows XP mit Java so für mich nicht akzeptabel ist (ein Wechsel auf eine andere Schriftart ist auch nur schwer möglich) - ich hoffe wirklich sehr, dass jemand dafür eine paar Tipps hat, oder sogar eine Lösung.


Vielen Dank für Eure Hilfe!
 
Ich denke ich habe eine Lösung gefunden. Der Grund ist das Anti Aliasing, was von OS zu OS nicht standardmäßig auf sämtliche GUI-Elemente angewendet wird. Ob Java also das JLabel mit AA anzeigt, ist vom OS abhängig - dies kann man aber forcieren, und zwar mit dem JVM Flag

Code:
java -Dawt.useSystemAAFontSettings=lcd

Was auch den Values der "RenderingHints" wie "VALUE_TEXT_ANTIALIAS_LCD_***" entspricht (so könnte man es programmatisch machen, jedoch müsste man dann z.B. von JLabel ableiten und die paintComponent(...) Methode überscheiben, ob den Rendering Hint zu setzen).

Nachzulesen ist es hier: http://java.sun.com/products/java-media/2D/reference/faqs/index.html (Abschnitt "Q. How can I specify the text antialiasing/font smoothing settings to be used by Swing in applications on Java SE 6?").

Wie auch immer, setzt man dieses Flag, so wird der Font (dies gilt auch für andere Fonts wie Tahoma, Verdana etc.) in Vista und XP gleich angezeigt.
 
Zurück