【问题标题】:Colored Icon Font in JavaFXJavaFX 中的彩色图标字体
【发布时间】:2016-01-30 03:28:28
【问题描述】:

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

我想使用自定义字体,用我想使用的少量图标替换几个 unicode 字符,但图标中必须有颜色。这是可以用字体完成的吗?我可以使用 CSS 为文本的特定字符着色吗?我是否走在正确的道路上?

【问题讨论】:

  • TextFlow 是正确的方法。我不确定 TrueType 字体是否可以呈现多种颜色,但即使可以,在运行时生成这样的字体也将非常困难。至于您的另一个问题:文本是形状的子类,因此可以对其应用 CSS,包括-fx-fill and -fx-stroke properties。只需为运行不同颜色的字符创建一个单独的 Text 对象。
  • 在这样做的过程中,我发现工具提示、标签等的大小不太合适,因为它们与图形一起使用。也许这是我的文本流生成器中的一个缺陷。

标签: java fonts javafx


【解决方案1】:

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

此示例使用Google Material design icons font

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 conversion guideicomoon.io

【讨论】:

  • 这看起来很有希望,我看看我能用它做什么!
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 2017-08-19
相关资源
最近更新 更多