JavaFX如何使用HBox在画布指定坐标位置放置按钮等元素
JavaFX 按钮指定坐标放置问题解决方案
问题核心原因
HBox 属于 JavaFX 的流式布局容器,默认会自动计算排布内部子控件的位置,你给 Button 单独设置的
setLayoutX()/setLayoutY()属于绝对定位属性,只有父容器是Pane(或其未重写布局逻辑的子类)时才会生效,放在 HBox 内部的话这些坐标设置会被 HBox 的布局逻辑覆盖,自然达不到预期效果。
可选实现方案
- 方案1:无需 HBox,直接用 Pane 做绝对定位
如果不需要 HBox 的水平自动排布特性,只是要把两个按钮放到指定坐标,直接把按钮添加到 Pane 类型的父容器即可,参考代码:
// 此处root为你初始化的Pane类型根容器,比如 Pane root = new Pane(); Button button = new Button(" Add to meal "); Button button1 = new Button(" Add to list "); // 直接设置按钮坐标 button.setLayoutX(125.0d); button.setLayoutY(325.0d); button1.setLayoutX(130.0d); button1.setLayoutY(520.0d); // 直接添加到根容器,无需套HBox root.getChildren().addAll(button, button1);
- 方案2:保留 HBox,设置 HBox 整体坐标
如果你需要用 HBox 统一管理多个按钮的水平间距、整体位置,可以给 HBox 本身设置坐标,再把按钮放到 HBox 内部:
// 初始化HBox,设置内部按钮间距为20 HBox hbox = new HBox(20); Button button = new Button(" Add to meal "); Button button1 = new Button(" Add to list "); hbox.getChildren().addAll(button, button1); // 设置HBox整体坐标,内部按钮会跟随HBox移动 hbox.setLayoutX(125.0d); hbox.setLayoutY(325.0d); // 把HBox添加到父容器 root.getChildren().add(hbox);
内容的提问来源于stack exchange,提问作者old-boysenberry
相关产品推荐
相关产品推荐

