创建新页面
本文档详细介绍了如何在SCE-Universe Java Edition应用程序中创建和集成新的“页面”。在SCE-Universe中,“页面”是一种控制台界面模块,负责显示特定的内容并处理用户输入,从而实现应用程序内的导航和功能。
概述
SCE-Universe Java Edition采用一种基于控制台的模块化架构,其中每个“页面”都作为一个独立的Java类来定义。这些页面可以显示信息、提供操作选项,并根据用户输入引导应用程序流向其他页面。理解页面的创建与管理机制是扩展应用程序功能和自定义用户交互的关键。
要创建一个新页面,您需要:
- 定义一个继承自
router_core的Java类。 - 在该类中实现
buildPage()方法以定义页面的显示内容。 - 在该类中实现
handlePageInput()方法以处理用户输入并决定下一个页面。 - 在
src/cn/oraclestar/sce/system/router/pages.java中为新页面分配一个唯一的整数ID。 - 在应用程序启动时,通过
App.register()方法将新页面注册到路由系统。
架构
页面的管理和导航由一系列核心组件协同完成。App 类负责应用程序的初始化,包括注册所有页面和设置。router_core 是所有页面的基类,也是实际处理页面切换和主循环的路由核心。PageManager 提供页面注册功能,而 pageheader 则提供页面通用的UI交互能力。pages.java 定义了所有页面的唯一ID。
Source:
核心流程
创建一个新页面并使其在应用程序中可用的核心流程遵循以下步骤:定义页面ID -> 实现页面类 -> 注册页面。页面一旦注册,路由核心将在主应用程序循环中管理其显示和交互。
Source:
如何创建新页面
1. 定义页面ID
首先,您需要为新页面分配一个唯一的整数ID。这通常在 src/cn/oraclestar/sce/system/router/pages.java 文件中作为 public static final int 常量进行定义。
示例:
1package cn.oraclestar.sce.system.router;
2
3public class pages {
4 // ... 其他页面ID ...
5 public static final int NEW_FEATURE_PAGE = 99; // 为您的新功能页面定义一个ID
6 public static final int ANOTHER_CUSTOM_PAGE = 100; // 另一个自定义页面
7}Source: pages.java
2. 实现页面类
创建一个新的Java类,例如 YourNewPage.java,并让它继承 cn.oraclestar.sce.system.router.router_core。您必须实现 buildPage() 和 handlePageInput() 方法。
buildPage():使用继承自pageheader的_ui实例来构建和显示页面的视觉内容。例如,您可以使用_ui.insertTitle()、_ui.insertOption()、_ui.display()等方法。handlePageInput(String input):接收用户输入,并根据输入逻辑返回下一个页面的ID。如果输入不导致页面切换,则返回pages.CURRENT以停留在当前页面;返回pages.EXIT则退出应用。
示例:
1package cn.oraclestar.sce.system.pages; // 您可以选择在pages包或自定义包中
2
3import cn.oraclestar.sce.system.router.pages;
4import cn.oraclestar.sce.system.router.router_core;
5import cn.oraclestar.sce.system.setManager.setManager_core;
6
7public class YourNewPage extends router_core {
8
9 @Override
10 protected void buildPage() throws Exception {
11 _ui.insertTitle("欢迎来到我的新页面");
12 _ui.display("这是一个展示新功能的页面。", true);
13 _ui.insertOption("返回主菜单", pages.MAIN);
14 _ui.insertOption("退出", pages.EXIT);
15
16 // 示例:根据设置显示额外选项
17 if ((Boolean) setManager_core.getVaule("enableNewFeature")) {
18 _ui.insertOption("查看高级功能", 50); // 假设ID 50是高级功能页
19 }
20 _ui.insertNewLine();
21 _ui.insertInput(); // 提示用户输入
22 }
23
24 @Override
25 protected int handlePageInput(String input) {
26 if (input == null) {
27 return pages.CURRENT; // 无效输入,停留在当前页
28 }
29 input = input.trim();
30 switch (input) {
31 case "1": // 对应 "返回主菜单" 的选项
32 return pages.MAIN;
33 case "0": // 对应 "退出" 的选项
34 return pages.EXIT;
35 case "2": // 对应 "查看高级功能" 的选项 (如果 enabledNewFeature 为 true)
36 try {
37 if ((Boolean) setManager_core.getVaule("enableNewFeature")) {
38 return 50; // 跳转到高级功能页
39 }
40 } catch (Exception e) {
41 e.printStackTrace();
42 }
43 return pages.CURRENT;
44 default:
45 _ui.display("无效的选项,请重新输入。", true);
46 return pages.CURRENT; // 默认停留在当前页
47 }
48 }
49}Source: main.java (作为实现示例)
3. 注册新页面
最后,您需要在应用程序的 App.register() 方法中注册您的新页面,以便路由系统能够识别并导航到它。
示例:
1package cn.oraclestar.sce.App;
2
3import cn.oraclestar.sce.system.router.pages;
4import cn.oraclestar.sce.system.router.router_core;
5import cn.oraclestar.sce.system.pages.YourNewPage; // 导入您的新页面类
6import cn.oraclestar.sce.system.setManager.setManager_core;
7
8public class App {
9 // ... 其他代码 ...
10
11 private static void register(){
12 try{
13 // ... 注册其他设置 ...
14 setManager_core.addSet("enableNewFeature",true); // 注册新功能设置
15
16 // ... 注册其他页面 ...
17
18 // 注册您的新页面
19 router_core.addPage(pages.NEW_FEATURE_PAGE, new YourNewPage());
20
21 } catch(Exception e){
22 e.printStackTrace();
23 }
24 }
25 // ... 其他代码 ...
26}Source: App.java
配置选项
在 App.register() 方法中,您可以使用 setManager_core.addSet() 方法来添加和初始化应用程序的各种设置。这些设置可以在运行时被页面逻辑读取和修改。
| 选项名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
homeTitle | String | "SCE-UNIVERSE" | 应用程序主页的标题。 |
mod | Boolean | false | 是否启用插件功能。可以通过命令行参数 -mod 覆盖。 |
port | Integer | 8080 | 应用程序监听的端口号。 |
enableNewFeature | Boolean | true | (示例) 控制新功能页面是否显示高级功能的选项。 |
isAutoSaveCardData | Boolean | true | 是否自动保存卡牌数据。 |
cardDataSavePath | String | "" | 卡牌数据保存路径。 |
settingDataSavePath | String | "" | 设置数据保存路径。 |
v5DefaultSpeed | String | {"main":"0",...} | V5版本默认速度设置,存储为JSON字符串。 |
isV5rectify | Boolean | false | 是否启用V5校正功能。 |
注意: 应用程序设置会持久化到 settings.xml 文件中。
API 参考
cn.oraclestar.sce.system.router.router_core
作为所有具体页面的基类,router_core 提供并要求实现以下核心方法:
buildPage(): void
- 描述: 抽象方法。每个具体页面必须实现此方法来构建和显示其用户界面内容。此方法应使用
_ui实例的方法(如insertTitle,insertOption,display等)向控制台输出信息。 - 参数: 无。
- 返回: 无。
- 抛出:
Exception(如果页面构建过程中发生错误)。
handlePageInput(input: String): int
- 描述: 抽象方法。每个具体页面必须实现此方法来解析用户的控制台输入,并根据输入内容决定下一步的操作。
- 参数:
input(String): 用户从控制台输入的字符串。
- 返回:
int。表示下一个要跳转的页面的ID。pages.CURRENT(0): 停留在当前页面。pages.EXIT(-1): 退出应用程序。- 其他页面ID (正整数): 跳转到对应ID的页面。
- 抛出: 无。
cn.oraclestar.sce.system.router.PageManager
PageManager 是 router_core 的父类,提供了页面注册的核心功能。
addPage(id: int, page: pageheader): void
- 描述: 静态方法。用于将一个页面实例注册到路由系统中,并为其分配一个唯一的整数ID。
- 参数:
id(int): 页面的唯一标识符,通常来自pages.java定义的常量。page(pageheader): 要注册的页面实例,实际上传入的是继承自router_core的具体页面对象。
- 返回: 无。
- 抛出: 无。