是否可以在JavaFX TextArea中显示表情符号?

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

我需要一个表情符号以及和文本编辑支持,但是当我在文本区域中插入任何表情符号时(无论是通过代码还是通过剪贴板)它根本不显示。我尝试下载 NotoColorEmoji 字体并将其设置为文本区域,但再次没有显示任何内容。而且,该字体仅包含表情符号,因此常规字符也不会显示。

var url = getClass().getResource("NotoColorEmoji-Regular.ttf").toExternalForm();
var ta = new TextArea("😀😃😄");
ta.setFont(Font.loadFont(url, 12));

我了解第 3 方库,但由于各种原因不能全部使用它们。所以,请不要推荐其中任何一个。

有没有办法在标准文本输入控件中获得表情符号支持?有什么解决办法吗?

java javafx emoji
1个回答
0
投票

您的计算机可能缺少带有这些特定字符的字形的字体。或者您使用的是旧版本的 Java,不支持必要的 Unicode 级别。

要调试这种情况,请编写一个“最小”应用程序来演示问题。 👉🏽 添加来自 Unicode 各个部分的其他几个字符,看看它们是否会渲染。 在下面的示例中,我们添加了戴医用口罩的脸、国际象棋国王和王后以及您的脸。

此示例适用于 macOS Sonoma 14、Java 22 和 JavaFX 23-ea+22。

TextArea

的内容:

package work.basil.example.exfx;

import javafx.geometry.Insets;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;

public class EmojiPane extends VBox
{
    public EmojiPane ( )
    {
        var emojiTextArea = new TextArea( "Testing 1 2 3 😷 Chess:♕♔ Faces:😀😃😄" ); // "😀😃😄" "😷" "♕♔"

        this.setPadding( new Insets( 10 , 10 , 10 , 10 ) );
        this.setSpacing( 10 );
        this.getChildren( ).addAll( emojiTextArea );
    }
}

还有一个用于执行该代码的应用程序:

package work.basil.example.exfx; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; import java.io.IOException; public class HelloApplication extends Application { @Override public void start ( Stage stage ) throws IOException { //Pane root = new SpinnerPane( ); Pane root = new EmojiPane() ; Scene scene = new Scene( root , 300 , 250 ); stage.setTitle( "Emoji" ); stage.setScene( scene ); stage.show( ); } public static void main ( String[] args ) { launch( ); } }

需要明确的是,这是我的 POM。

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>work.basil.example</groupId> <artifactId>ExFx</artifactId> <version>1.0-SNAPSHOT</version> <name>ExFx</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>5.10.2</junit.version> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>23-ea+22</version> </dependency> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>23-ea+22</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.11.0-M2</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <configuration> <source>22</source> <target>22</target> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <!-- Default configuration for running with: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass>work.basil.example.exfx/work.basil.example.exfx.HelloApplication</mainClass> <launcher>app</launcher> <jlinkZipName>app</jlinkZipName> <jlinkImageName>app</jlinkImageName> <noManPages>true</noManPages> <stripDebug>true</stripDebug> <noHeaderFiles>true</noHeaderFiles> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>

截图:

screenshot of JavaFX app with emoji in TextArea. 您可以编辑该文本,也可以粘贴表情符号。

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