gpt4 book ai didi

java - 如何在 OS X 上的 JavaFX 中显示表情符号?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:38 28 4
gpt4 key购买 nike

我无法在 Mac OS X 上的 JavaFX 应用程序中显示表情符号。在 Linux 上,只要系统上有表情符号字体(Symbola、Noto Emoji),字体替换就会开始。

然而,在 OS X 上,就没有这样的运气了。我试过添加 Symbola字体作为一种资源,只有当我将标签的字体更改为 Symbola 时才有效。我不想这样做,因为:

  • Symbola 是衬线字体,不符合我的应用程序的审美
  • 用户最终应该能够选择自己的字体

Apple 有“Apple Color Emoji”字体。如果我将我的标签设置为该字体,表情符号将显示,但文本间距不稳定。

下面是一个示例应用程序来查看问题:

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {

public static void main(String[] args) {
Application.launch(args);
}

@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 300, 130, Color.WHITE);
GridPane gridpane = new GridPane();
gridpane.setPadding(new Insets(5));

// Add cat emoji
Label label = new Label("\uD83D\uDC31");

GridPane.setHalignment(label, HPos.CENTER);
gridpane.add(label, 0, 0);

root.getChildren().add(gridpane);
primaryStage.setScene(scene);
primaryStage.show();
}
}

以上改编自 JavaFX tutorial

Black bars instead of the cat emoji

如您所见,显示的是黑条而不是🐱。

我真的很好奇如何解决这个问题。在开创它的平台上没有表情符号支持总是让人感觉很奇怪!

最佳答案

我认为默认的 Apple Emoji 字体(Apple Color Emoji)无法在 JavaFX 中呈现。通常,字体为每个字符定义基于 vector 的可视化。有些字体使用特定字符的图像。 Apple 字体中的表情符号被定义为图像。您可以通过在 Pages 或 Keynote 中添加表情符号并将字体大小更改为 500 左右来轻松测试它。通过这样做,你会看到表情符号是像素化的。我认为 Apple 在字体中添加了多个维度的每个表情符号(如 32px、64px、128px、256px),但如果你把它做得足够大,你就可以看到像素。 enter image description here

我认为 JavaFX 无法呈现那种字体,并且仅支持基于 vector 的字体。因此,表情符号不会在您的 Mac 上呈现。

您可以做什么:您可以将基于 vector 的表情符号字体添加到您的项目(在引用资料中),并使用 Java 代码或使用 CSS 加载它(参见 http://www.guigarage.com/2014/10/integrate-custom-fonts-javafx-application-using-css/)。如果您是通过使用 CSS 完成的,您可以简单地为“.text”类定义一个 CSS 规则并定义加载的字体。通过这样做,您将为应用程序中的(大部分)所有文本设置字体。在某些情况下,您需要一些额外的 CSS 规则才能真正以自定义字体显示所有内容。

如果您只想在某些特殊点显示表情符号,您可以检查使用 JavaFX TextFlow 是否不是更好的方法(请参阅 http://www.guigarage.com/2013/09/make-your-app-smile-d/)。您可以在此处解析文本并将其拆分为多个 JavaFX 文本节点,这些节点是 TextFlow 的一部分。在这种情况下,您将以一些包含表情符号的文本节点结束,并且您只能更改此文本节点的字体。通过这样做,您的应用程序的其余部分可以以默认字体或您选择的任何字体显示。

关于java - 如何在 OS X 上的 JavaFX 中显示表情符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36854539/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com