2014-06-17 8 views
19

Beim Testen der GUI meiner JavaFX 8-Anwendung habe ich festgestellt, dass einige Beschriftungen keinen Anti-Alias-Text anzeigen. Nach etwas googeln und kämpfen, fand ich eine sehr nervige Sache heraus, die geschieht. Das Anti-Aliasing wird nur auf Labels angewendet, deren Schriftgröße größer als 80 Pixel ist. Hier ist ein Beispiel zu vergleichen JavaFX und Swing-Anwendungen mit AA angewandt:Wie erzwinge Anti-Aliasing in JavaFX-Schriftarten?

enter image description here

Beispielcode: https://gist.github.com/anonymous/be60bb89181376ff12aa

Gibt es eine Möglichkeit, die AA in allen Schriftgrößen zu zwingen? Passiert Ihnen das auch? Ich suchte nach einem ähnlichen Fehler auf JavaFX Jira, aber niemand beschwert sich darüber bis jetzt. Vielleicht sollte ich einen dafür öffnen?

Einige Informationen, die helfen können:

java version "1.8.0" 
Java(TM) SE Runtime Environment (build 1.8.0-b132) 
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode) 
Windows 8.1 64 bits [Version 6.3.9600] 
+0

Ich habe einen [Bug auf Jira] (https://javafx-jira.kenai.com/browse/RT-37705) dafür geöffnet. –

Antwort

27

standardmäßig JavaFX 8 verwendet modena.css das LCD-Anti-Aliasing einstellen, die keine Schriften in einigen Fällen zu glätten scheinen. Wenn die Schriftgröße größer als 80 ist, ändert sich die AA-Technik in die Grauskala AA (für Leistungsprobleme). Um glatte Kanten bei jeder Größe zu erzielen, sollte stattdessen die Grauskala AA verwendet werden.

.text{ 
    -fx-font-smoothing-type: gray; 
} 

oder durch System Argumente:

Dies kann durch CSS erfolgen

-Dprism.lcdtext=false 

oder die Einstellung von Systemeigenschaften:

System.setProperty("prism.lcdtext", "false"); 

Vielen Dank allen, die auf Jira geantwortet!

+2

Ich denke, dass der Standard-Text-Glättungstyp "grau" ist (siehe https://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html), aber das Modena-CSS hat es gesetzt zu "LCD". –

+3

Beachten Sie, dass die 'System.setProperty (" prism.lcdtext "," false ";), wenn die UI von einer FXML-Vorlage geladen wird, _before_ aufgerufen werden sollte, sonst wird es keine Wirkung haben. –