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

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

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

layout - JavaFX-在TextFlow中垂直居中放置文本-LMLPHP

我已经尝试将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节点居中之后,我来采用以下解决方法:我不是使用TextFlow,而是使用了HBox。它为我完成了工作。行为非常相似,并且我可以按照自己想要的方式对齐Text节点。

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

快乐的编码。

10-01 08:14