我需要一个表情符号以及和文本编辑支持,但是当我在文本区域中插入任何表情符号时(无论是通过代码还是通过剪贴板)它根本不显示。我尝试下载 NotoColorEmoji 字体并将其设置为文本区域,但再次没有显示任何内容。而且,该字体仅包含表情符号,因此常规字符也不会显示。
var url = getClass().getResource("NotoColorEmoji-Regular.ttf").toExternalForm();
var ta = new TextArea("😀😃😄");
ta.setFont(Font.loadFont(url, 12));
我了解第 3 方库,但由于各种原因不能全部使用它们。所以,请不要推荐其中任何一个。
有没有办法在标准文本输入控件中获得表情符号支持?有什么解决办法吗?
您的计算机可能缺少带有这些特定字符的字形的字体。或者您使用的是旧版本的 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>
截图: