Как обновить FontAwesome до версии 5 в JavaFX - PullRequest
2 голосов
/ 29 января 2020

У меня есть JavaFX с использованием иконок FontAwesome, и я хотел использовать новую версию 5. Но, похоже, она больше не работает.

Вот простое демонстрационное приложение, написанное на Groovy, которое работает с старая версия FontAwesome:

import javafx.application.Application
import javafx.scene.Scene
import javafx.scene.control.Label
import javafx.scene.layout.VBox
import javafx.scene.text.Font
import javafx.stage.Stage

class App extends Application {
    static final String PENCIL = "\uf040"

    @Override
    void start(Stage primaryStage) throws Exception {
        def root = new VBox(10)
        root.children.with {
            add new Label('My icon')
            add new Label(PENCIL).with {
                it.style = '-fx-font-family: FontAwesome;' +
                        '-fx-font-size: 24px;' +
                        '-fx-text-fill: red'
                it
            }
        }
        def scene = new Scene(root, 600, 600)
        primaryStage.with {
            it.scene = scene
            it.title = "FontAwesome Demo"
            centerOnScreen()
            show()
        }
    }

    static void main(String[] args) {
        Font.loadFont( App.getResource(
                // "/fa-regular-400.ttf" /* version 5 */
                "/fontawesome-webfont.ttf" /* old version (not sure which) */
        ).toExternalForm(), 12 )
        launch(App, args)
    }
}

Используя старый файл шрифта, он работает:

enter image description here

После обновления:

enter image description here

Документы по при обновлении до версии 5 , похоже, не содержат ничего, кроме семейства шрифтов, измененного с FontAwesome на Font Awesome 5 Free, но изменение, которое не решит проблему.

ПРИМЕЧАНИЕ. Мое реальное приложение написано на Java, просто используя Groovy здесь в качестве примера, однако проблема та же.

1 Ответ

3 голосов
/ 29 января 2020

У меня наконец-то получилось. Помимо изменения семейства шрифтов, вы должны использовать правильный файл шрифта для JavaFX, так как большинство распространяемых параметров не работают ...

Кроме того, они изменили имена значков (хорошо, правда?) , как показано в документации по обновлению , поэтому вы должны обновлять их один за другим.

Из веб-дистрибутива работают только файлы шрифтов с именем xx-solid-900.xx. Кажется, что оба расширения woff и tiff работают, но woff2 не работает.

Я также пробовал дистрибутив для настольного компьютера, который имеет гораздо большие файлы, и работал только Font Awesome 5 Free-Solid-900.otf.

Вот значок пера (Unicode f303), который я нашел в версии 5, отображенной в вышеуказанном приложении:

enter image description here

Sharper !!

Для справки, окончательный исходный код:

import javafx.application.Application
import javafx.scene.Scene
import javafx.scene.control.Label
import javafx.scene.layout.VBox
import javafx.scene.text.Font
import javafx.stage.Stage

class App extends Application {
    static final String PENCIL = "\uf303"

    @Override
    void start(Stage primaryStage) throws Exception {
        def root = new VBox(10)
        root.children.with {
            add new Label('My icon')
            add new Label(PENCIL).with {
                it.style = '-fx-font-family: "Font Awesome 5 Free";' +
                        '-fx-font-size: 24px;' +
                        '-fx-text-fill: red'
                it
            }
        }
        def scene = new Scene(root, 100, 140)
        primaryStage.with {
            it.scene = scene
            it.title = "FontAwesome Demo"
            centerOnScreen()
            show()
        }
    }

    static void main(String[] args) {
        Font.loadFont(App.getResource("/fa-solid-900.woff").toExternalForm(), 12)
        launch(App, args)
    }
}
...