diff --git a/.gitee/ISSUE_TEMPLATE/bug.yml b/.gitee/ISSUE_TEMPLATE/bug.yml
index 21556cf24ebb28cd6dcbd101d1fa68477ce4b32c..3906921348777a95ca59e68c867ac87cb03e3a86 100644
--- a/.gitee/ISSUE_TEMPLATE/bug.yml
+++ b/.gitee/ISSUE_TEMPLATE/bug.yml
@@ -1,7 +1,7 @@
 name: Bug 反馈
 description: 当你在代码中发现了一个 Bug,导致应用崩溃或抛出异常,或者有一个组件存在问题,或者某些地方看起来不对劲。
 title: "[Bug]: "
-labels: ["bug"]
+labels: [ "bug" ]
 body:
   - type: markdown
     attributes:
diff --git a/.gitee/ISSUE_TEMPLATE/feature.yml b/.gitee/ISSUE_TEMPLATE/feature.yml
index 6291f2f8a62365719b05e7b258157770e6c24088..59bc7a008eaa98686be31d1358c53375a8371822 100644
--- a/.gitee/ISSUE_TEMPLATE/feature.yml
+++ b/.gitee/ISSUE_TEMPLATE/feature.yml
@@ -1,7 +1,7 @@
 name: 功能建议
 description: 对本项目提出一个功能建议
 title: "[功能建议]: "
-labels: ["feature"]
+labels: [ "feature" ]
 body:
   - type: markdown
     attributes:
diff --git a/.gitee/ISSUE_TEMPLATE/refactor.yml b/.gitee/ISSUE_TEMPLATE/refactor.yml
index 94cff32fd98aa66a61ed9389cee3920b1ea111f8..c07bd8ff08de89c22da9f870e232ea36fc2ab158 100644
--- a/.gitee/ISSUE_TEMPLATE/refactor.yml
+++ b/.gitee/ISSUE_TEMPLATE/refactor.yml
@@ -1,7 +1,7 @@
 name: 重构
 description: 对本项目提出一个功能建议
 title: "[重构]: "
-labels: ["refactor"]
+labels: [ "refactor" ]
 body:
   - type: textarea
     id: related-problem
diff --git a/README.md b/README.md
index 983c79575cb1eb3cd7459ff36fc74b51758e2ab8..c43ae952da16cddb2d46f916a86c9757617013f4 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,9 @@
 
 
 
+JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨在提供用户友好的界面和丰富的功能。无论你是在Linux、Windows还是macOS系统上使用,JNotepad都能满足你对文本编辑和查看的需求。
+JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。
 
-JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨在提供用户友好的界面和丰富的功能。无论你是在Linux、Windows还是macOS系统上使用,JNotepad都能满足你对文本编辑和查看的需求。 JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。
 ## 功能介绍
 
 - 文本编辑和查看:JNotepad提供了完善的文本编辑和查看功能,使你能够轻松创建、编辑和浏览各种类型的文本文件。
@@ -16,31 +17,32 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨
 
 - 基于Java:JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。
 
-
 ## 安装教程
 
-1.  Windows 平台,可以直接使用我编译好的可执行程序或自己编译
+1. Windows 平台,可以直接使用我编译好的可执行程序或自己编译
 
 [gitee-download]: https://gitee.com/jcnc-org/JNotepad/releases
-[java-download]: https://www.oracle.com/cn/java/technologies/downloads/
-[qq-url]: http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=zOfwWb1lcle68cbEdJCjSIp3Itx0nEC0&authKey=bOsZFT9OVYZpZQbS6IYO4onBQoeBorF5nanMEi1G%2FgPbzmUkOweXBo9qB0G34R5K&noverify=0&group_code=386279455
 
+[java-download]: https://www.oracle.com/cn/java/technologies/downloads/
 
+[qq-url]: http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=zOfwWb1lcle68cbEdJCjSIp3Itx0nEC0&authKey=bOsZFT9OVYZpZQbS6IYO4onBQoeBorF5nanMEi1G%2FgPbzmUkOweXBo9qB0G34R5K&noverify=0&group_code=386279455
 
 - [下载][gitee-download]
 
 2. Linux/MacOS 平台,查看入门指南
 
