文本框与菜单族
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | com.cleanroommc.modularui.widgets.textfield(6 个文件)、com.cleanroommc.modularui.widgets.menu(6 个文件) |
| 文本框基类 | BaseTextFieldWidget<W>(widgets/textfield/BaseTextFieldWidget.java:36) |
| 菜单基类 | AbstractMenuButton<W>(widgets/menu/AbstractMenuButton.java) |
| 主题部件 | textField(api/IThemeApi.java:65)、toggleButton(:69) |
两族都继承滚动基类——文本框靠它横向滚动长文本,菜单靠它滚动长列表。
功能
文本框族(widgets/textfield/)
| 类 | 文件 | 继承 | 说明 |
|---|---|---|---|
BaseTextFieldWidget<W> |
widgets/textfield/BaseTextFieldWidget.java:36 |
AbstractScrollWidget<VoidWidget, W> implements IFocusedWidget, ModernInteractable |
基类,泛型实参为 VoidWidget |
TextFieldWidget |
widgets/textfield/TextFieldWidget.java |
BaseTextFieldWidget<TextFieldWidget> |
单行输入框 |
TextEditorWidget |
widgets/textfield/TextEditorWidget.java |
BaseTextFieldWidget<TextEditorWidget> |
多行编辑器 |
TextFieldHandler |
widgets/textfield/TextFieldHandler.java |
— | 文本编辑状态机(光标、选区) |
TextFieldRenderer |
widgets/textfield/TextFieldRenderer.java |
TextRenderer |
文本框专用渲染 |
INumberParser |
widgets/textfield/INumberParser.java |
接口 | 数值输入的解析/格式化 |
BaseTextFieldWidget 实现 ModernInteractable(lwjgl3ify 专属输入接口,
见 核心接口),因此文本框在装了 lwjgl3ify 时能正确处理
非 ASCII 文字输入(IME 等)。
菜单族(widgets/menu/)
| 类 | 文件 | 说明 |
|---|---|---|
AbstractMenuButton<W> |
widgets/menu/AbstractMenuButton.java:25(abstract,extends Widget<W> implements IMenuPart, Interactable) |
菜单按钮基类 |
ContextMenuButton<W> |
widgets/menu/ContextMenuButton.java:14(extends AbstractMenuButton<W>) |
右键/点击弹出上下文菜单 |
DropdownWidget<T,W> |
widgets/menu/DropdownWidget.java:28(extends AbstractMenuButton<W>) |
下拉选择器,带值 T;内嵌 ToWidget<T> 转换接口(:225) |
Menu<W> |
widgets/menu/Menu.java:9(extends ParentWidget<W> implements IMenuPart) |
菜单本体 |
MenuPanel |
widgets/menu/MenuPanel.java:12 |
继承 ModularPanel——菜单是一个独立面板 |
IMenuPart |
widgets/menu/IMenuPart.java:6(extends IWidget) |
菜单项接口 |
DropDownMenu(widgets/DropDownMenu.java,继承 SingleChildWidget<DropDownMenu>)
是菜单族的容器,DropdownWidget 才是带值的下拉选择器——两者不要混淆。
菜单主题
菜单使用独立的 context_menu 主题(不是 vanilla),定义在
src/main/resources/assets/modularui2/themes/context_menu.json:
{
"parent": "DEFAULT",
"panel": { "background": { "type": "texture", "id": "menu" } },
"button": { "background": "empty", "textColor": "#404040", … },
"toggleButton": { "background": "empty", "color": "#FFFFFF", "textColor": "#404040", … }
}
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 文本框默认颜色 | 0xFF2F72A8(边框) |
api/IThemeApi.java:66 |
| 文本框次色 | 0xFF5F5F5F |
api/IThemeApi.java:66 |
| ESC 行为 | 确认当前文本(escRestoreLastText 默认 false) |
ModularUIConfig.java:26 |
| 提示气泡默认位置 | RichTooltip.Pos.NEXT_TO_MOUSE |
ModularUIConfig.java:22 |
交互
| 触发 | 行为 |
|---|---|
| 点击文本框 | 获得焦点(IFocusedWidget.onFocus) |
| 失去焦点 | 提交文本 |
| ESC | 按 escRestoreLastText 决定是确认还是恢复上次文本(ModularUIConfig.java:26) |
点击 ContextMenuButton |
打开 MenuPanel 菜单 |
点击 DropdownWidget |
展开下拉列表 |