文本框与菜单族

基本信息

属性 值
包路径 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 展开下拉列表

相关条目

  • 滚动控件 - 文本框与菜单的共同祖先 AbstractScrollWidget
  • 部件主题 - textField 部件的 JSON 属性
  • 配置项 - esc_restore_last_text、tooltip_pos 等