Ted*_*rin 6 java macos fonts javafx emoji
我无法在Mac OS X上的JavaFX应用程序中显示表情符号.在Linux上,只要系统上有表情符号字符(Symbo,Noto Emoji),字体替换就会启动.
然而,在OS X上,没有这样的运气.我尝试添加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();
}
}
Run Code Online (Sandbox Code Playgroud)
以上内容改编自JavaFX教程
如您所见,显示黑条代替.
我真的很好奇如何解决这个问题.在开创它的平台上没有表情符号支持总是让人觉得奇怪!
我认为默认的 Apple Emoji 字体(Apple Color Emoji)无法在 JavaFX 中渲染。通常,字体为每个字符定义基于矢量的可视化。有些字体使用图像来表示特定字符。Apple 字体中的表情符号被定义为图像。您可以通过在Pages或Keynote中添加表情符号并将字体大小更改为500左右来轻松测试它。通过这样做,您会看到表情符号已像素化。我认为苹果在字体中添加了多个尺寸的每个表情符号(如 32 像素、64 像素、128 像素、256 像素),但如果你将其设置得足够大,你就可以看到像素。

我认为 JavaFX 无法渲染这种字体,并且仅支持基于矢量的字体。因此,表情符号不会在您的 Mac 上呈现。
您可以做什么:您可以将基于矢量的表情符号字体添加到您的项目(在资源中)并以 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/)。在这里,您可以解析文本并将其拆分为属于 TextFlow 一部分的多个 JavaFX 文本节点。在这种情况下,您将以一些包含表情符号的文本节点结束,并且您只能更改此文本节点的字体。通过这样做,应用程序的其余部分可以以默认字体或您选择的任何字体显示。