JavaFX - 垂直居中TextFlow中的文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX - 垂直居中TextFlow中的文本相关的知识,希望对你有一定的参考价值。

我目前正在使用JavaFX'TextTextFlow布局,我需要弄清楚如何将Text节点置于TextFlow中心。如下图所示,我添加了一些ImageView,以模拟我要添加的表情符号。

问题是,它们的排列方式不同。当表情符号居中时,文本保持在底部。

绿色边界线代表TextFlow的边界,蓝色边界线Text的边界线。

Preview

我已经尝试将Text的textOrigin属性设置为CENTER,但在我的情况下它并没有改变任何东西。将textAlignment设置为CENTER也不起作用。

这是我的代码摘录:

public CChatMessage(String senderName, String messageText)
{
    this.sender = new Label(senderName);
    this.sender.setTextAlignment(TextAlignment.CENTER);
    this.sender.setFont(Font.font("Verdana", FontWeight.EXTRA_BOLD, 14));

    this.message = new Text(messageText);
    this.message.setTextAlignment(TextAlignment.CENTER);
    this.message.setTextOrigin(VPos.CENTER);

    this.setEffect(new DropShadow());
    this.setAlignment(Pos.CENTER);
    this.setPadding(new Insets(0, 10, 10, 10));

    TextFlow messagePane = new TextFlow();
    messagePane.setStyle("-fx-border-color: green");
    messagePane.setTextAlignment(TextAlignment.CENTER);
    Image smileyImage = new Image("/resources/smiley.png");

    messagePane.getChildren().addAll(this.message, new ImageView(smileyImage), new ImageView(smileyImage), new ImageView(smileyImage), 
                                                   new ImageView(smileyImage), new ImageView(smileyImage), new ImageView(smileyImage));

    if(!senderName.equals(""))
    {
        CChatMessage.setMargin(messagePane, new Insets(10, 0, 0, 0));
        this.message.setFont(Font.font("Calibri", FontWeight.SEMI_BOLD, 18));
        this.getChildren().addAll(this.sender, messagePane);
    }
    else
    {
        this.setPadding(new Insets(5, 5, 5, 5));
        message.setFont(Font.font("Verdana", FontWeight.EXTRA_BOLD, 11));
        this.getChildren().add(messagePane);
    }
}
答案

编辑:我认为这是你正在寻找的答案:https://bugs.openjdk.java.net/browse/JDK-8098128

编辑2:看来我在下面给出的解决方案有问题。 “文本”节点中的单词不会保留在HBox中。到目前为止,我还没弄清楚如何解决这个问题。但是当Text节点位于TextFlow容器中时,它确实保持在内部。

那里已经解决了这个问题。我不完全理解它,但我希望你这样做。

我会留下原来的答案,因为它包含了我处理问题的方式。

此解决方案可能有效。在没有像这样使Text节点居中之后,我已经解决了这个问题:我使用了一个HBox,而不是使用TextFlow。它为我完成了工作。行为足够相似,我能够以我想要的方式对齐Text节点。

但请注意,我只是一个新手。因此,如果您使用此方法,可能会出现问题。我不知道TextFlow和HBox的属性足以自信地回答。但我只是想我会告诉你我的解决方案,因为那就是我现在用于我的项目。 (编辑:正如您在上面的编辑2中所读到的,我遇到了一个问题。可能会有更多问题。):)

快乐的编码。

以上是关于JavaFX - 垂直居中TextFlow中的文本的主要内容,如果未能解决你的问题,请参考以下文章

JavaFx 关键字高亮文本实现

JavaFX:如何制作可点击的文本

如何使div中的文本垂直居中?

如何让word文本框中的文字垂直上下居中

内联块中的垂直居中文本

Word文本框里面的文字如何让它垂直居中?