滚动控件(AbstractScrollWidget / ScrollArea)
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | com.cleanroommc.modularui.widget(widget/ 与 widget/scroll/) |
| 基类 | AbstractScrollWidget<I,W>(widget/AbstractScrollWidget.java:29,abstract) |
| 滚动区 | ScrollArea extends Area(widget/scroll/ScrollArea.java:23) |
| 滚动数据类 | 5 个(widget/scroll/) |
| 主题部件 | scrollbar(api/IThemeApi.java:53) |
功能
类的真实继承关系
AbstractWidget (widget/AbstractWidget.java:13)
├── AbstractParentWidget<I,W> (widget/AbstractParentWidget.java)
│ ├── ParentWidget<W> (widget/ParentWidget.java)
│ │ └── Flow (widgets/layout/Flow.java:20)
│ │ ├── Row / Column
│ └── AbstractScrollWidget<I,W> (widget/AbstractScrollWidget.java:29) implements IViewport, Interactable
│ ├── ScrollWidget<W> (widget/ScrollWidget.java:8) implements IParentWidget
│ ├── Grid (widgets/layout/Grid.java:31) implements ILayoutWidget, IParentWidget
│ ├── ListWidget<I,W> (widgets/ListWidget.java:34) implements ILayoutWidget, IParentWidget
│ └── BaseTextFieldWidget<W> (widgets/textfield/BaseTextFieldWidget.java:36)
│ implements IFocusedWidget, ModernInteractable
└── Widget<W> (widget/Widget.java:47)
注意:AbstractScrollWidget 继承的是 AbstractParentWidget(不是 Widget),
并且自带 implements IViewport, Interactable——滚动容器天生可接收输入并提供坐标视口。
滚动数据类
| 类 | 文件 | 继承 | 说明 |
|---|---|---|---|
ScrollData |
widget/scroll/ScrollData.java:17 |
abstract | 滚动数据基类 |
VerticalScrollData |
widget/scroll/VerticalScrollData.java:11 |
ScrollData |
纵向 |
HorizontalScrollData |
widget/scroll/HorizontalScrollData.java:11 |
ScrollData |
横向 |
ScrollPadding |
widget/scroll/ScrollPadding.java:9 |
Box(不是 ScrollData) |
滚动区四边留白 |
ScrollArea |
widget/scroll/ScrollArea.java:23 |
Area |
滚动区本体:子控件坐标系 + 滚动偏移 |
直接继承 AbstractScrollWidget 的具名控件
全仓共 4 个具名直接子类(grep -rn 'extends AbstractScrollWidget' src/main/java,
不含 AbstractScrollWidget 自身):
| 控件 | 文件:行 | 额外实现 |
|---|---|---|
ScrollWidget<W> |
widget/ScrollWidget.java:8 |
IParentWidget |
Grid |
widgets/layout/Grid.java:31 |
ILayoutWidget, IParentWidget |
ListWidget<I,W> |
widgets/ListWidget.java:34 |
ILayoutWidget, IParentWidget |
BaseTextFieldWidget<W> |
widgets/textfield/BaseTextFieldWidget.java:36 |
IFocusedWidget, ModernInteractable |
BaseTextFieldWidget的泛型实参是VoidWidget——文本框本身不可滚动, 但它继承的滚动基类让长文本能自动横向滚动显示(内部塞一个VoidWidget作子节点)。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 单次滚轮像素 | 30 | widget/scroll/ScrollData.java:60(private int scrollSpeed = 30),经 getScrollSpeed()(:92)在 ScrollArea.java:117 消费 |
| 滚动速度可调范围 | 逐滚动区,经 setScrollSpeed(int)(ScrollData.java:96) |
ScrollData.java:96-98 |
| 滚动条默认尺寸 | 4 × 4 | api/IThemeApi.java:54 |
| 滚动条默认主题 | WidgetTheme.darkTextNoShadow(4, 4, Scrollbar.VANILLA) |
api/IThemeApi.java:54 |
| 悬停主题名后缀 | :hover |
api/IThemeApi.java:80(HOVER_SUFFIX) |
⚠️ 配置项
ModularUIConfig.defaultScrollSpeed是死配置: 它声明了默认值 30 与范围 1–100(ModularUIConfig.java:12-13), 但全仓 0 个读取方——实际滚动速度来自ScrollData.scrollSpeed。 详见 配置项。
交互
| 触发 | 行为 |
|---|---|
| 滚轮 | 按该滚动区 ScrollData.getScrollSpeed()(默认 30 像素)滚动 |
| 拖动滚动条 | 连续滚动 |
| 悬停滚动条 | 应用 <部件名>:hover 主题 |