-
 ## 入门指南
 
 要使用 JNotepad,请按照以下步骤进行:
 
 1. 下载并安装 Java(如果尚未安装)。
+
 - [下载][gitee-download]
 
 2. 克隆或下载 JNotepad 项目。
+
 
git clone https://gitee.com/jcnc-org/JNotepad.git
+
 3. 在您偏好的 Java IDE 中打开项目。
 
 ## 使用方法
@@ -48,10 +50,12 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨
 1. 运行 `JNotepad` 类以启动应用程序。
 2. 主窗口将显示菜单栏、标签区域和状态栏。
 3. 使用菜单栏执行各种操作:
-  - `文件 > 新建`:创建一个带有空白文本区域的新标签。
-  - `文件 > 打开`:打开现有文本文件进行编辑。
-  - `文件 > 保存`:将当前活动标签的内容保存到关联文件中。
-  - `文件 > 另存为`:将当前活动标签的内容保存为新文件。
+
+- `文件 > 新建`:创建一个带有空白文本区域的新标签。
+- `文件 > 打开`:打开现有文本文件进行编辑。
+- `文件 > 保存`:将当前活动标签的内容保存到关联文件中。
+- `文件 > 另存为`:将当前活动标签的内容保存为新文件。
+
 4. 在每个标签的文本区域中编辑内容。
 5. 状态栏将显示有关光标位置和文本统计信息的信息。
 
@@ -64,7 +68,9 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨
             17.0.1
         
     
- ## 软件运行截图
+
+## 软件运行截图
+
 - Windows 平台
   
 - MacOS 平台   
diff --git "a/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md" "b/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md"
index db0eecf6a73c09aab0862d5add92d70d675aef3c..ac8389dae118b36183bed4bed2dccfa07b53df60 100644
--- "a/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md"
+++ "b/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md"
@@ -1,19 +1,31 @@
 # 1. 开发流程
