文本框与菜单族
基本信息
| 属性 |
值 |
| 包路径 |
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 等)。
| 类 |
文件 |
说明 |
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 |
展开下拉列表 |
相关条目
- 滚动控件 - 文本框与菜单的共同祖先
AbstractScrollWidget
- 部件主题 -
textField 部件的 JSON 属性
- 配置项 -
esc_restore_last_text、tooltip_pos 等