禁止商用。所有使用 PolarisUI 的应用都必须公开完整源码。查看许可条款
场景示例:把控件组成应用
本页内容
2.4.4 在展示程序左侧新增独立的“场景示例”,与原来的基础控件、文本、数值、数据、菜单、选择器和绘制参数分类并列。新增内容展示的是应用中的组合控件:有模型、布局和事件,不是只给原控件换个标题。
从哪里进入
点击左侧“场景示例”,顶部六段选择器切换应用。默认先打开外卖点餐。Ctrl+K 可以直接搜索并跳转到任一场景。
java -jar jdk8/demo/liquidglass-ui-demo-jdk8.jar --scene=food
java -jar jdk21/demo/liquidglass-ui-demo-jdk21.jar --scene=chat
java -jar jdk21/demo/liquidglass-ui-demo-jdk21.jar --scene=client --grid
--scene 接受 food/chat/client/music/settings/files 或 0..5,隐式选择新分类 --page=9。原页面0..8保持原编号。
右上角的 LiquidGlass 设置 一直存在,仍提供模糊、高光、色散、折射、tint、网格和背景动画。没有移除上一版已修复的材质、字体、黑白默认主题和动画。
六个场景
外卖点餐 / FoodScene
餐品搜索、主食/轻食/饮品分类、商品卡片和加入购物袋,右侧实时显示数量、商品金额、优惠、配送费和合计。每个商品数量使用本库横向 Spinner。切换到店自取会取消配送费,空购物袋不会收运费;金额使用整数分计算。
满30减4是演示用的可切换优惠。备注和确认订单 Modal 有实际状态。确认后生成当前会话内的订单说明并清空购物袋;取消则保留。小窗口下购物袋移到菜单下面,不压扁为不可用的细列。
组合:Panel、Label、SearchField、ButtonGroup、商品卡片、Button、Spinner、CheckBox、TextField、ScrollPane、Modal、通知。
不连接真实商户,不支付,不发送真实订单。所有商品、价格和订单是程序内的示例数据。
即时聊天 / ChatScene
会话列表和搜索,每个会话分别保存消息和未发送草稿;左右对齐的消息气泡包含作者与时间。多行输入、发送、Ctrl+Enter、快捷消息、自动滚动和清空当前会话菜单都可操作。
“本地自动回复”打开时会在UI时间经过短暂延迟后生成固定示例回复,关闭则不自动回复。输入限500字符,空白不会发送。
组合:ListBox、SearchField、Avatar、Label、Panel气泡、TextArea、CheckBox、Button、PopupMenu、ScrollPane。
不是即时通讯客户端,不连接他人账号或服务器,不保证复杂富文本/双向文字排版。消息仅保存在当前展示窗口。
外挂风格面板 / ClientScene
POLARIS / ClickGUI 风格界面,具有战斗、移动、视觉、世界和杂项分类,模块搜索和开关,参数详情、强度滑块、区间滑块、模式下拉、快捷键录入和“仅按住时启用”。配置预设与当前会话的参数快照可以保存/恢复。
模块名称是界面展示标签,例如 KillAura、Velocity、Sprint、HUD、Scaffold、IRC。所有开关只改变内存模型与画面,不会触发鼠标自动化、网络聊天、DLL注入、进程访问或游戏行为。
组合:ListBox、SearchField、Switch、Button、Slider、RangeSlider、ComboSelect、KeyBindingField、CheckBox、ScrollPane、通知。
缩窄窗口后参数检查器放到下方,通过外层滚动访问,不把整列藏掉。
音乐播放 / MusicScene
播放列表、搜索、曲目切换、播放/暂停、进度条拖动、音量、收藏、随机和循环开关。当前曲目的进度在播放状态按UI时间变化;离开该场景时暂停计时,而不会继续后台播放。
组合:SDF装饰唱片、Label、ListBox、SearchField、Button、ToggleButton、Slider、Switch。
这是播放器控制界面模拟,不加载音乐文件,也不输出声音。 音量控件保存状态,不改变系统音量;不要把进度动画当作实际音频播放。
系统设置 / SettingsScene
个人资料、签名、示例语言选项、主题与强调色、字号、减少动态效果、通知与声音偏好;应用保存当前会话快照,撤销恢复快照。
深/浅主题、强调色、字号和减少动态效果实际修改当前Ui;切换主题保留已经调整的sigma、高光、色散等材质参数。语言字段仅记录示例设置,不自动翻译应用。声音选项不调用系统音频。
组合:TextField、ComboSelect、ButtonGroup、ColorPicker、Slider、Switch、Button、Panel、通知。
文件管理 / FilesScene
内存中的虚拟文件工作区,具有目录树、面包屑、上一层、搜索、表格排序、网格/列表切换、详情、新建文件夹、重命名和上下文删除。重名、空白、非法路径字符会被拒绝;选择与搜索过滤保持一致。
组合:TreeView/TreeNode、Breadcrumb、SearchField、ButtonGroup、Table、GridView、Button、PopupMenu、Modal、ScrollPane。
不列出、不读取、不修改磁盘。 虚拟条目的新增、改名、删除只作用于当前窗口的内存集合;关闭程序即丢弃。原控件库的真实 FilePicker 仍存在,但这个示例没有调用它。
状态与交互范围
六个场景各创建一次,由 SceneExamples 缓存。切换场景、切换左侧分类,再回到此分类,会保留购物袋、草稿、参数、收藏、设置和虚拟目录。关闭窗口后不做持久化,没有外部账号或隐藏后台任务。
鼠标事件、焦点、弹窗和输入由现有 Ui 接收;模型改变只更新对应控件,不反复创建整个界面。原有弹窗/按压/切换/滑动动画继续由原控件负责。外层滚动和内部列表滚动分别处理自己的内容。
布局采用原来的逻辑间距(容器留白16、同级间隔12)。根据可用宽度,菜单/购物袋、联系人/聊天区和侧栏/参数区会堆叠;该版本不是任意手机窄屏布局,展示窗口依然有原来的最小尺寸限制。
作为库的一部分使用
可复用类位于 polaris.sdk.ui.samples。它们包含在两个版本的 library/source JAR 中,不要求引用 demo JAR。它们是实际 Panel 子类,能加入现有控件树。
import polaris.sdk.ui.samples.FoodScene;
import polaris.sdk.ui.controls.Panel;
FoodScene food = new FoodScene();
food.bounds(16, 16, 1040, food.preferredHeight(1040));
parentPanel.add(food); // parentPanel 是宿主已有的 Panel
改变尺寸时重设 bounds 的宽度和 preferredHeight;内容超出视区时让外部 ScrollPane 管理滚动。仍然只在拥有 Ui 和 OpenGL context 的渲染线程更新。父级控制具体布局,不另开窗口。
有场景选择器的合集:
SceneExamples examples = new SceneExamples();
examples.select(SceneExamples.indexOf("chat"));
// 将 examples 加入宿主 ScrollPane / Panel;按父级可用宽度设置 bounds。
公开查询接口包括 FoodScene.cart()/orderCount()、ChatScene.messages()/selectContact()、ClientScene.modules()/selectedModule()、MusicScene.playing()/position()、SettingsScene.savedName()、FilesScene.entries()/navigate()。详细的真实签名请查离线 Javadoc,不依据这里的简略名称猜参数。
独立窗口便捷入口 SampleWindows.gallery(args) 或 SampleWindows.run("food", args) 可用于演示。已有游戏/渲染器不调用此窗口入口,只加入对应 Panel。
源码入口和测试
新增独立入口:SceneGalleryDemo、FoodDeliveryApp、ChatApp、ClientPanelApp、MusicPlayerApp、PreferencesApp、FileWorkspaceApp。它们委托 SampleWindows 创建宿主窗口;实际控件组合的所有源码在 src/main/java/polaris/sdk/ui/samples/。
本次没有修改2.4.3的GLSL、C/native或控件核心算法,仅扩展示例组合、展示导航和启动参数。新场景使用的是原本的 SDF、Bézier、模糊、色散、文字与裁剪管线,不是单独的Swing/Web页面。
测试提供场景模型/多尺寸布局检查、真实桌面鼠标键盘交互,以及6个场景的实际渲染截图;环境与未验证平台见根目录 TEST-REPORT.md。