控件总览(按钮 / 文本 / 滑条 / 进度)
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | com.cleanroommc.modularui.widgets |
| 顶层文件数 | 29(另有 layout/ 6、menu/ 6、slot/ 10、textfield/ 6) |
| 公共基类 | Widget<W>(widget/Widget.java:47)、AbstractParentWidget<I,W>、DelegatingWidget |
| 交互接口 | 实现 Interactable 的控件可响应输入(api/widget/Interactable.java) |
这一页把「行为相近、共享同一基类」的一族控件合并成表格, 而不是每个控件一页——它们之间只有外观或取值范围差异,没有独立的扩展契约。
功能
按钮族(共享 AbstractCycleButtonWidget)
| 控件 | 文件 | 继承 | 说明 |
|---|---|---|---|
AbstractCycleButtonWidget<W> |
widgets/AbstractCycleButtonWidget.java:27 |
SingleChildWidget<W> implements Interactable |
在若干候选值间循环的基类 |
CycleButtonWidget |
widgets/CycleButtonWidget.java |
AbstractCycleButtonWidget<CycleButtonWidget> |
单击切换到下一个候选值 |
ToggleButton |
widgets/ToggleButton.java |
AbstractCycleButtonWidget<ToggleButton> |
两个状态(开/关),用 toggleButton 主题 |
ButtonWidget<W> |
widgets/ButtonWidget.java |
Widget<W> |
普通按钮,点击触发 IGuiAction |
ContextMenuButton<W> |
widgets/menu/ContextMenuButton.java |
AbstractMenuButton<W> |
点击弹出菜单 |
PageButton |
widgets/PageButton.java |
Widget<PageButton> implements Interactable |
翻页箭头,配合 PagedWidget |
文本族
| 控件 | 文件 | 继承 | 说明 |
|---|---|---|---|
TextWidget<W> |
widgets/TextWidget.java |
Widget<W> |
单行静态文本 |
ScrollingTextWidget |
widgets/ScrollingTextWidget.java |
TextWidget<ScrollingTextWidget> |
文本过长时横向滚动 |
RichTextWidget |
widgets/RichTextWidget.java |
Widget<RichTextWidget> implements IRichTextBuilder, Interactable |
富文本,支持 §{...} 颜色、§n 下划线等 |
TextFieldWidget |
widgets/textfield/TextFieldWidget.java |
BaseTextFieldWidget<TextFieldWidget> |
单行输入框 |
TextEditorWidget |
widgets/textfield/TextEditorWidget.java |
BaseTextFieldWidget<TextEditorWidget> |
多行输入框 |
RichTextWidget 的实际渲染语法可在仓库自带示例中看到
(src/main/resources/assets/modularui2/guis/test.json:18):
"text": "§{#3058B8}Blue §nUnderlined§rBlue §{#469E8F}Mint Hello"。
数值与进度
| 控件 | 文件 | 继承 | 说明 |
|---|---|---|---|
SliderWidget |
widgets/SliderWidget.java |
Widget<SliderWidget> implements Interactable |
连续/离散滑条 |
ProgressWidget |
widgets/ProgressWidget.java |
Widget<ProgressWidget> |
进度条 |
ColorPickerDialog |
widgets/ColorPickerDialog.java |
Dialog<Integer> |
取色器弹窗 |
TransformWidget |
widgets/TransformWidget.java |
DelegatingWidget |
对子控件施加坐标变换 |
SchemaWidget |
widgets/SchemaWidget.java |
Widget<SchemaWidget> implements Interactable |
从 JSON 构建控件树,见下方说明 |
SchemaWidget:JSON 界面描述
SchemaWidget 允许用 JSON 描述整个界面而不写 Java。
仓库自带示例 src/main/resources/assets/modularui2/guis/test.json 展示了格式:
{
"widgets": [
{ "name": "background", "type": "image", "fillParent": true,
"src": "modularui2:textures/gui/background/background" },
{ "name": "player_inventory", "type": "player_inventory", "pos": "7,190" },
{ "name": "test_text", "type": "text", "pos": "10,10",
"text": "§{#3058B8}Blue §nUnderlined§rBlue §{#469E8F}Mint Hello" }
]
}
⚠️ 该文件还带一个
__examples:段(test.json:21-27)存放文档用示例坐标 (pos: {x: 1.5, y: 2}与字符串写法_pos: "1.5,2"), 属于示例数据而非控件。
列表与分页
| 控件 | 文件 | 继承 | 说明 |
|---|---|---|---|
ListWidget<I,W> |
widgets/ListWidget.java:34 |
AbstractScrollWidget<I,W> implements ILayoutWidget, IParentWidget |
垂直滚动列表(同时可滚动,见「滚动控件」) |
ListValueWidget<T,I,W> |
widgets/ListValueWidget.java:9 |
ListWidget<I,W> |
带值绑定的列表基类 |
SortableListWidget<T> |
widgets/SortableListWidget.java:23 |
ListValueWidget<T, SortableListWidget.Item<T>, …> |
可拖拽排序的列表 |
CategoryList |
widgets/CategoryList.java |
AbstractParentWidget<IWidget, CategoryList> implements Interactable, ILayoutWidget |
侧边分类栏 |
PagedWidget<W> |
widgets/PagedWidget.java |
AbstractParentWidget |
分页容器,配 PageButton |
Expandable |
widgets/Expandable.java |
Widget<Expandable> implements Interactable, IViewport |
可折叠/展开区块 |
DropDownMenu |
widgets/DropDownMenu.java |
SingleChildWidget<DropDownMenu> implements Interactable |
下拉菜单容器 |
SlotGroupWidget |
widgets/SlotGroupWidget.java |
ParentWidget<SlotGroupWidget> |
槽位分组容器 |
显示型(只画不点)
| 控件 | 文件 | 继承 | 说明 |
|---|---|---|---|
ItemDisplayWidget |
widgets/ItemDisplayWidget.java |
Widget<ItemDisplayWidget> implements RecipeViewerIngredientProvider |
纯展示物品,并作为配方原料提供给配方查看器 |
FluidDisplayWidget |
widgets/FluidDisplayWidget.java |
AbstractFluidDisplayWidget<FluidDisplayWidget> |
纯展示流体 |
EntityDisplayWidget |
widgets/EntityDisplayWidget.java |
implements IDrawable(不是 Widget) |
渲染一个实体缩略图 |
VoidWidget |
widgets/VoidWidget.java |
EmptyWidget |
什么都不画的占位控件 |
EntityDisplayWidget实现的是IDrawable而不是IWidget—— 它不能作为容器子控件,只能当背景/图标用。
交互
所有 implements Interactable 的控件按 Interactable 的 12 个回调响应输入
(api/widget/Interactable.java:29-:111)。返回值是 Interactable.Result
(定义于 api/widget/Interactable.java:172),有 4 个常量,
由 accepts / stops 两个布尔量组合而成:
| 常量 | 行 | accepts |
stops |
语义(源码注释) |
|---|---|---|---|---|
IGNORE |
:177 |
false | false | Nothing happens. |
ACCEPT |
:181 |
true | false | Interaction is accepted, but other widgets will get checked. |
STOP |
:185 |
false | true | Interaction is rejected and no other widgets will be checked. |
SUCCESS |
:189 |
true | true | Interaction is accepted and no other widgets will be checked. |
因此「接受并吞掉事件」是 SUCCESS 而不是 ACCEPT——ACCEPT 仍会继续检查其他控件。
相关条目
- Widget 基类与层级 - 这些控件共同的祖先
- 槽位控件 -
ItemSlot/FluidSlot/PhantomItemSlot - 文本框与列表菜单 - 输入框处理与菜单族
- 主题部件主题 - 这些控件各自的默认外观