JavaFX 中的彩色图标字体

问题描述 投票:0回答:1

我有一个 JavaFX 应用程序,我想在其中使用一些图标。目前,我解析所有可能包含图标的文本以获取特定字符串和字符,例如“:icon:”,并构建 TextFlow,在其中用图像替换匹配的关键字。然后我只是将 TextFlow 显示为标签/文本字段/等中的图形。这对我来说感觉非常草率。有更好的解决办法吗?

我想使用自定义字体,用我想要使用的少量图标替换一些 unicode 字符,但图标必须具有颜色。这是可以用字体来完成的事情吗?我可以使用 CSS 为文本的特定字符着色吗?我走的路正确吗?

java fonts javafx
1个回答
4
投票

您可能希望为此使用网络字体。

此示例使用 Google Material design 图标字体

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

public class MixedTextAndIconFonts extends Application {
    @Override public void start(Stage stage) {
        Text i = new Text("I");
        Text love = new Text("\uE87D");
        Text u = new Text("you");
        i.setStyle("-fx-font-family: \'Indie Flower\'; -fx-font-size: 80; -fx-fill: forestgreen;");
        love.setStyle("-fx-font-family: \'Material Icons\'; -fx-font-size: 60; -fx-fill: firebrick;");
        u.setStyle("-fx-font-family: \'Indie Flower\'; -fx-font-size: 80; -fx-fill: forestgreen;");

        TextFlow textFlow = new TextFlow(
                i,
                love,
                u
        );
        textFlow.setStyle("-fx-padding: 20px; -fx-background-color: azure;");

        Scene scene = new Scene(textFlow);
        scene.getStylesheets().add("http://fonts.googleapis.com/css?family=Indie+Flower");
        scene.getStylesheets().add("http://fonts.googleapis.com/css?family=Material+Icons");
        stage.setScene(scene);
        stage.show();
    }
 
    public static void main(String[] args) { launch(args); }
}

为了快速示例,我内联了样式,但对于“真正的”应用程序,您可能会使用外部 CSS 样式表和有意义的常量名称来表示您希望包含的图标字形的 unicode 代码点。

更多资源

如果您搜索的话,网络上还有其他类似的资源,例如fontawesomefxicon8 webfont转换指南icomoon.io


另请考虑:

我推荐 Ikonli 作为 Java 中使用的图标包的事实上的标准。 JavaFX 中的用法已记录。 Ikonli 的标准用法与问题和此答案略有不同,因为它涉及使用自定义节点 (

FontIcon
) 来显示节点,而不是像此答案一样在文本字符串中提供内联图标信息。

© www.soinside.com 2019 - 2024. All rights reserved.