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)
关键特性解析
-
不可变性 (Immutable)
- 所有字段
final
,实例创建后无法修改 - 线程安全,可自由共享实例
EMPTY
常量提供零边距实例
- 所有字段
-
相等性判断
equals()
严格比较四个方向的值
Insets a = new Insets(10); Insets b = new Insets(10, 10, 10, 10); a.equals(b); // true
-
高效哈希计算
- 哈希码缓存机制(首次计算后存储)
- 基于 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); // 使用预置空边距实例
设计理念解析
-
值语义 (Value Object)
- 基于数值而非身份比较
- 无业务逻辑的纯数据结构
-
精确浮点处理
- 使用
double
类型支持亚像素布局 Double.doubleToLongBits()
确保二进制精确比较
- 使用
-
工程优化
hash
缓存提升高频访问性能- 静态
EMPTY
实例减少内存分配
-
API 友好性
toString()
输出可读结构:
Insets [top=5.0, right=10.0, bottom=5.0, left=10.0]
@NamedArg
支持 FXML 构造:<Insets