java - 如何在 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);
解决方案
不要使用 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 代码中编写布局逻辑,这样你就知道如何去做了。
推荐阅读
- ssl - IIS 10 和 HTTP/2 - 需要客户端证书
- php - 如何为后端控制器执行单元测试
- c# - 如何使用 C# 中的参数设置 RDLC 中文本框的字体大小
- tsql - CodeTo128 函数可用性
- java - 当配置 org.hibernate.SQL 记录器时,Logback 显示带有根级别 INFO 的 DEBUG 输出
- c - sprintf 在带中断的 32 位 MCU 中重新进入 64 位操作
- php - (PHP) 如何检测用户的计算机/浏览器处于暗模式?
- javascript - Angular:将方法作为参数传递
- javascript - 不正确的 Javascript 对象语法
- unity3d - Unity 独立应用程序:分辨率缩放问题 (OSX)