+
 基于**AoneFlow**开发流程,具体请阅读:[在阿里,我们如何管理代码分支?](https://developer.aliyun.com/article/573549)
+
 ## 1.1 IDEA IDE版
-###  步骤一 Fork JCNC/JNotepad或同步JCNC/JNotepad到个人仓库
+
+### 步骤一 Fork JCNC/JNotepad或同步JCNC/JNotepad到个人仓库
+
 #### 首次开发,进行Fork操作
+
 
+
 #### 非首次开发,进行同步操作
+
 
 
 ### 步骤二 clone个人仓库或fetch
+
 #### 首次开发,clone个人仓库
+
 
+
 #### 非首次开发,执行fetch
+
 
 
 ### 步骤三 从remote下的master分支创建本地开发分支。
+
 **特殊情况:开发依赖release分支已提交内容,或是对已提交内容进行修改,那么需要从release分支上进行拉取。**
 
 
@@ -23,12 +35,15 @@
 ### 步骤四 推送本地分支到远程
 
 ### 步骤五 发起Pull Request(PR)
+
 
 
 **注意:目标分支选择预期要发布的release分支**
 
 ## 1.2 GIT命令行版本
+
 步骤一、步骤二、步骤五同1.1操作
+
 ```shell
 # 步骤三
 git fetch
@@ -38,24 +53,28 @@ git push origin feature-demo
 ```
 
 ## 1.3 分支命名规则
-|issue类别|分支名格式|示例|
-|--------|--------|----|
-|功能/优化/文档修改|feature-issue编号|feature-I7W9LX|
-|bug fix| fix-issue编号| fix-I7W9LX|
-|代码重构|refactor-issue编号|refactor-I7W9LX|
+
+| issue类别    | 分支名格式            | 示例              |
+|------------|------------------|-----------------|
+| 功能/优化/文档修改 | feature-issue编号  | feature-I7W9LX  |
+| bug fix    | fix-issue编号      | fix-I7W9LX      |
+| 代码重构       | refactor-issue编号 | refactor-I7W9LX |
 
 # 2. IDEA插件配置
+
 * 安装Resource Bundle插件
   
 * 安装成功后,打开i18n.properties,可以看到Resource Bundle tab
   
 
 # Q&A
+
 Q: 本地开发时,主仓库合并了新代码,如何处理?    
 A: 继续完成本地开发,发起PR时再解决冲突。
 
 Q: 解决冲突步骤是什么?    
 A: 一般按如下步骤。
+
 1. 先同步主仓库
 2. 本地仓库进行fetch
 3. 本地开发分支merge/pull/rebase更新的release分支
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 48e1b7edefd53993c2385bc08dfef1a960f613a3..83da6509830062ec5f73c90be66830aaaf30b623 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,6 +1,6 @@
 
-
     4.0.0
 
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 3843aa4d839c63904218875dc4bfbb0833ff2f25..dbfe06eedc45c6dd39ba2faf6352597d981c9670 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -23,11 +23,6 @@ module org.jcnc.jnotepad {
     exports org.jcnc.jnotepad.controller.event.handler.menuBar;
     exports org.jcnc.jnotepad.tool;
     exports org.jcnc.jnotepad.Interface;
-    exports org.jcnc.jnotepad.ui.module;
-    exports org.jcnc.jnotepad.ui.setStage;
-    exports org.jcnc.jnotepad.root.center.main.center.tab;
-    exports org.jcnc.jnotepad.root.top.menu;
-    exports org.jcnc.jnotepad.view.manager;
     opens org.jcnc.jnotepad.app.config;
     exports org.jcnc.jnotepad.root.center.main.bottom.status;
 
diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java
index 393ae1085824a7d5da962dbb39f0066fa2a9e14e..179db049fdddee7b6ef2745ee060a6690e5cd97c 100644
--- a/src/main/java/org/jcnc/jnotepad/LunchApp.java
+++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java
@@ -27,10 +27,6 @@ import java.util.concurrent.ExecutorService;
  * @author 许轲
  */
 public class LunchApp extends Application {
-    /**
-     * 线程池
-     */
-    private final ExecutorService threadPool = ThreadPoolManager.getThreadPool();
     private static final Pane ROOT = new Pane();
     private static final Scene SCENE;
 
@@ -40,6 +36,10 @@ public class LunchApp extends Application {
         SCENE = new Scene(ROOT, width, length);
     }
 
+    /**
+     * 线程池
+     */
+    private final ExecutorService threadPool = ThreadPoolManager.getThreadPool();
 
     public static void main(String[] args) {
         launch(args);
@@ -48,6 +48,7 @@ public class LunchApp extends Application {
     public static Window getWindow() {
         return SCENE.getWindow();
     }
+
     @Override
     public void start(Stage primaryStage) {
         Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
index b9e11bc8a95b8388851e59ff5d6e140d6fd229a9..ef0148e1441c261849a97c3adcf4db2e8beb116f 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
@@ -30,6 +30,7 @@ public class AppConfigController {
     private static final AppConfigController INSTANCE = new AppConfigController();
     private AppConfig appConfig;
     private String dir;
+
     private AppConfigController() {
         setDir(Paths.get(System.getProperty("user.home"), ".jnotepad").toString());
         loadConfig();
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java
index a81cbc54fa26d744dea4a3277f6a20fbeeaa6b5e..26c2a8356de85d46843d0e5aca65e8eb39a5115a 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java
@@ -4,8 +4,9 @@ import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
 import org.jcnc.jnotepad.constants.TextConstants;
+import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox;
 import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
-import org.jcnc.jnotepad.tool.UiUtil;
+import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
 import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
 import org.jcnc.jnotepad.view.manager.ViewManager;
 
@@ -33,7 +34,7 @@ public class NewFile implements EventHandler {
         // 创建一个新的文本编辑区
         LineNumberTextArea textArea = new LineNumberTextArea();
         // TODO: refactor:统一TextArea新建、绑定监听器入口
-        ViewManager viewManager = UiUtil.getViewManager();
+        ViewManager viewManager = ViewManager.getInstance();
         // 创建标签页
         JNotepadTab jNotepadTab = new JNotepadTab(
                 UiResourceBundle.getContent(TextConstants.NEW_FILE)
@@ -42,8 +43,8 @@ public class NewFile implements EventHandler {
         // 设置当前标签页与本地文件无关联
         jNotepadTab.setRelevance(false);
         // 将Tab页添加到TabPane中
-        UiUtil.getJnotepadTabPane().addNewTab(jNotepadTab);
+        JNotepadTabPane.getInstance().addNewTab(jNotepadTab);
         // 更新编码信息
-        UiUtil.getStatusBox().updateEncodingLabel();
+        JNotepadStatusBox.getInstance().updateEncodingLabel();
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java
index d69b0be9c6ae58f654371cda7cf9918e1a03db60..f73dc3714138f30946ffe237c00feb81b6f4afef 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java
@@ -84,7 +84,7 @@ public class OpenFile implements EventHandler {
      */
     public void openFile(File file) {
         // 获取标签页集合
-        JNotepadTabPane jnotepadTabPane = UiUtil.getJnotepadTabPane();
+        JNotepadTabPane jnotepadTabPane = JNotepadTabPane.getInstance();
         // 遍历标签页,查找匹配的标签页
         for (Tab tab : jnotepadTabPane.getTabs()) {
             // 获取绑定的文件
@@ -124,7 +124,7 @@ public class OpenFile implements EventHandler {
                 // 设置当前标签页关联本地文件
                 tab.setRelevance(true);
                 tab.setUserData(file);
-                UiUtil.getJnotepadTabPane().addNewTab(tab);
+                JNotepadTabPane.getInstance().addNewTab(tab);
             });
         } catch (IOException ignored) {
             LogUtil.getLogger(this.getClass()).info("已忽视IO异常!");
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java
index c152b44bfce1a916bbb31e845a30e5ba1fca3b43..247e7a6949d26cf26eb2ef5da5322cda7ab2ae3b 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java
@@ -8,6 +8,7 @@ import javafx.stage.FileChooser;
 import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
 import org.jcnc.jnotepad.constants.TextConstants;
 import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
+import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
 import org.jcnc.jnotepad.tool.LogUtil;
 import org.jcnc.jnotepad.tool.UiUtil;
 import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
@@ -26,7 +27,7 @@ public class RenameFile implements EventHandler {
     @Override
     public void handle(ActionEvent actionEvent) {
         // 获取当前标签页
-        JNotepadTab jnotepadtab = UiUtil.getJnotepadtab();
+        JNotepadTab jnotepadtab = JNotepadTabPane.getInstance().getSelected();
         if (jnotepadtab == null || jnotepadtab.getText().isEmpty()) {
             return;
         }
@@ -90,7 +91,7 @@ public class RenameFile implements EventHandler {
         // 获取原始文件对象
         File file = (File) jnotepadtab.getUserData();
         // 获取应用窗口并绑定
-        File newFile =  TextFileChooserFactory.getInstance()
+        File newFile = TextFileChooserFactory.getInstance()
                 .createFileChooser(
                         UiResourceBundle.getContent(TextConstants.RENAME),
                         jnotepadtab.getText(),
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java
index 5eff265a9b30d154b21712a2c8784d5b77d33f78..d21d17091e14e3a32499a84ef5b636fa97804377 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java
@@ -7,6 +7,8 @@ import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
 import org.jcnc.jnotepad.constants.TextConstants;
 import org.jcnc.jnotepad.controller.i18n.LocalizationController;
 import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
+import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
+import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar;
 import org.jcnc.jnotepad.tool.LogUtil;
 import org.jcnc.jnotepad.tool.SingletonUtil;
 import org.jcnc.jnotepad.tool.UiUtil;
@@ -34,7 +36,7 @@ public class SaveFile implements EventHandler {
     @Override
     public void handle(ActionEvent actionEvent) {
         // 获取当前tab页
-        JNotepadTab selectedTab = UiUtil.getJnotepadtab();
+        JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
         if (selectedTab == null) {
             return;
         }
@@ -50,7 +52,7 @@ public class SaveFile implements EventHandler {
             if (CONFIG_NAME.equals(selectedTab.getText())) {
                 // 重新加载语言包和快捷键
                 SingletonUtil.getAppConfigController().loadConfig();
-                UiUtil.getMenuBar().initShortcutKeys();
+                JNotepadMenuBar.getInstance().initShortcutKeys();
                 LocalizationController.initLocal();
                 logger.info("已刷新语言包!");
                 logger.info("已刷新快捷键!");
@@ -66,7 +68,7 @@ public class SaveFile implements EventHandler {
      * @see LogUtil
      */
     protected void saveTab(Class> currentClass) {
-        JNotepadTab selectedTab = UiUtil.getJnotepadtab();
+        JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
         if (selectedTab == null) {
             return;
         }
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java
index f46891bf941ff21e4147c9061b982ad119e54b85..4d3671930109512b916c26bad126b29857322e7b 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java
@@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.event.handler.tool;
 
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
-import org.jcnc.jnotepad.tool.UiUtil;
+import org.jcnc.jnotepad.ui.setStage.SetStage;
 
 
 /**
@@ -21,7 +21,7 @@ public class SetBtn implements EventHandler {
      */
     @Override
     public void handle(ActionEvent event) {
-        UiUtil.getSetStage().openSetStage();
+        SetStage.getInstance().openSetStage();
     }
 
 
diff --git a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java
index 62ea0ee3a59b6eec648fd3904cf7b082c6ddfb98..1cb4fb9b11ed17294e58b52bba47173c1d2a9972 100644
--- a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java
+++ b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java
@@ -9,6 +9,7 @@ import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
 
 /**
  * 根舞台下的Root主布局
+ *
  * @author 许轲
  */
 public class RootBorderPane extends AbstractBorderPane {
@@ -19,6 +20,10 @@ public class RootBorderPane extends AbstractBorderPane {
         initRootBorderPane();
     }
 
+    public static RootBorderPane getInstance() {
+        return INSTANCE;
+    }
+
     private void initRootBorderPane() {
         //中间,用于显示Main主布局
         setCenterComponent(MainBorderPane.getInstance());
@@ -31,10 +36,6 @@ public class RootBorderPane extends AbstractBorderPane {
         //主布局的下面
         setBottomComponent(RootBottomSideBarVBox.getInstance());
     }
-
-    public static RootBorderPane getInstance() {
-        return INSTANCE;
-    }
 }
 
 
diff --git a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java
index 8a02199f8da88062e8923da164efe164b811ace1..bb57713af156cce3f06593d42ea64ea7b3f9ad25 100644
--- a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java
+++ b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java
@@ -11,11 +11,11 @@ public class RootBottomSideBarVBox extends AbstractVBox {
         initSidebarVBox();
     }
 
-    private void initSidebarVBox() {
-        getChildren().addAll(JNotepadStatusBox.getInstance());
-    }
-
     public static RootBottomSideBarVBox getInstance() {
         return INSTANCE;
     }
+
+    private void initSidebarVBox() {
+        getChildren().addAll(JNotepadStatusBox.getInstance());
+    }
 }
diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java
index 8d679a7c2f6d563f545ecbae3df44cfe94731539..8525402b4214eb8561005505972d19f31db7dfa5 100644
--- a/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java
+++ b/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java
@@ -16,15 +16,15 @@ public class MainBorderPane extends AbstractBorderPane {
         initRootBorderPane();
     }
 
+    public static MainBorderPane getInstance() {
+        return INSTANCE;
+    }
+
     private void initRootBorderPane() {
         //文本框
         setCenterComponent(JNotepadTabPane.getInstance());
 
     }
-
-    public static MainBorderPane getInstance() {
-        return INSTANCE;
-    }
 }
 
 
diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java
index 00e7c0fe9162600888c04d61acee44a9b7663ed0..2d3007eb8642a46b85bf51ccde56018509dae62b 100644
--- a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java
+++ b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java
@@ -80,6 +80,7 @@ public class JNotepadTab extends Tab {
 
     /**
      * 保存为指定文件
+     *
      * @param file 新文件
      */
     public void save(File file) {
diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java
index df2e03ec048ebef3568fc73547ad7e80c77ac040..ff8f6139a835e7c1548edf83580588a6914f412e 100644
--- a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java
+++ b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java
@@ -1,8 +1,9 @@
 package org.jcnc.jnotepad.root.center.main.center.tab;
 
 import javafx.scene.control.TabPane;
+import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox;
+import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar;
 import org.jcnc.jnotepad.tool.SingletonUtil;
-import org.jcnc.jnotepad.tool.UiUtil;
 
 /**
  * 标签页布局组件封装。
@@ -30,10 +31,10 @@ public class JNotepadTabPane extends TabPane {
                 (ov, from, to) -> {
                     if (to != null) {
                         // 更新菜单栏中与tab相关设置
-                        UiUtil.getMenuBar().updateMenuStatusBySelectedTab();
+                        JNotepadMenuBar.getInstance().updateMenuStatusBySelectedTab();
                     }
                     // 更新状态标签
-                    UiUtil.getStatusBox().updateWhenTabSelected();
+                    JNotepadStatusBox.getInstance().updateWhenTabSelected();
                 }
         );
     }
@@ -71,6 +72,6 @@ public class JNotepadTabPane extends TabPane {
     public void fireTabSelected() {
         JNotepadTab selectedTab = getSelected();
         selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig());
-        UiUtil.getStatusBox().updateWhenTabSelected();
+        JNotepadStatusBox.getInstance().updateWhenTabSelected();
     }
 }
diff --git a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java
index 72426fcb427c376f68ae49d08865508240df308b..d4e34c19cf41a1ddd87be04e1ffa65ed63aa571b 100644
--- a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java
+++ b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java
@@ -10,11 +10,11 @@ public class RootRightSideBarVBox extends AbstractVBox {
         initSidebarVBox();
     }
 
-    private void initSidebarVBox() {
-
-    }
-
     public static RootRightSideBarVBox getInstance() {
         return INSTANCE;
     }
+
+    private void initSidebarVBox() {
+
+    }
 }
diff --git a/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java
index 9ef19dd5731ed836dbd61c93545082b970904332..7e8bd808240c09e2537a4a34842a06e8e0e39dc4 100644
--- a/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java
+++ b/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java
@@ -17,14 +17,14 @@ public class RootTopBorderPane extends AbstractBorderPane {
         initRootBorderPane();
     }
 
+    public static RootTopBorderPane getInstance() {
+        return INSTANCE;
+    }
+
     private void initRootBorderPane() {
         //文本框上面
         setTopComponent(JNotepadMenuBar.getInstance());
     }
-
-    public static RootTopBorderPane getInstance() {
-        return INSTANCE;
-    }
 }
 
 
diff --git a/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java
index 22e1a7de12fe3815fa330a4d5e4f2b73238aef85..ee986bb31e71c6222e86caf904682e2791fa8db9 100644
--- a/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java
+++ b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java
@@ -52,7 +52,7 @@ public class SingletonUtil {
     }
 
     /**
-     * 获取UI资源绑定组件I
+     * 获取UI资源绑定组件
      *
      * @return org.jcnc.jnotepad.app.i18n.UiResourceBundle
      * @since 2023/8/30 12:45
diff --git a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java
index b114473271c90a89c685e809ddfefb911a41f3ab..bd4caefe85532d970a196313a98b3b7359dc62c4 100644
--- a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java
+++ b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java
@@ -2,61 +2,25 @@ package org.jcnc.jnotepad.tool;
 
 import javafx.scene.image.Image;
 import javafx.stage.Window;
+import org.jcnc.jnotepad.LunchApp;
 import org.jcnc.jnotepad.constants.AppConstants;
-import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox;
-import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
-import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
-import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar;
-import org.jcnc.jnotepad.ui.setStage.SetStage;
-import org.jcnc.jnotepad.view.manager.ViewManager;
 
 import java.util.Objects;
 
 /**
- * UI工具
- * 封装了项目所有的UI组件,以减少组件单例模式造成代码的复杂性
+ * UI工具
  *
  * @author gewuyou
  */
 public class UiUtil {
-    /**
-     * 标签页布局组件
-     */
-    private static final JNotepadTabPane TAB_PANE = JNotepadTabPane.getInstance();
-    /**
-     * 视图管理组件
-     */
-    private static final ViewManager VIEW_MANAGER = ViewManager.getInstance();
-    /**
-     * 状态栏组件
-     */
-    private static final JNotepadStatusBox STATUS_BOX = JNotepadStatusBox.getInstance();
-    /**
-     * 菜单栏组件
-     */
-    private static final JNotepadMenuBar MENU_BAR = JNotepadMenuBar.getInstance();
     /**
      * 应用程序图标
      */
     private static final Image ICON = new Image(Objects.requireNonNull(UiUtil.class.getResource(AppConstants.APP_ICON)).toString());
-    /**
-     * 设置窗口
-     */
-    private static final SetStage SET_STAGE = SetStage.getInstance();
 
     private UiUtil() {
     }
 
-    /**
-     * 获取设置窗口
-     *
-     * @return org.jcnc.jnotepad.ui.setStage.SetStage
-     * @since 2023/8/30 12:39
-     */
-    public static SetStage getSetStage() {
-        return SET_STAGE;
-    }
-
     /**
      * 获取应用程序图标
      *
@@ -67,30 +31,6 @@ public class UiUtil {
         return ICON;
     }
 
-    /**
-     * 获取标签页布局组件
-     *
-     * @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane
-     * @apiNote JNotepadTabPane.getInstance()
-     * @see JNotepadTabPane
-     */
-
-    public static JNotepadTabPane getJnotepadTabPane() {
-        return TAB_PANE;
-    }
-
-    /**
-     * 获取标签页组件
-     *
-     * @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab
-     * @apiNote JNotepadTabPane.getInstance().getSelected()
获取当前选中的标签页
-     * @see JNotepadTabPane
-     */
-
-    public static JNotepadTab getJnotepadtab() {
-        return TAB_PANE.getSelected();
-    }
-
     /**
      * 获取应用窗口
      *
@@ -99,37 +39,6 @@ public class UiUtil {
      * @since 2023/8/29 14:12
      */
     public static Window getAppWindow() {
-        return TAB_PANE.getSelected().getTabPane().getScene().getWindow();
-    }
-
-    /**
-     * 获取视图管理组件
-     *
-     * @return org.jcnc.jnotepad.view.manager.ViewManager
-     * @apiNote ViewManager.getInstance()
-     * @since 2023/8/29 14:13
-     */
-    public static ViewManager getViewManager() {
-        return VIEW_MANAGER;
-    }
-
-    /**
-     * 获取状态栏组件
-     *
-     * @return org.jcnc.jnotepad.ui.root.bottom.status.JNotepadStatusBox
-     * @since 2023/8/29 14:14
-     */
-    public static JNotepadStatusBox getStatusBox() {
-        return STATUS_BOX;
-    }
-
-    /**
-     * 获取菜单栏组件
-     *
-     * @return org.jcnc.jnotepad.ui.root.top.menu.JNotepadMenuBar
-     * @since 2023/8/29 14:15
-     */
-    public static JNotepadMenuBar getMenuBar() {
-        return MENU_BAR;
+        return LunchApp.getWindow();
     }
 }
diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java
index c0725692e5f5a0050b61a11989917bce6da0574b..dbe126f63ed30fb0030d8100496f049b44604511 100644
--- a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java
+++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java
@@ -13,12 +13,12 @@ import java.io.File;
  */
 public class TextFileChooserFactory implements FileChooserFactory {
 
+    private static final TextFileChooserFactory INSTANCE = new TextFileChooserFactory();
+
     private TextFileChooserFactory() {
 
     }
 
-    private static final TextFileChooserFactory INSTANCE = new TextFileChooserFactory();
-
     public static TextFileChooserFactory getInstance() {
         return INSTANCE;
     }
diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java
index cfe2d6365829e26628abc2bcb7197ce330588f5b..fbb47a08e773c99c956140149c8d25c96adbcb14 100644
--- a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java
+++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java
@@ -3,10 +3,11 @@ package org.jcnc.jnotepad.ui.module;
 import javafx.beans.property.StringProperty;
 import javafx.scene.control.TextArea;
 import javafx.scene.layout.BorderPane;
+import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox;
 import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
+import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
 import org.jcnc.jnotepad.tool.LogUtil;
 import org.jcnc.jnotepad.tool.SingletonUtil;
-import org.jcnc.jnotepad.tool.UiUtil;
 import org.slf4j.Logger;
 
 import java.io.BufferedWriter;
@@ -19,9 +20,9 @@ import java.io.IOException;
  */
 public class LineNumberTextArea extends BorderPane {
 
-    private static final Logger logger=LogUtil.getLogger(LineNumberTextArea.class);
     static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999,
             99999999, 999999999, Integer.MAX_VALUE};
+    private static final Logger logger = LogUtil.getLogger(LineNumberTextArea.class);
     private static final int MIN_LINE_NUMBER_WIDTH = 30;
     private final TextArea mainTextArea;
     private final TextArea lineNumberArea;
@@ -59,12 +60,12 @@ public class LineNumberTextArea extends BorderPane {
 
         lineNumberArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberWidth());
 
-        this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> UiUtil.getStatusBox().updateWordCountStatusLabel());
+        this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> JNotepadStatusBox.getInstance().updateWordCountStatusLabel());
         this.textProperty().addListener((observable, oldValue, newValue) -> {
             // 更新行号
             updateLineNumberArea();
             // 更新状态栏
-            UiUtil.getStatusBox().updateWordCountStatusLabel();
+            JNotepadStatusBox.getInstance().updateWordCountStatusLabel();
             // 自动保存
             save();
         });
@@ -74,7 +75,7 @@ public class LineNumberTextArea extends BorderPane {
      * 以原文件编码格式写回文件
      */
     public void save() {
-        JNotepadTab tab = UiUtil.getJnotepadtab();
+        JNotepadTab tab = JNotepadTabPane.getInstance().getSelected();
         if (tab == null) {
             return;
         }
diff --git a/tool/package.md b/tool/package.md
index ddba9975a0666f0f17141938e801a1fd6a974ac1..112b99ccd19b2f6eebcc563fc90247ddf4cb519e 100644
--- a/tool/package.md
+++ b/tool/package.md
@@ -1,30 +1,41 @@
 # 打包
+
 ## 准备
+
 1. 下载maven 3.8.8, [Download](https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.zip)
 2. 下载GraalVM。在[GraalVM下载页](https://www.graalvm.org/downloads/#)选择Java17,操作系统后,点击Download下载。
 
 # Windows下基于GraalVM的打包
+
 ## 配置maven和GraalVM
+
 1. 将下载的压缩包解压到目录,例如:d:\tools\maven,D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1
 2. 配置环境变量
+
 ```
 GRAALVM_HOME=D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1
 M2_HOME=d:\tools\maven
 ```
+
 
+
 3. 配置PATH环境变量
-
+   
 4. 安装visual studio build tools
-安装说明:https://www.graalvm.org/latest/docs/getting-started/windows/
-a) 下载安装程序:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
-b) 参考网页中的安装步骤
+   安装说明:https://www.graalvm.org/latest/docs/getting-started/windows/
+   a) 下载安装程序:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
+   b) 参考网页中的安装步骤
 5. 验证安装成功
-使用下面命令启动编译环境
+   使用下面命令启动编译环境
+
 ```
 cmd.exe /k F:\vs\ide\VC\Auxiliary\Build\vcvars64.bat
 ```
+
 需要把F:\vs\ide替换为本地的visual stuido安装路径。
+
 6. 进入项目tool目录,执行build.bat进行打包,生成可执行文件。
+
 ```
 build.bat
 ```
\ No newline at end of file