JavaFX:如何显示表情符号?

时间:2014-04-04 20:33:23

标签: java eclipse javafx javafx-8 emoji

我现在一直在努力解决这个问题,而且我似乎无法弄明白。 我需要某种方式在JavaFX应用程序中显示表情符号(如在WhatsApp中)。

我用awt和Swing尝试过,我现在没有任何成功(编辑:swt工作,但可能仅适用于Mac)我尝试使用扩展的Unicode和Codepoints,但这并没有成功。帮忙。我希望它甚至可能,因为Windows通常不会让你显示表情符号(我自己使用Mac)。

今天我偶然发现this post about Emoji's in JavaFX 8。有人说他已经通过扩展javafx.scene.text.TextFlow类实现了在JavaFX中显示表情符号的方法。还有一个指向little presentation的链接,从第57张幻灯片向上解释了这些所谓的EmojiFlow对象。 但是我似乎无法下载!

感谢所有人回答,我已经在这个问题上挣扎了很久,也许甚至不可能

这是一个不工作的例子

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage stage) {
        VBox root = new VBox();

            // I used TextFlow here because the article suggested
            // extending this class, but I know it's not working
            // just like this
        TextFlow textFlow = new TextFlow(new Text("Should be alien smiley: "
                + (char) 0xF47D));

            // casting a hex number to a char is equal to using "\uF47D"
        root.getChildren().add(textFlow);
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

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

3 个答案:

答案 0 :(得分:2)

在github pavlobu/emoji-text-flow-javafx上有一个项目,它是JavaFX的库,其主要目的是允许用户使用扩展的TextFlow显示表情符号。它有助于在运行JavaFX应用程序的不同平台上显示一致的表情符号图像。

我已经开发出它来解决在基于JavaFX的UI应用程序中一致的跨平台表情符号显示问题。 它还可以帮助您使用不同的表情符号图像包,您只需要下载要使用的带有表情符号包的.jar。 Here is a link

目前,其中包含以下表情符号样式包之一:

  1. openmoji
  2. twemoji
  3. emojitwo

您甚至可以使用自己的表情包来编译该库。 有关说明,请参见README.md

答案 1 :(得分:0)

按照以下步骤将表情符号添加为文本:

  1. 前往 https://apps.timwhitlock.info/emoji/tables/unicode 搜索您想要的任何表情符号并检查其字节码(例如 \xF0\x9F\x98\x81)

  2. 创建一个字节数组并添加字节码 例如。我正在使用这个表情符号:?,它的字节码是 \xF0\x9F\x98\x81 所以,


byte[] emojiByteCode = new byte[]{(byte)0xF0, (byte)0x9F, (byte)0x98, (byte)0x81};

  1. 创建一个新字符串,

String emoji = new String(emojiByteCode, Charset.forName("UTF-8"));

  1. 您可以将此字符串用作标签、按钮等来显示表情符号。

答案 2 :(得分:-1)

有两种方法可以做到:

  1. 采用显示emiticons的字体(less recomand)
  2. 使用Textflow并解析文本,如下例所示:
  3. (我到目前为止只为超链接做了)

    https://bitbucket.org/kogs/javafx-xmpp-client/src/660b12b5c514034ce78e1f653ea265cd74a645c6/src/main/java/de/kogs/xmpp/client/controller/MessageParser.java?at=master

    https://bitbucket.org/kogs/javafx-xmpp-client/src/660b12b5c514034ce78e1f653ea265cd74a645c6/src/main/java/de/kogs/xmpp/client/TextParsing/?at=master

    简单说:

    查找表情符号的文本(“:)”,“:P”...)如果你发现一个将Imageview添加到文本流中,如果没有将TextNode添加到TextFlow

    - >

    “此文本已传递:P到解析器”

    • 这 - > TextNode
    • text - > TextNode
    • ...
    • :P - > ImageView中包含:P图像
    • to - > TextNode