java - 在javafx中将节点对齐到Vbox的右侧

标签 java javafx alignment vbox

我正在尝试使用 javafx 制作一个聊天框,我希望来自客户端的消息右对齐,其余消息左对齐。

我正在使用一个 Vbox,包装在一个 Scrollpane 中,在那个 Vbox 中,每条消息都包装在另一个 Vbox 中。 但是对齐内部 Vbox 不起作用。

这是我的代码:

private VBox addMsg(String senderName, String text, String time) {
    Label snderName = new Label(senderName + ":");
    snderName.setId("senderName");
    snderName.setMaxWidth(400);
    snderName.setAlignment(Pos.BASELINE_LEFT);

    Label msgText = new Label(text);
    msgText.setId("msgText");
    msgText.setWrapText(true);
    msgText.setMaxWidth(400);

    Label msgTime = new Label(time);
    msgTime.setId("msgTime");
    msgTime.setMaxWidth(400);
    msgTime.setAlignment(Pos.BASELINE_RIGHT);

    VBox msg = new VBox(snderName, msgText, msgTime);
    msg.setBackground(new Background(new BackgroundFill(Color.AQUA, new CornerRadii(3d), Insets.EMPTY)));
    msg.setPadding(new Insets(5));
    msg.setMaxWidth(400);
    msg.setEffect(new DropShadow(2, Color.DARKBLUE));
    return msg;
}

public void buildChatBox() {
    Button backToPublicChat = new Button("<");
    backToPublicChat.setId("backToPublicChat");
    backToPublicChat.setVisible(false);

    Text chatWindowInfo = new Text("public chat room");
    chatWindowInfo.setId("chatWindowInfo");

    VBox chatHistory = new VBox();
    chatHistory.setId("chatHistory");
    chatHistory.setPrefWidth(CHAT_BOX_WIDTH);
    chatHistory.setPrefHeight(GAME_HEIGHT - 50);//badsmell

    TextField messageField = new TextField("type your message...");
    messageField.setId("messageField");
    messageField.setPrefHeight(30);
    messageField.setPrefWidth(CHAT_BOX_WIDTH - 40);

    Button sendButton = new Button("send");
    sendButton.setId("sendButton");
    sendButton.setPrefHeight(30);
    sendButton.setOnMouseClicked(event -> {
        VBox vBox = addMsg(
                "Aran",
                "hi, i'm aran",
                "5:19");
        vBox.setAlignment(Pos.TOP_LEFT);
        chatHistory.getChildren().add(vBox);
        VBox vBox2 = addMsg(
                "Farnam",
                "oh, I love you!",
                "5:19");
        vBox2.setAlignment(Pos.TOP_RIGHT);
        chatHistory.getChildren().add(vBox2);
    });

    ScrollPane scrlPane = new ScrollPane(chatHistory);
    scrlPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
    scrlPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
    scrlPane.setId("scrolPane");
    chatBox = new VBox(new HBox(backToPublicChat, chatWindowInfo), scrlPane, new HBox(messageField, sendButton));
    chatBox.setId("chatBox");

    chatBox.getStylesheets().add("TowDef/GUI//chatBoxCSS.css");
}

此外,我只需要设置 HPos,但我不知道如何设置,所以我使用了 Pos.TOP_RIGHT。 有谁知道如何实现这一目标? 任何关于如何以更好的方式制作聊天框的建议将不胜感激:)

最佳答案

你可以使用 HBox 来实现,
用于右对齐。

Label label=new Label("guru ");
        label.getStylesheets().add("sample/styles/send.css");
        label.setId("receive");
        HBox hBox=new HBox();
        hBox.getChildren().add(label);
        hBox.setAlignment(Pos.BASELINE_RIGHT);
        vBox.getChildren().add(hBox);
        vBox.setSpacing(10);

用于左对齐

  Label label=new Label(msg);
        label.getStylesheets().add("sample/styles/send.css");
        label.setId("send");
        HBox hBox=new HBox();
        hBox.getChildren().add(label);
        hBox.setAlignment(Pos.BASELINE_LEFT);
        vBox.getChildren().add(hBox);
        vBox.setSpacing(10);

enter image description here

关于java - 在javafx中将节点对齐到Vbox的右侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401120/

相关文章:

java - 如何在没有上下文路径的情况下获取请求 URI?

JavaFX 8,带有复选框滚动 Pane 的 ListView 问题

html - CSS水平图像对齐与图像标题

java - 数据库访问放在哪里

java - 如何正确使用加载数组和保存数组方法?

maven - leiningen 项目中的 "Cannot find artifact org.openjfx"

java - OpenCV 不适用于 JavaFx

html - 使用 jQTouch 将使用 HTML 表格创建的布局(请参阅屏幕截图)替换为 CSS

html - 另一个 div 内的 div 没有垂直对齐

java - 尝试使用 Java (JMS) 中的选择器在 Tibco EMS 上使用持久消息时遇到问题