如何在 JavaFX 中使用 HBox 将某些元素放置在画布上的特定位置? [关闭]
Posted
技术标签:
【中文标题】如何在 JavaFX 中使用 HBox 将某些元素放置在画布上的特定位置? [关闭]【英文标题】:How can I use HBox in JavaFX, to place certain elements at a specific location on the canvas? [closed] 【发布时间】:2021-11-18 02:59:09 【问题描述】:新手!我知道这是我整个项目中最容易做的事情,但出于一些愚蠢(我是愚蠢)的原因,我被困在这里。我想使用 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);
【问题讨论】:
卡住是正常的,我不用担心,不如去Oracle站点学习layout tutorials那里练习。 也让您的条款正确。您将节点放置在场景图中,而不是画布上的元素,因此标题没有意义。在 JavaFX 中,画布具有完全不同的含义。在“JavaFX 场景图”和“JavaFX 画布”上运行 Google 搜索,以了解它们的不同之处。 “我想使用 HBox 将按钮放置在特定的 (x,y) 坐标处。”.这根本不是HBox
或任何其他布局窗格所做的。 Layout panes 根据该窗格的特定规则将子节点相对于彼此定位;在HBox
的情况下,节点水平排列成一行。无论如何,硬编码布局位置几乎总是不好的做法。只需使用布局窗格(或其组合)将组件放置在您想要的位置。
【参考方案1】:
不要使用 HBox 进行绝对定位
HBox 不是绝对定位的正确布局,它是一个自动布局管理器,可以根据内部算法自动调整大小和位置。
因此,即使您在 HBox 中手动设置子节点的布局坐标,HBox 内部的布局逻辑也会用它计算的值覆盖它们。
改为使用绝对定位的布局
还有其他布局,如 AnchorPane、Pane 和 Group,可以使用绝对定位。您应该研究它们以确定最适合您的情况。
最简单的布局,也允许调整大小是一个窗格,所以,如果你愿意,你可以用你的 HBox 代替它。
绝对定位的替代方案
对于大多数应用程序,使用提供更强大的自动化布局功能的布局窗格(例如 Hboxes、VBoxes、BorderPanes 和 GridPanes)通常比普通的 Pane 布局更好。这些通常与窗格的各种配置和布局提示结合使用,例如有关窗格内节点默认对齐方式的说明,或子节点的最小/最大/首选项大小。
以下内容并非针对该问题,而只是关于学习 JavaFX 布局的建议。
一般建议
Oracle 网站上有有用的layout tutorials 和练习。
通常最好使用自动布局管理器,而不是绝对定位。自动布局管理器有助于在不同大小的区域内创建 GUI,并支持动态调整大小。
使用 SceneBuilder 了解布局
从 Gluon 下载场景构建器。
使用 SceneBuilder 快速模拟不同的布局。
使用预览功能尝试布局,看看它们如何响应交互和调整大小。
将 SceneBuilder 输出导出到 fxml 和控制器骨架,并仔细检查输出以了解视觉设计如何映射到代码。
在 SceneBuilder 中创建和模拟布局比在 Java 代码中更容易、更高效。
但是不要仅仅依靠 SceneBuilder 来学习布局,还要用 Java 代码编写布局逻辑,这样你就知道该怎么做了。
【讨论】:
以上是关于如何在 JavaFX 中使用 HBox 将某些元素放置在画布上的特定位置? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GridPane JavaFX 使按钮跨越多个列/行?