2014-06-17 11 views
19

Podczas testowania GUI mojej aplikacji JavaFX 8 zauważyłem, że niektóre etykiety nie wyświetlają wygładzonego tekstu. Po przeszukaniu go i zmaganiu się z nim, odkryłem bardzo irytującą rzecz, która się dzieje. Anti-aliasing jest stosowany tylko na etykietach, których rozmiar czcionki jest większy niż 80 pikseli. Oto przykład porównując aplikacji JavaFX i swing z AA zastosowano: KodJak wymusić wygładzanie czcionek JavaFX?

enter image description here

Próbka: https://gist.github.com/anonymous/be60bb89181376ff12aa

Czy istnieje sposób, aby wymusić AA we wszystkich rozmiarach czcionek? Czy to się tobie przytrafia? Szukałem podobnego błędu na JavaFX Jira, ale na razie nikt nie narzeka na to. Może powinienem otworzyć na to?

Niektóre informacje, które mogą pomóc:

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

Mam otworzył [błąd na Jira] (https://javafx-jira.kenai.com/browse/RT-37705) do tego. –

Odpowiedz

27

Domyślnie JavaFX 8 wykorzystuje modena.css ustawić anty aliasingu LCD, który nie wydaje się, aby wygładzić czcionki w niektórych przypadkach. Gdy rozmiar czcionki jest większy niż 80, technika AA zmienia się na AA w skali szarości (w celu zwiększenia wydajności). Aby uzyskać gładkie krawędzie w dowolnym rozmiarze, zamiast tego należy użyć skali AA w skali szarości.

Można to zrobić przez CSS:

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

lub za pośrednictwem argumentów systemowych:

-Dprism.lcdtext=false 

lub system ustawiania właściwości:

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

Thanks wszyscy, którzy odpowiedzieli na Jira!

+2

Myślę, że domyślnym typem wygładzania tekstu jest "szary" (zobacz https://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html), ale kod CSS Modeny ustawia go do "lcd". –

+3

Warto zauważyć, że jeśli interfejs użytkownika jest ładowany z szablonu FXML, to 'System.setProperty (" prism.lcdtext "," false ");' powinno być nazywane _before_ ładowanie go, w przeciwnym razie nie spowoduje żadnego efektu. –