javafx学习——VBOX和HBOX

Insets 类详解

类作用
Insets 表示矩形区域的四个方向的内边距(上、右、下、左),用于描述内容与边界之间的空白区域。主要应用场景包括:

  • UI 组件的内边距设置(如 JavaFX 的 Region.setPadding()
  • 布局计算时处理边界间距
  • 图形绘制时定义留白区域

核心属性和构造函数

属性 类型 描述
top double 上边缘的内边距(像素)
right double 右边缘的内边距
bottom double 下边缘的内边距
left double 左边缘的内边距

构造函数

// 1. 四参数构造器(各方向独立值)
public Insets(double top, double right, double bottom, double left)

// 2. 单参数构造器(统一值)
public Insets(double topRightBottomLeft) 
// 等同于 new Insets(v, v, v, v)

关键特性解析

  1. 不可变性 (Immutable)

    • 所有字段 final,实例创建后无法修改
    • 线程安全,可自由共享实例
    • EMPTY 常量提供零边距实例
  2. 相等性判断

    • equals() 严格比较四个方向的值
    Insets a = new Insets(10);
    Insets b = new Insets(10, 10, 10, 10);
    a.equals(b); // true
    
  3. 高效哈希计算

    • 哈希码缓存机制(首次计算后存储)
    • 基于 37 的质数乘法确保分布均匀:
    bits = 37L * bits + Double.doubleToLongBits(top);
    

使用示例

场景 1:设置 UI 组件内边距

Button btn = new Button("OK");
// 设置各方向独立边距(上5, 右10, 下15, 左20)
btn.setPadding(new Insets(5, 10, 15, 20));

场景 2:统一设置四周边距

VBox container = new VBox();
// 设置四周统一为10像素边距
container.setPadding(new Insets(10));

场景 3:清空边距

TableView<?> table = new TableView<>();
table.setPadding(Insets.EMPTY);  // 使用预置空边距实例

设计理念解析

  1. 值语义 (Value Object)

    • 基于数值而非身份比较
    • 无业务逻辑的纯数据结构
  2. 精确浮点处理

    • 使用 double 类型支持亚像素布局
    • Double.doubleToLongBits() 确保二进制精确比较
  3. 工程优化

    • hash 缓存提升高频访问性能
    • 静态 EMPTY 实例减少内存分配
  4. API 友好性

    • toString() 输出可读结构:
      Insets [top=5.0, right=10.0, bottom=5.0, left=10.0]
    • @NamedArg 支持 FXML 构造:
      <Insets 
JavaFX中,Pane是一个非常通用的容器,可以用来放置各种不同类型的节点。而HBoxVBox是专门用于水平垂直布局的容器,可以方便地将子节点按照指定的方向排列。 你可以将HBoxVBox放置在Pane中,然后将需要布局的节点添加到HBoxVBox中。这样,你就可以使用HBoxVBox的布局功能来控制子节点的位置大小,同时可以利用Pane的通用性来添加其他类型的节点,如图像、文本等等。 下面是一个简单的示例代码,展示如何在Pane中使用HBoxVBox来布局节点: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { // 创建一个 Pane Pane pane = new Pane(); // 创建一个 HBox,并添加一些按钮 HBox hbox = new HBox(); hbox.getChildren().addAll(new Button("Button 1"), new Button("Button 2"), new Button("Button 3")); // 创建一个 VBox,并添加一些按钮 VBox vbox = new VBox(); vbox.getChildren().addAll(new Button("Button 4"), new Button("Button 5"), new Button("Button 6")); // 将 HBox VBox 添加到 Pane 中 pane.getChildren().addAll(hbox, vbox); // 创建一个 Scene,并将 Pane 设置为根节点 Scene scene = new Scene(pane, 300, 200); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 这段代码创建了一个包含两个按钮的HBox三个按钮的VBox,并将它们添加到一个Pane中。你可以根据需要修改节点的大小位置,以及HBoxVBox之间的间距对齐方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon_sjdk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值