如何在 JavaFX 中将某些文本行右对齐?

How do I align certain lines of text to the right in JavaFX?

我正在使用 JavaFX 构建一个程序,其中我需要逐行显示文本行。类似于 WhatsApp 之类的消息传递应用程序,我需要将一些文本行右对齐,而另一些文本行左对齐,如下所示:

我第一次尝试使用 TextArea,但我只能将所有文本对齐到一个方向或另一个方向。此外,动态地在 TextArea 中添加和删除文本是一件很痛苦的事情。

这促使我尝试改用 TextFlow,它利用我可以控制其各个属性以及根据需要添加和删除的文本节点。然而,在使用 TextFlow 时,我仍然无法将节点对齐到 Flow 区域的右侧。 我尝试同时使用 setStyle() 和 setTextAlignment() 方法,但无济于事。

TL,DR:如何控制 JavaFX TextFlow 中文本节点的属性,使一些节点右对齐,而其他节点左对齐?

非常感谢

有几种方法可以实现这一点。一种方法是使用 VBox 作为布局,使用 Label 包装在 HBox 中作为文本:

public class App extends Application {

    @Override
    public void start(Stage stage) {

        VBox pane = new VBox();
    
        pane.setPrefWidth(300);
        pane.setSpacing(10);
        pane.setAlignment(Pos.BOTTOM_CENTER);
        pane.setPadding(new Insets(20, 10, 20, 10));
    
        HBox text1 = createText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.", true);
        HBox text2 = createText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel quam erat.", false);
    
        pane.getChildren().setAll(text1, text2);

        Scene scene = new Scene(new StackPane(pane));

        stage.setScene(scene);
        stage.show();
    }

    private static HBox createText(String text, boolean right) {
        Label label = new Label(text);
        label.setWrapText(true);
        label.setMinWidth(200);
        label.setPrefWidth(200);
        label.setMaxWidth(200);
        label.setPadding(new Insets(5));
        label.setStyle("-fx-background-color: " + (right ? "#DCF8C6;" : "white;") + "-fx-background-radius: 10;");
        HBox pane = new HBox(label);
        pane.setAlignment(right ? Pos.CENTER_RIGHT : Pos.CENTER_LEFT);
        return pane;
    }

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

}

输出: