首页 > 解决方案 > 如何在 JavaFX 中使用 HBox 将某些元素放置在画布上的特定位置?

问题描述

一个新手!我知道这是我整个项目中最容易做的事情,但出于一些愚蠢(我是愚蠢)的原因,我被困在这里。我想使用 HBox 将按钮放置在特定的 (x,y) 坐标处。请帮忙:

    //buttons
        //HBox hbox = new HBox(200);
        Button button = new Button(" Add to meal ");
    
    
        //get info on all customs
    
    
        Button button1 = new Button( "   Add to list   ");
    
        //hbox.getChildren().addAll(button);
    

//layout
        //add to meal button
        button.setLayoutX(125.0d);
        button.setLayoutY(325.0d);
    
        //add to list button
        button1.setLayoutX(130.0d);
        button1.setLayoutY(520.0d);

标签: javabuttonjavafxlayouthbox

解决方案


不要使用 HBox 进行绝对定位

HBox 不是绝对定位的正确布局,它是一个自动布局管理器,它根据内部算法自动调整大小和位置。

因此,即使您在 HBox 中手动设置子节点的布局坐标,HBox 内部的布局逻辑也会用它计算的值覆盖它们。

而是使用绝对定位的布局

还有其他布局,如 AnchorPane、Pane 和 Group,可以使用绝对定位。您应该研究它们以确定最适合您的情况。

最简单的布局,也允许调整大小是一个窗格,所以,如果你愿意,你可以用你的 HBox 代替它。

绝对定位的替代方案

对于大多数应用程序来说,使用提供更强大的自动化布局功能的布局窗格,例如 Hboxes、VBoxes、BorderPanes 和 GridPanes,通常比普通的 Pane 布局更好。这些通常与窗格的各种配置和布局提示结合使用,例如有关窗格内节点的默认对齐方式的说明,或子节点的最小/最大/首选项大小。


以下内容并非针对该问题,而只是有关学习 JavaFX 布局的建议。

一般建议

Oracle 站点有有用的布局教程和练习。

通常最好使用自动布局管理器,而不是绝对定位。自动布局管理器有助于在不同大小的区域内创建 GUI,并支持动态调整大小。

使用 SceneBuilder 了解布局

从 Gluon 下载场景构建器。

使用 SceneBuilder 快速模拟不同的布局。

使用预览功能尝试布局,看看它们如何响应交互和调整大小。

将 SceneBuilder 输出导出到 fxml 和控制器骨架并仔细检查输出以了解视觉设计如何映射到代码。

在 SceneBuilder 中创建和模拟布局比在 Java 代码中更容易和更有效。

但是不要仅仅依靠 SceneBuilder 来学习布局,还要在 Java 代码中编写布局逻辑,这样你就知道如何去做了。


推荐阅读