基本信息
| 属性 |
值 |
| 包路径 |
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 |
滚动区本体:子控件坐标系 + 滚动偏移 |
全仓共 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 主题 |
相关条目
- 布局容器 -
Grid 与 ListWidget 都建立在滚动基类上
- 尺寸计算 -
ScrollArea extends Area 用的正是同一套 Area / Box
- 配置项 - 全部 12 个配置字段与 1 个死配置
- 部件主题 -
scrollbar 部件的 JSON 属性