Выравнивание текста не работает на 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 больше подходит для классифицированных предметов сверху донизу. Удачи!