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

2024-01-09

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

我正在使用一个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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在javafx中将节点对齐到Vbox的右侧 的相关文章

随机推荐

  • 无法在 ASP.NET 中转换 System.Web.UI.WebControls.GridView 类型的对象

    我编写了一个方法 当单击删除按钮时从我的 asp net Gridview 中删除行 另一种方法在单击编辑按钮时删除行 编辑和删除按钮都是内置 gridview 控件的一部分 但是 当我按下这些按钮 编辑 删除 时 会引发异常 无法将 Sy
  • 针对网站的 http 客户端 head 方法返回 503,但该网站运行良好

    我们使用以下代码从客户端应用程序与我们的网站进行对话 由于某种原因 我们总是得到 503 的状态代码 但是当我们从浏览器手动加载网站时 它只会加载 find 代码可能有什么问题吗 或者服务器端是否有任何特殊设置可能导致此问题 the hea
  • 存储过程 EF 和 NET CORE

    我正在构建一个 WEB API 以在 net core 中生成 JSON 对象 问题是数据集是在 SQL 存储过程 使用动态 SQL 中生成的 我不知道返回的对象的类型 因此我可以将其映射到具体模型 因为输出列根据参数而变化 有谁知道如何在
  • Android - 如果第一次加载 Activity,则阻止 onResume() 函数(不使用 SharedPreferences)

    在我当前的应用程序中 当我第一次加载 Activity 时 会触发 onResume 函数 我调查了活动生命周期 http developer android com reference android app Activity html
  • 如何在NiFi中使用计数器的值

    在 NiFi 1 3 0 中 我创建了一个流程来分割 JSON 文件并使用名称更新计数器filenamecounter这样我就可以将每个拆分保存为不同的文件名 当我查看 NiFi 计数器窗格时 我看到计数器值已更新 但我怎样才能获取这个值呢
  • 如何在 Safari 中应用隐藏/远程源映射?

    我正在尝试调试我的 React 应用程序中的一个问题 该问题仅在 iOS 生产中发生 我想利用隐藏的源映射 这样我就可以在 Safari 中调试应用程序的缩小资源 而无需公开发布注释的源代码 hidden source map 与 sour
  • .Net 4.0 HttpClient 使用情况?

    我在 Net 4 0 中并尝试使用 HttpClient 我看到一些文章说4 0不再支持它 但你仍然可以使用它 我已经包括了System Net Http 程序集 但它不允许我向HttpClient 知道我该如何解决这个问题吗 我已经将发生
  • 编译时 -pthread 和 -lpthread 之间的区别

    有什么区别gcc pthread and gcc lpthread编译多线程程序时使用哪个 pthread告诉编译器链接 pthread 库并配置线程的编译 例如 下面显示了当 pthread选项在我的 Ubuntu 机器上安装的 GCC
  • 如何修复 Java 中 mediawiki-api 上的“readapidenied”错误

    我正在开发一个使用 mediawiki API 的项目 但出现以下错误 错误代码 readapidenied 信息 您需要读取权限才能使用此模块 INFOS 无法通过 API 检索 Mediawiki 版本 将假定 Mediawiki 1
  • Force GraphViz 节点之间的力距离

    我将 GraphViz 与以下点文件一起使用 digraph G rankdir LR subgraph commits 5c071a6b2c gt 968bda3251 gt 9754d40473 gt 9e59700d33 gt 2a3
  • 使用 spring data mongo 更新插入 Mongo 文档

    我有一个班级 Document public class MyDocument Id private String id private String title private String description private Str
  • Android 应用程序的加密受 EAR 监管

    我正在开发 Android 应用程序 作为一个完全次要的功能 它将允许用户加密一些字符串 我知道 AES 256 位 比 DES 56 位 更推荐使用 但是 如果我使用 AES 256 并在 Android Market 中发布我的应用程序
  • 最佳实践:使用flyway迁移脚本后如何修改

    我正在寻找以下案例的建议 我在生产环境中设置了 Flyway 迁移脚本 每次部署时 数据库都会迁移到当前版本 我已经创建了几个已应用于生产数据库的迁移脚本 最近我升级了我的 MySQL 开发工具 现在包括有关使用已弃用函数的警告和其他警告
  • 如何在yii2的gridView中创建自定义ActionColumn?

    我有一个 gridView 我设法让它包含我需要的数据 但我接下来需要做的是创建一个列 其中包含 has facebook 和 has twitter 的两个按钮
  • PHP 中禁止加载数据 LOCAL INFILE

    我正在尝试使用LOAD DATA INFILE将一些记录插入表中 不幸的是 它不起作用 这是一些细节 如果我使用这个指令 LOAD DATA INFILE file txt INTO TABLE table ex FIELDS TERMIN
  • Gradle:将源代码和 javadoc 附加到 IntelliJ Idea 中的本地文件

    我正在使用 gradle v1 9 和 IntelliJIdea v12 1 6 我有一个简单的java项目和一个build gradle文件 一个依赖项不依赖于 Maven Central 所以我将 jar 放在lib folder Pr
  • NodeJS/Mongoose/MongoDB - 拉取(从数组)不起作用

    我正在尝试从数组 子文档 中提取 删除值 示例文档 id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name
  • 用于验证输入的正则表达式正则表达式:两个单词之间有一个空格

    我需要使用正则表达式来验证 php 的字段 该字段必须有两个由空格分隔的单词 例如 First Last 但我找不到适合我目的的字段 有人可以帮助我吗 我做过的最好的事情是 a zA Z0 9 s 但有了这个 我就可以在字段中的任何地方拥有
  • 如何使用 SMTP 发送安全电子邮件

    我目前正在使用 Google Apps 发送 SMTP 电子邮件 如果我的项目部署了一些我要发送的信息将是保密的 我想确保传输是安全的 谁能告诉我我需要做什么才能确保我通过 google apps smtp 服务器使用 smtp 发送安全电
  • 在javafx中将节点对齐到Vbox的右侧

    我正在尝试使用 javafx 制作一个 chatBox 我希望来自客户端的消息向右对齐 其余的向左对齐 我正在使用一个Vbox 包裹在Scrollpane在该 Vbox 中 每条消息都包装在另一个 Vbox 中 但对齐内部 Vbox 不起作