javafx - 如何在 JavaFX 中将 FontAwesome 升级到版本 5

标签 javafx groovy font-awesome

我有一个使用 FontAwesome 图标的 JavaFX,我想使用新版本 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

upgrading to version 5 上的文档除了字体系列从 FontAwesome 更改为 Font Awesome 5 Free 之外,似乎没有提及任何其他内容,但更改不会解决问题。

注意:我的实际应用是用 Java 编写的,这里仅以 Groovy 为例,但问题是一样的。

最佳答案

我终于让它工作了。除了更改字体系列之外,您还必须为 JavaFX 使用正确的字体文件,因为它们分发的大多数选项似乎都不起作用...

此外,他们还更改了图标的名称(很好,对吧?)as shown in the upgrading docs , 所以你必须一一更新。

在 Web 发行版中,只有名为 xx-solid-900.xx 的字体文件有效。 wofftiff 扩展似乎都有效,但 woff2 无效。

我还尝试了桌面发行版,它有更大的文件,只有 Font Awesome 5 Free-Solid-900.otf 有效。

这是我在上面的应用程序中显示的版本 5 中找到的笔图标 (unicode f303):

enter image description here

更锐利!!

供引用,最终源码:

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)
    }
}

关于javafx - 如何在 JavaFX 中将 FontAwesome 升级到版本 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59974248/

相关文章:

TextFlow 中的 JavaFX 文本忽略 StyleClass?

JavaFX Choiceox 更改不更新图形

java - 加载 FXML 文件时,它的关联 Controller 也会加载

gradle - 如何防止Gradle降级依赖项?

html - FontAwesome 显示正方形,而不是图标

ruby-on-rails - Rails link_to with font-awesome 和外部 url

java - 在 Javafx 上,有没有办法在不知道所有点的坐标(但只知道边数?)的情况下绘制正多边形?

groovy - Gradle zip 插件,如何在 zip 中创建空文件夹?

gradle - 无法在gradle中合并属性值

css - React-Bootstrap:使用 Font Awesome SVG 自定义 Navbar 的汉堡菜单