滚动控件(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 主题

相关条目

  • 布局容器 - Grid 与 ListWidget 都建立在滚动基类上
  • 尺寸计算 - ScrollArea extends Area 用的正是同一套 Area / Box
  • 配置项 - 全部 12 个配置字段与 1 个死配置
  • 部件主题 - scrollbar 部件的 JSON 属性