layout - JavaFX - 在 TextFlow 中垂直居中文本

标签 layout text javafx textflow

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

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

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

Preview

我已经尝试过设置 Text 的 textOrigin属性(property)到CENTER ,但在我的情况下它不会改变任何东西。设置 textAlignmentCENTER也不会工作。

这是我的代码摘录:

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:
看来我在下面给出的解决方案有问题。 Text 节点中的单词不会留在 HBox 中。到目前为止,我还没有想出如何解决这个问题。但是当 Text 节点位于 TextFlow 容器内时,它确实留在里面。

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

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

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

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

快乐编码。

关于layout - JavaFX - 在 TextFlow 中垂直居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747267/

相关文章:

html - 如何让三个水平图像并排显示

android - 以编程方式向 LinearLayout 添加边框

c# - FileStream 每隔一个字符返回空字符

html - 如何从标题标签中删除文本字符

python - 正则表达式仅匹配带有或不带有特定格式数字的大写字符串

java - JavaFX 中的虚线穿过实线

JavaFX 在 FXML 文档中打开 WebView

JavaFX 取消过滤 FilteredList

internet-explorer - IE PrintTemplate 混合上下文警告

java - 如何创建具有 RTL 水平方向的 android 线性布局