【问题标题】:JavaFX - Center Text in TextFlow verticallyJavaFX - TextFlow 中的文本垂直居中
【发布时间】:2018-08-20 17:47:05
【问题描述】:

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

问题是,它们的对齐方式不同。当表情符号居中时,文本停留在底部。

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

我已经尝试将 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);
    }
}

【问题讨论】:

    标签: layout text javafx textflow


    【解决方案1】:

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

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

    那里已经给出了问题的解决方案。我不完全明白,但我希望你明白。

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

    此解决方案可能有效。在未能像这样将 Text 节点居中之后,我找到了这个解决方法:我没有使用 TextFlow,而是使用了 HBox。它为我完成了工作。行为非常相似,我能够以任何我想要的方式对齐 Text 节点。

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

    编码愉快。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 确实如此。我同意你的看法。我之所以这么说只是因为我真的不明白那里说了什么。但我今天或明天会经历这些。如果我能理解那里所说的话,我会输入答案并删除链接。 :)
    猜你喜欢
    • 2013-10-15
    • 2015-09-16
    • 2015-06-06
    • 1970-01-01
    • 2023-03-05
    • 2014-03-02
    • 2011-02-03
    相关资源
    最近更新 更多