Выравнивание текста не работает на TextFlow

Я новичок в javafx.

Я пытаюсь построить мессенджер, в котором на панели чата отображаются сообщения. Я хочу выровнять сообщения, как мои собственные сообщения слева, а другие сообщения справа.

Для отображения сообщения я использую TextFlow, где я добавляю текст. Но выравнивание не работает.

TextFLow tf=new TextFlow();
Text t1= new Text("Hi");
Text t2= new Text("Hello");
t1.setTextAlignment(TextAlignment.RIGHT);
t2.setTextAlignment(TextAlignment.LEFT);
tf.getChildren().addAll(t1,t2);

Но выравнивание не работает. Оба текста находятся слева. Что я должен делать?

1 ответ

Решение

Вы можете установить TextAlignement из TextFlow, но я не думаю, что у нас может быть два выравнивания в одном контейнере, однако вы можете использовать хитрый способ обойти эту проблему, используя Labels & VBox:

private VBox Chat(){

    VBox chat = new VBox();
    chat.setPrefSize(400, 400);
    chat.setStyle("-fx-background-color:#333333;");

    Label txt1 = new Label("Text1");
    txt1.setTextFill(Color.WHITE); 
    txt1.setPrefWidth(400); 
    txt1.setAlignment(Pos.CENTER_LEFT);

    Label txt2 = new Label("Text2");
    txt2.setTextFill(Color.WHITE); 
    txt2.setPrefWidth(400); 
    txt2.setAlignment(Pos.CENTER_RIGHT);  

    chat.getChildren().addAll(txt1,txt2);

    return chat;
}

Почему ярлык? Этот узел работает так же, как текстовый узел, но преимущество заключается в том, что "мокрый" может изменить размер фона.

Почему VBox? необязательно, даже если я думаю, что TextFlow лучше подходит для текстовых узлов. Это также для позиционирования, VBox больше подходит для классифицированных предметов сверху донизу. Удачи!

Другие вопросы по тегам