diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index dbfe06eedc45c6dd39ba2faf6352597d981c9670..974122b57738f6ab1c9fe6318879deb56f4522b1 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -20,9 +20,14 @@ module org.jcnc.jnotepad { exports org.jcnc.jnotepad.controller.manager; exports org.jcnc.jnotepad.controller.i18n; exports org.jcnc.jnotepad.controller.event.handler.tool; - exports org.jcnc.jnotepad.controller.event.handler.menuBar; + exports org.jcnc.jnotepad.controller.event.handler.menubar; exports org.jcnc.jnotepad.tool; - exports org.jcnc.jnotepad.Interface; + exports org.jcnc.jnotepad.interfaces; + 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/Interface/BorderPaneAble.java b/src/main/java/org/jcnc/jnotepad/Interface/BorderPaneAble.java deleted file mode 100644 index 2e0162b9853c9c30e2933cc93d1b1d965319c508..0000000000000000000000000000000000000000 --- a/src/main/java/org/jcnc/jnotepad/Interface/BorderPaneAble.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.jcnc.jnotepad.Interface; - -import javafx.scene.Node; - - -public interface BorderPaneAble { - - void setTopComponent(Node node); - - void setBottomComponent(Node node); - - void setLeftComponent(Node node); - - void setRightComponent(Node node); - - void setCenterComponent(Node node); - - -} diff --git a/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java b/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java deleted file mode 100644 index 2eb7826f430a3d8825ce52e131c7bfec1a23cb9f..0000000000000000000000000000000000000000 --- a/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.jcnc.jnotepad.Interface; - -import javafx.scene.Node; -import javafx.scene.layout.HBox; - -public interface HBoxAble { - - void addChild(Node node); - - void addChild(Node... nodes); - - HBox getHBox(); -} diff --git a/src/main/java/org/jcnc/jnotepad/Interface/VBoxAble.java b/src/main/java/org/jcnc/jnotepad/Interface/VBoxAble.java deleted file mode 100644 index 88bc9abbeebd1133433a50e265d7daabf47bca52..0000000000000000000000000000000000000000 --- a/src/main/java/org/jcnc/jnotepad/Interface/VBoxAble.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.jcnc.jnotepad.Interface; - -import javafx.scene.Node; -import javafx.scene.layout.VBox; - -public interface VBoxAble { - void addChild(Node node); - - void addChild(Node... nodes); - - VBox getVBox(); -} diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index 179db049fdddee7b6ef2745ee060a6690e5cd97c..a0b2c19c814cac7158ffae59b9adaad4cd732b38 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -1,6 +1,5 @@ package org.jcnc.jnotepad; - import atlantafx.base.theme.PrimerLight; import javafx.application.Application; import javafx.scene.Scene; @@ -20,13 +19,18 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.ExecutorService; - /** - * 启动程序 + * 启动程序类 + * + *

该类用于启动 JNotepad 记事本应用程序。

* * @author 许轲 */ public class LunchApp extends Application { + /** + * 线程池 + */ + private final ExecutorService threadPool = ThreadPoolManager.getThreadPool(); private static final Pane ROOT = new Pane(); private static final Scene SCENE; @@ -37,14 +41,19 @@ public class LunchApp extends Application { } /** - * 线程池 + * 应用程序的入口点,启动 JavaFX 应用程序。 + * + * @param args 命令行参数 */ - private final ExecutorService threadPool = ThreadPoolManager.getThreadPool(); - public static void main(String[] args) { launch(args); } + /** + * 获取当前窗口。 + * + * @return 当前窗口 + */ public static Window getWindow() { return SCENE.getWindow(); } @@ -56,25 +65,19 @@ public class LunchApp extends Application { initUiComponents(); UiResourceBundle.bindStringProperty(primaryStage.titleProperty(), TextConstants.TITLE); -/* // 获取自定义标题栏的实例并添加到BorderPane的顶部 - CustomTitleBar customTitleBar = CustomTitleBar.getInstance(); - // 使自定义标题栏可拖动 - customTitleBar.makeDraggable(primaryStage);*/ -// primaryStage.initStyle(StageStyle.UNDECORATED); // 移除默认窗口装饰 primaryStage.setScene(SCENE); primaryStage.setWidth(SCENE.getWidth()); primaryStage.setHeight(SCENE.getHeight()); - primaryStage.setScene(SCENE); primaryStage.getIcons().add(UiUtil.getIcon()); primaryStage.show(); } private void initUiComponents() { - //1. 加载语言 + // 1. 加载语言 LocalizationController.initLocal(); - //2. 加载组件 + // 2. 加载组件 ViewManager viewManager = ViewManager.getInstance(SCENE); viewManager.initScreen(SCENE); @@ -88,5 +91,4 @@ public class LunchApp extends Application { // 关闭线程池 threadPool.shutdownNow(); } - } diff --git a/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java b/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java index ade589f41fff287c3f51d13cea3b8feae199e048..4e94de6824be3c6fecb1aba23e37a8f7fba82f9d 100644 --- a/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java +++ b/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java @@ -1,11 +1,10 @@ package org.jcnc.jnotepad.constants; /** - * 应用常量 + * 应用常量类,用于存放应用程序中的常量值。 * * @author 许轲 */ - public class AppConstants { /** * 初始宽度 @@ -20,6 +19,9 @@ public class AppConstants { */ public static final String APP_ICON = "/img/icon.png"; + /** + * 私有构造函数,防止该类被实例化。 + */ private AppConstants() { } diff --git a/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java b/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java index f19289c017a74df949cb0bdb4316c60d7a2fe5ea..87b67c8a7d57d2b831d90d9da1caf0c81b066b6b 100644 --- a/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java +++ b/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java @@ -9,11 +9,6 @@ package org.jcnc.jnotepad.constants; public class TextConstants { public static final String TITLE = "title"; - - - /// GlobalConfig文本常量 - - public static final String SAVE = "SAVE"; public static final String FILE = "FILE"; public static final String NEW = "NEW"; 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 ef0148e1441c261849a97c3adcf4db2e8beb116f..a3bd4845b3e60be5ec75fb1e8ef74b9c1b6d0728 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java @@ -18,6 +18,8 @@ import java.util.List; /** * 应用程序配置控制器 * + *

该类负责管理应用程序的配置文件,包括加载、持久化和更新配置信息等操作。

+ * * @author songdragon */ public class AppConfigController { @@ -36,12 +38,17 @@ public class AppConfigController { loadConfig(); } + /** + * 获取 AppConfigController 的实例。 + * + * @return AppConfigController 的实例 + */ public static AppConfigController getInstance() { return INSTANCE; } /** - * 加载配置文件内容 + * 加载配置文件内容。 */ public void loadConfig() { createConfigIfNotExists(); @@ -59,7 +66,7 @@ public class AppConfigController { } /** - * 配置文件持久化 + * 配置文件持久化。 */ public void writeAppConfig() { createConfigIfNotExists(); @@ -67,7 +74,7 @@ public class AppConfigController { } /** - * 将appConfig对象持久化到配置文件中 + * 将 appConfig 对象持久化到配置文件中。 * * @param appConfig 应用配置对象 */ @@ -83,6 +90,9 @@ public class AppConfigController { } } + /** + * 创建配置文件如果不存在。 + */ public void createConfigIfNotExists() { Path configPath = getConfigPath(); if (configPath.toFile().exists()) { @@ -95,6 +105,11 @@ public class AppConfigController { writeAppConfig(null); } + /** + * 获取配置文件的路径。 + * + * @return 配置文件的路径 + */ public Path getConfigPath() { return Paths.get(getDir(), CONFIG_NAME); } @@ -104,7 +119,7 @@ public class AppConfigController { } /** - * 获取当前配置文件所在目录 + * 获取当前配置文件所在目录。 * * @return 所在目录 */ @@ -121,9 +136,9 @@ public class AppConfigController { } /** - * 获取自动换行设置,默认自动换行 + * 获取自动换行设置,默认自动换行。 * - * @return true, 自动换行;false,不自动换行 + * @return true,自动换行;false,不自动换行 */ public boolean getAutoLineConfig() { return getAppConfig().isTextWrap(); @@ -134,7 +149,7 @@ public class AppConfigController { } /** - * 更新配置文件中的语言设置 + * 更新配置文件中的语言设置。 * * @param language 更新后的语言设置 */ @@ -146,10 +161,20 @@ public class AppConfigController { writeAppConfig(); } + /** + * 获取当前的语言设置。 + * + * @return 语言设置 + */ public String getLanguage() { return this.appConfig.getLanguage(); } + /** + * 获取快捷键设置。 + * + * @return 快捷键设置列表 + */ public List getShortcutKey() { return this.appConfig.getShortcutKey(); } 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 similarity index 63% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java index 26c2a8356de85d46843d0e5aca65e8eb39a5115a..998e6706625ffb6aae75298896494bc88d120e19 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 @@ -1,20 +1,18 @@ -package org.jcnc.jnotepad.controller.event.handler.menuBar; +package org.jcnc.jnotepad.controller.event.handler.menubar; 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.root.center.main.center.tab.JNotepadTabPane; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.view.manager.ViewManager; - /** * 新建文件事件的事件处理程序。 - *

- * 当用户选择新建文件时候,将创建一个新的文本编辑区,并在Tab页中显示。 + * + *

当用户选择新建文件时,将创建一个新的文本编辑区,并在Tab页中显示。

* * @author 许轲 */ @@ -30,21 +28,24 @@ public class NewFile implements EventHandler { addNewFileTab(); } + /** + * 添加新的文件标签页。 + */ public void addNewFileTab() { // 创建一个新的文本编辑区 LineNumberTextArea textArea = new LineNumberTextArea(); // TODO: refactor:统一TextArea新建、绑定监听器入口 - ViewManager viewManager = ViewManager.getInstance(); + ViewManager viewManager = UiUtil.getViewManager(); // 创建标签页 - JNotepadTab jNotepadTab = new JNotepadTab( + MainTab mainTab = new MainTab( UiResourceBundle.getContent(TextConstants.NEW_FILE) + viewManager.selfIncreaseAndGetTabIndex(), textArea); // 设置当前标签页与本地文件无关联 - jNotepadTab.setRelevance(false); + mainTab.setRelevance(false); // 将Tab页添加到TabPane中 - JNotepadTabPane.getInstance().addNewTab(jNotepadTab); + UiUtil.getJnotepadTabPane().addNewTab(mainTab); // 更新编码信息 - JNotepadStatusBox.getInstance().updateEncodingLabel(); + UiUtil.getStatusBox().updateEncodingLabel(); } -} \ No newline at end of file +} diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenConfig.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java similarity index 66% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenConfig.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java index 1c403dbe8203fbba2be9530771f9407011f91ba3..9b12eb243a1e76f3064c941e3021597966abe56e 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenConfig.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler.menuBar; +package org.jcnc.jnotepad.controller.event.handler.menubar; import javafx.event.ActionEvent; import org.jcnc.jnotepad.tool.LogUtil; @@ -7,17 +7,24 @@ import org.jcnc.jnotepad.tool.SingletonUtil; import java.io.File; /** - * 打开配置文件事件 + * 打开配置文件事件处理程序。 + * + *

该事件处理程序用于打开配置文件。

* * @author gewuyou */ public class OpenConfig extends OpenFile { + /** + * 处理打开配置文件事件。 + * + * @param actionEvent 事件对象 + */ @Override public void handle(ActionEvent actionEvent) { // 显示文件选择对话框,并获取配置文件 File file = SingletonUtil.getAppConfigController().getConfigPath().toFile(); - LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能,{}", file); + LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能, {}", file); // 创建打开文件的任务并启动线程执行任务 openFile(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 similarity index 86% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java index f73dc3714138f30946ffe237c00feb81b6f4afef..26747791f7a51dc9c5b7f68f423b8c4f4f18f642 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 @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler.menuBar; +package org.jcnc.jnotepad.controller.event.handler.menubar; import javafx.application.Platform; import javafx.concurrent.Task; @@ -9,8 +9,8 @@ import javafx.stage.FileChooser; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; import org.jcnc.jnotepad.manager.ThreadPoolManager; -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.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; import org.jcnc.jnotepad.tool.EncodingDetector; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.UiUtil; @@ -25,7 +25,6 @@ import java.nio.charset.Charset; import static org.jcnc.jnotepad.manager.ThreadPoolManager.threadContSelfSubtracting; - /** * 打开文件的事件处理程序。 *

@@ -84,9 +83,9 @@ public class OpenFile implements EventHandler { */ public void openFile(File file) { // 获取标签页集合 - JNotepadTabPane jnotepadTabPane = JNotepadTabPane.getInstance(); + MainTabPane jnotepadMainTabPane = UiUtil.getJnotepadTabPane(); // 遍历标签页,查找匹配的标签页 - for (Tab tab : jnotepadTabPane.getTabs()) { + for (Tab tab : jnotepadMainTabPane.getTabs()) { // 获取绑定的文件 File tabFile = (File) tab.getUserData(); if (tabFile == null) { @@ -94,7 +93,7 @@ public class OpenFile implements EventHandler { } if (file.getPath().equals((tabFile).getPath())) { // 找到匹配的标签页,设置为选中状态并跳转 - jnotepadTabPane.getSelectionModel().select(tab); + jnotepadMainTabPane.getSelectionModel().select(tab); return; } } @@ -120,11 +119,11 @@ public class OpenFile implements EventHandler { LogUtil.getLogger(this.getClass()).info("已调用读取文件功能"); Platform.runLater(() -> { textArea.getMainTextArea().setText(text); - JNotepadTab tab = createNewTab(file.getName(), textArea, encoding); + MainTab tab = createNewTab(file.getName(), textArea, encoding); // 设置当前标签页关联本地文件 tab.setRelevance(true); tab.setUserData(file); - JNotepadTabPane.getInstance().addNewTab(tab); + UiUtil.getJnotepadTabPane().addNewTab(tab); }); } catch (IOException ignored) { LogUtil.getLogger(this.getClass()).info("已忽视IO异常!"); @@ -147,7 +146,7 @@ public class OpenFile implements EventHandler { * @param textArea 文本区域 * @return 新的标签页 */ - private JNotepadTab createNewTab(String tabName, LineNumberTextArea textArea, Charset charset) { - return new JNotepadTab(tabName, textArea, charset); + private MainTab createNewTab(String tabName, LineNumberTextArea textArea, Charset charset) { + return new MainTab(tabName, textArea, charset); } } 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 similarity index 86% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java index 247e7a6949d26cf26eb2ef5da5322cda7ab2ae3b..a867d3c0b7ce75c25bf8926a9e5d34b5940c111d 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 @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler.menuBar; +package org.jcnc.jnotepad.controller.event.handler.menubar; import javafx.event.ActionEvent; import javafx.event.EventHandler; @@ -7,8 +7,7 @@ import javafx.scene.input.KeyCode; 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.root.center.main.center.tab.MainTab; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory; @@ -17,7 +16,10 @@ import org.slf4j.Logger; import java.io.File; /** - * 重命名文件 + * 重命名文件事件处理器。 + *

+ * 当用户选择重命名文件时,如果当前标签页关联文件,则重命名关联文件; + * 否则,重命名标签页。 * * @author gewuyou */ @@ -27,7 +29,7 @@ public class RenameFile implements EventHandler { @Override public void handle(ActionEvent actionEvent) { // 获取当前标签页 - JNotepadTab jnotepadtab = JNotepadTabPane.getInstance().getSelected(); + MainTab jnotepadtab = UiUtil.getJnotepadtab(); if (jnotepadtab == null || jnotepadtab.getText().isEmpty()) { return; } @@ -43,12 +45,11 @@ public class RenameFile implements EventHandler { } /** - * 重命名标签页 + * 重命名标签页。 * * @param jnotepadtab 标签页组件 - * @since 2023/8/31 21:48 */ - private void handleRenameTab(JNotepadTab jnotepadtab) { + private void handleRenameTab(MainTab jnotepadtab) { TextField textField = new TextField(jnotepadtab.getText()); textField.getStyleClass().add("tab-title-editable"); // 清空标签页名称 @@ -82,12 +83,11 @@ public class RenameFile implements EventHandler { } /** - * 重命名关联文件 + * 重命名关联文件。 * * @param jnotepadtab 标签页组件 - * @since 2023/8/31 21:47 */ - private void handleRenameRelevanceFile(JNotepadTab jnotepadtab) { + private void handleRenameRelevanceFile(MainTab jnotepadtab) { // 获取原始文件对象 File file = (File) jnotepadtab.getUserData(); // 获取应用窗口并绑定 diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveAsFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveAsFile.java similarity index 92% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveAsFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveAsFile.java index 426ded436f567235d273a7784cfa9f5d7a17b82c..7e8e6a3fbfa857809c05d21c5d3aee53f9082d6b 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveAsFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveAsFile.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler.menuBar; +package org.jcnc.jnotepad.controller.event.handler.menubar; import javafx.event.ActionEvent; import org.jcnc.jnotepad.tool.LogUtil; 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 similarity index 66% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java index d21d17091e14e3a32499a84ef5b636fa97804377..c408e410f54a245f5b78ede70162e12293c62df9 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 @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler.menuBar; +package org.jcnc.jnotepad.controller.event.handler.menubar; import javafx.event.ActionEvent; import javafx.event.EventHandler; @@ -6,9 +6,7 @@ import javafx.stage.FileChooser; 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.root.center.main.center.tab.MainTab; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.UiUtil; @@ -20,7 +18,10 @@ import java.io.File; import static org.jcnc.jnotepad.controller.config.AppConfigController.CONFIG_NAME; /** - * 保存文件 + * 保存文件事件处理程序。 + *

+ * 当用户选择保存文件时,如果当前标签页是关联文件,则自动保存; + * 否则,调用另存为方法。 * * @author gewuyou */ @@ -28,47 +29,48 @@ public class SaveFile implements EventHandler { Logger logger = LogUtil.getLogger(this.getClass()); /** - * 保存文件 + * 处理保存文件事件。 * * @param actionEvent 事件对象 - * @apiNote + * @apiNote 当用户选择保存文件时,如果当前标签页是关联文件,则自动保存; + * 否则,调用另存为方法。 */ @Override public void handle(ActionEvent actionEvent) { // 获取当前tab页 - JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected(); + MainTab selectedTab = UiUtil.getJnotepadtab(); if (selectedTab == null) { return; } - // 打开的是非关联文件,则调用另存为api + // 如果打开的是非关联文件,则调用另存为方法 if (!selectedTab.isRelevance()) { logger.info("当前保存文件为非关联打开文件,调用另存为方法"); saveTab(this.getClass()); } else { logger.info("当前保存文件为关联打开文件,调用自动保存方法"); - // 调用tab保存 + // 调用tab保存方法 selectedTab.save(); - // 如果该文件是配置文件则刷新快捷键 + // 如果该文件是配置文件,则刷新快捷键 if (CONFIG_NAME.equals(selectedTab.getText())) { // 重新加载语言包和快捷键 SingletonUtil.getAppConfigController().loadConfig(); - JNotepadMenuBar.getInstance().initShortcutKeys(); + UiUtil.getMenuBar().initShortcutKeys(); LocalizationController.initLocal(); - logger.info("已刷新语言包!"); - logger.info("已刷新快捷键!"); + logger.info("已刷新语言包!"); + logger.info("已刷新快捷键!"); } } } /** - * 保存页面方法 + * 保存标签页的方法。 * * @param currentClass 调用该方法的类 - * @apiNote 将当前选中的标签页进行弹出窗口式的保存 + * @apiNote 将当前选中的标签页进行另存为弹出窗口式的保存。 * @see LogUtil */ protected void saveTab(Class currentClass) { - JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected(); + MainTab selectedTab = UiUtil.getJnotepadtab(); if (selectedTab == null) { return; } @@ -79,11 +81,11 @@ public class SaveFile implements EventHandler { new FileChooser.ExtensionFilter("All types", "*.*")) .showSaveDialog(UiUtil.getAppWindow()); if (file != null) { - LogUtil.getLogger(currentClass).info("正在保存文件:{}", file.getName()); + LogUtil.getLogger(currentClass).info("正在保存文件: {}", file.getName()); selectedTab.save(file); - // 将保存后的文件设置为已关联 + // 将保存后的文件设置为关联文件 selectedTab.setRelevance(true); - // 更新Tab页标签上的文件名 + // 更新标签页上的文件名 selectedTab.setText(file.getName()); } } 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 4d3671930109512b916c26bad126b29857322e7b..8478165abda1df53135ab14d9eaa66c4fbd641e5 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 @@ -4,18 +4,17 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import org.jcnc.jnotepad.ui.setStage.SetStage; - /** * 设置按钮事件的事件处理程序。 - *

- * 当用户点击设置的时候,将打开设置窗口。 + * + *

当用户点击设置按钮时,将打开设置窗口。

* * @author 许轲 */ public class SetBtn implements EventHandler { /** - * 打开设置窗口处理事件 + * 打开设置窗口处理事件。 * * @param event 事件对象 */ @@ -23,6 +22,4 @@ public class SetBtn implements EventHandler { public void handle(ActionEvent event) { SetStage.getInstance().openSetStage(); } - - -} \ No newline at end of file +} diff --git a/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java b/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java index 0de3f0cbd9d8d1508924b0e8e0431397494b3c50..7fe64f8544b07e5f28060b6950afaf7d471cb7d1 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java @@ -13,8 +13,9 @@ import static org.jcnc.jnotepad.constants.TextConstants.CHINESE; import static org.jcnc.jnotepad.constants.TextConstants.ENGLISH; /** - * 本地化控制器
- * 注意:本地化配置加载应当优先于快捷键配置加载 + * 本地化控制器 + * + *

该类负责处理应用程序的本地化配置,包括语言和区域设置。

* * @author gewuyou * @see LunchApp @@ -42,6 +43,11 @@ public class LocalizationController { this.appConfigController = SingletonUtil.getAppConfigController(); } + /** + * 获取当前语言配置 + * + * @return 当前语言的Locale对象 + */ public static Locale getCurrentLocal() { return Locale.getDefault(); } @@ -49,7 +55,7 @@ public class LocalizationController { /** * 设置当前语言配置 * - * @param locale 当前语言Local对象 + * @param locale 当前语言的Locale对象 */ public static void setCurrentLocal(Locale locale) { if (locale != null && locale.equals(getCurrentLocal())) { diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java index e95f3a12a14c05fdc68df70012fef3f95957d461..2c8b10317c89d6737f030afce04a70848670e7b7 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -1,15 +1,14 @@ package org.jcnc.jnotepad.controller.manager; -import org.jcnc.jnotepad.Interface.ControllerAble; -import org.jcnc.jnotepad.controller.event.handler.menuBar.NewFile; -import org.jcnc.jnotepad.controller.event.handler.menuBar.OpenFile; +import org.jcnc.jnotepad.controller.event.handler.menubar.NewFile; +import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; +import org.jcnc.jnotepad.interfaces.ControllerAble; import java.io.File; import java.util.List; /** - * 控制器类,实现ControllerInterface接口,用于管理文本编辑器的各种操作和事件处理。 - * 包括打开关联文件、创建文本区域、处理行分隔、新建文件、打开文件、自动保存等功能。 + * 控制器类,实现 ControllerAble 接口,用于管理文本编辑器的各种操作和事件处理。 * * @author 许轲 */ @@ -20,6 +19,11 @@ public class Controller implements ControllerAble { private Controller() { } + /** + * 获取 Controller 的唯一实例。 + * + * @return Controller 的实例 + */ public static Controller getInstance() { return INSTANCE; } diff --git a/src/main/java/org/jcnc/jnotepad/exception/AppException.java b/src/main/java/org/jcnc/jnotepad/exception/AppException.java index bfa75709e0d58ada0a5f514d4bbf99aed1c30625..6d3f2a680aa76f23a24caf5dda0d8392942e110f 100644 --- a/src/main/java/org/jcnc/jnotepad/exception/AppException.java +++ b/src/main/java/org/jcnc/jnotepad/exception/AppException.java @@ -1,17 +1,29 @@ package org.jcnc.jnotepad.exception; /** - * 应用异常类 + * 应用异常类,用于处理应用程序中的异常情况。 + * + *

应用异常是一个运行时异常,通常用于捕获和处理应用程序中的不可预料的错误和异常情况。

* * @author gewuyou */ public class AppException extends RuntimeException { + + /** + * 构造一个应用异常对象。 + * + * @param message 异常消息 + */ public AppException(String message) { super(message); } + /** + * 构造一个应用异常对象。 + * + * @param cause 异常的原因 + */ public AppException(Throwable cause) { super(cause); } - } diff --git a/src/main/java/org/jcnc/jnotepad/interfaces/BorderPaneAble.java b/src/main/java/org/jcnc/jnotepad/interfaces/BorderPaneAble.java new file mode 100644 index 0000000000000000000000000000000000000000..40636e44beb66dbcae9847b3baa6c745323dfb05 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/interfaces/BorderPaneAble.java @@ -0,0 +1,48 @@ +package org.jcnc.jnotepad.interfaces; + +import javafx.scene.Node; + +/** + * 可设置BorderPane子组件的接口 + * + *

该接口定义了设置BorderPane的各个子组件(上、下、左、右、中)的方法。

+ * + * @author luke + */ +public interface BorderPaneAble { + + /** + * 设置BorderPane的顶部组件。 + * + * @param node 要设置为顶部组件的节点 + */ + void setTopComponent(Node node); + + /** + * 设置BorderPane的底部组件。 + * + * @param node 要设置为底部组件的节点 + */ + void setBottomComponent(Node node); + + /** + * 设置BorderPane的左侧组件。 + * + * @param node 要设置为左侧组件的节点 + */ + void setLeftComponent(Node node); + + /** + * 设置BorderPane的右侧组件。 + * + * @param node 要设置为右侧组件的节点 + */ + void setRightComponent(Node node); + + /** + * 设置BorderPane的中间组件。 + * + * @param node 要设置为中间组件的节点 + */ + void setCenterComponent(Node node); +} diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ControllerAble.java b/src/main/java/org/jcnc/jnotepad/interfaces/ControllerAble.java similarity index 63% rename from src/main/java/org/jcnc/jnotepad/Interface/ControllerAble.java rename to src/main/java/org/jcnc/jnotepad/interfaces/ControllerAble.java index af551b88c719bb31936440a02db01d22453671d6..c8ba61cb97b66ca627e1d9c158382d80253e070a 100644 --- a/src/main/java/org/jcnc/jnotepad/Interface/ControllerAble.java +++ b/src/main/java/org/jcnc/jnotepad/interfaces/ControllerAble.java @@ -1,27 +1,27 @@ -package org.jcnc.jnotepad.Interface; +package org.jcnc.jnotepad.interfaces; import java.util.List; /** * 控制器接口类 * + *

该接口定义了控制器的方法,用于打开关联文件并创建TextArea。

+ * * @author 许轲 */ public interface ControllerAble { /** - * 打开关联文件并创建 TextArea + * 打开关联文件并创建 TextArea。 * * @param rawParameters 原始参数列表 - * @return 创建的 TextArea */ void openAssociatedFileAndCreateTextArea(List rawParameters); /** - * 打开关联文件 + * 打开关联文件。 * * @param filePath 文件路径 */ void openAssociatedFile(String filePath); - } diff --git a/src/main/java/org/jcnc/jnotepad/interfaces/HorizontalBoxAble.java b/src/main/java/org/jcnc/jnotepad/interfaces/HorizontalBoxAble.java new file mode 100644 index 0000000000000000000000000000000000000000..6b464bf6cb19dfe7558b51b6dae490cc13b2539d --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/interfaces/HorizontalBoxAble.java @@ -0,0 +1,34 @@ +package org.jcnc.jnotepad.interfaces; + +import javafx.scene.Node; +import javafx.scene.layout.HBox; + +/** + * 可添加子节点的水平布局接口 + * + *

该接口定义了添加子节点和获取水平布局的方法。

+ * + * @author luke + */ +public interface HorizontalBoxAble { + /** + * 添加一个或多个子节点到水平布局中。 + * + * @param node 要添加的子节点 + */ + void addChild(Node node); + + /** + * 添加一个或多个子节点到水平布局中。 + * + * @param nodes 要添加的子节点数组 + */ + void addChild(Node... nodes); + + /** + * 获取水平布局。 + * + * @return 水平布局 + */ + HBox getHorizontalBox(); +} diff --git a/src/main/java/org/jcnc/jnotepad/interfaces/VerticalBoxAble.java b/src/main/java/org/jcnc/jnotepad/interfaces/VerticalBoxAble.java new file mode 100644 index 0000000000000000000000000000000000000000..21d7f651eea785f60d16ec61ca0713fa2d7671fd --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/interfaces/VerticalBoxAble.java @@ -0,0 +1,34 @@ +package org.jcnc.jnotepad.interfaces; + +import javafx.scene.Node; +import javafx.scene.layout.VBox; + +/** + * 可添加子节点的垂直布局接口 + * + *

该接口定义了添加子节点和获取垂直布局的方法。

+ * + * @author luke + */ +public interface VerticalBoxAble { + /** + * 添加一个或多个子节点到垂直布局中。 + * + * @param node 要添加的子节点 + */ + void addChild(Node node); + + /** + * 添加一个或多个子节点到垂直布局中。 + * + * @param nodes 要添加的子节点数组 + */ + void addChild(Node... nodes); + + /** + * 获取垂直布局。 + * + * @return 垂直布局 + */ + VBox getVerticalBox(); +} diff --git a/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java b/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java index 7201662f6d8aa14cdb68f334c826f0e27f33e9d1..3ad09210b099399c0cf82c8067625f975a322035 100644 --- a/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java +++ b/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java @@ -7,8 +7,9 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; /** - * 线程池管理类
- * 项目中所有异步操作建议使用该类进行获取线程执行异步操作 + * 线程池管理类 + * + *

该类用于管理应用程序中的线程池,提供了异步操作的执行环境。

* * @author gewuyou */ @@ -71,12 +72,16 @@ public class ThreadPoolManager { * * @apiNote 当你创建任务时,务必在最后执行一次该方法 * @see ThreadPoolManager - * @since 2023/8/26 22:00 */ public static void threadContSelfSubtracting() { THREAD_COUNT.decrementAndGet(); } + /** + * 获取线程池实例。 + * + * @return 线程池实例 + */ public static ExecutorService getThreadPool() { return THREAD_POOL; } diff --git a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java index 1cb4fb9b11ed17294e58b52bba47173c1d2a9972..769c851bd56ab79d636c2181b49b54d408867cfc 100644 --- a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java @@ -1,41 +1,54 @@ package org.jcnc.jnotepad.root; -import org.jcnc.jnotepad.root.bottom.RootBottomSideBarVBox; +import org.jcnc.jnotepad.root.bottom.RootBottomSideBarVerticalBox; import org.jcnc.jnotepad.root.center.main.MainBorderPane; -import org.jcnc.jnotepad.root.left.sidebar.tools.ToolHBox; -import org.jcnc.jnotepad.root.right.RootRightSideBarVBox; +import org.jcnc.jnotepad.root.left.sidebar.tools.ToolHorizontalBox; +import org.jcnc.jnotepad.root.right.RootRightSideBarVerticalBox; import org.jcnc.jnotepad.root.top.RootTopBorderPane; import org.jcnc.jnotepad.ui.module.AbstractBorderPane; /** - * 根舞台下的Root主布局 + * RootBorderPane 表示 JNotepad 应用程序的根布局。 + * + *

该布局包含了应用程序的主要组件,包括主界面、工具栏、侧边栏、菜单栏等。

* * @author 许轲 */ public class RootBorderPane extends AbstractBorderPane { - + /** + * 单例模式,保证只有一个 RootBorderPane 实例 + */ private static final RootBorderPane INSTANCE = new RootBorderPane(); private RootBorderPane() { initRootBorderPane(); } - public static RootBorderPane getInstance() { - return INSTANCE; - } - + /** + * 初始化 RootBorderPane。 + * + *

设置主界面(MainBorderPane)、工具栏(ToolHBox)、侧边栏(RootRightSideBarVBox)、 + * 菜单栏(RootTopBorderPane)以及底部边栏(RootBottomSideBarVBox)等主要组件。

+ */ private void initRootBorderPane() { - //中间,用于显示Main主布局 + // 中间,用于显示主界面 setCenterComponent(MainBorderPane.getInstance()); - //主布局的左边 - setLeftComponent(ToolHBox.getInstance()); - //主布局的右边 - setRightComponent(RootRightSideBarVBox.getInstance()); - //主布局的上面 + // 主界面的左边,工具栏 + setLeftComponent(ToolHorizontalBox.getInstance()); + // 主界面的右边,侧边栏 + setRightComponent(RootRightSideBarVerticalBox.getInstance()); + // 主界面的上面,菜单栏 setTopComponent(RootTopBorderPane.getInstance()); - //主布局的下面 - setBottomComponent(RootBottomSideBarVBox.getInstance()); + // 主界面的下面,底部边栏 + setBottomComponent(RootBottomSideBarVerticalBox.getInstance()); } -} - + /** + * 获取 RootBorderPane 的单例实例。 + * + * @return RootBorderPane 的单例实例 + */ + 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 deleted file mode 100644 index bb57713af156cce3f06593d42ea64ea7b3f9ad25..0000000000000000000000000000000000000000 --- a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.jcnc.jnotepad.root.bottom; - -import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox; -import org.jcnc.jnotepad.ui.module.AbstractVBox; - -public class RootBottomSideBarVBox extends AbstractVBox { - - private static final RootBottomSideBarVBox INSTANCE = new RootBottomSideBarVBox(); - - private RootBottomSideBarVBox() { - initSidebarVBox(); - } - - public static RootBottomSideBarVBox getInstance() { - return INSTANCE; - } - - private void initSidebarVBox() { - getChildren().addAll(JNotepadStatusBox.getInstance()); - } -} diff --git a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVerticalBox.java b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVerticalBox.java new file mode 100644 index 0000000000000000000000000000000000000000..007618593880318998bb11c2fec48e09adf97736 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVerticalBox.java @@ -0,0 +1,33 @@ +package org.jcnc.jnotepad.root.bottom; + +import org.jcnc.jnotepad.root.center.main.bottom.status.StatusHorizontalBox; +import org.jcnc.jnotepad.ui.module.AbstractVerticalBox; + +/** + * 底部根侧边栏垂直布局 + * + *

该类用于显示底部根侧边栏的垂直布局,包括状态栏等。

+ * + * @author luke + */ +public class RootBottomSideBarVerticalBox extends AbstractVerticalBox { + + private static final RootBottomSideBarVerticalBox INSTANCE = new RootBottomSideBarVerticalBox(); + + private RootBottomSideBarVerticalBox() { + initSidebarVerticalBox(); + } + + private void initSidebarVerticalBox() { + getChildren().addAll(StatusHorizontalBox.getInstance()); + } + + /** + * 获取 RootBottomSideBarVerticalBox 的唯一实例。 + * + * @return RootBottomSideBarVerticalBox 的实例 + */ + public static RootBottomSideBarVerticalBox getInstance() { + return INSTANCE; + } +} 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 8525402b4214eb8561005505972d19f31db7dfa5..f5b13bce72f7506c0b97c07a09a81df5a81d4799 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 @@ -1,10 +1,12 @@ package org.jcnc.jnotepad.root.center.main; -import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; import org.jcnc.jnotepad.ui.module.AbstractBorderPane; /** - * MainBorderPane区域,用于显示文本框以及文本框周边 + * 主界面边界布局 + * + *

该类用于显示文本框及其周边组件,作为主界面的中心区域。

* * @author 许轲 */ @@ -16,15 +18,17 @@ public class MainBorderPane extends AbstractBorderPane { initRootBorderPane(); } - public static MainBorderPane getInstance() { - return INSTANCE; - } - private void initRootBorderPane() { - //文本框 - setCenterComponent(JNotepadTabPane.getInstance()); + // 文本框 + setCenterComponent(MainTabPane.getInstance()); + } + /** + * 获取 MainBorderPane 的唯一实例。 + * + * @return MainBorderPane 的实例 + */ + public static MainBorderPane getInstance() { + return INSTANCE; } } - - diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/JNotepadStatusBox.java b/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/StatusHorizontalBox.java similarity index 86% rename from src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/JNotepadStatusBox.java rename to src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/StatusHorizontalBox.java index 5c51410164f09416ff992939d78b224d82293406..c6f1134098259d24c4d49c3e8b28ab16cc2eedf2 100644 --- a/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/JNotepadStatusBox.java +++ b/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/StatusHorizontalBox.java @@ -6,9 +6,9 @@ import javafx.scene.control.Label; import javafx.scene.control.TextArea; 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.ui.module.AbstractHBox; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; +import org.jcnc.jnotepad.ui.module.AbstractHorizontalBox; import java.nio.charset.Charset; @@ -19,9 +19,9 @@ import java.nio.charset.Charset; * * @author songdragon */ -public class JNotepadStatusBox extends AbstractHBox { +public class StatusHorizontalBox extends AbstractHorizontalBox { - private static final JNotepadStatusBox STATUS_BOX = new JNotepadStatusBox(); + private static final StatusHorizontalBox STATUS_BOX = new StatusHorizontalBox(); private static final String STATUS_LABEL_FORMAT = "%s : %d \t%s: %d \t%s: %d \t"; /** * 字数统计及光标 @@ -33,18 +33,16 @@ public class JNotepadStatusBox extends AbstractHBox { private Label encodingLabel; - private JNotepadStatusBox() { + private StatusHorizontalBox() { initStatusBox(); } - public static JNotepadStatusBox getInstance() { + public static StatusHorizontalBox getInstance() { return STATUS_BOX; } /** * 初始化状态栏组件 - * - * @since 2023/8/27 9:33 */ public void initStatusBox() { @@ -91,7 +89,7 @@ public class JNotepadStatusBox extends AbstractHBox { * 更新字数统计 */ public void updateWordCountStatusLabel() { - JNotepadTabPane instance = JNotepadTabPane.getInstance(); + MainTabPane instance = MainTabPane.getInstance(); if (instance.getSelected() == null) { return; } @@ -109,12 +107,12 @@ public class JNotepadStatusBox extends AbstractHBox { *
2. 状态栏更新当前选中tab的字符编码 */ public void updateWhenTabSelected() { - JNotepadTabPane instance = JNotepadTabPane.getInstance(); + MainTabPane instance = MainTabPane.getInstance(); if (instance.getSelected() != null) { updateWordCountStatusLabel(); - JNotepadTab jNotepadTab = instance.getSelected(); - if (jNotepadTab != null) { - updateEncodingLabel(jNotepadTab.getCharset().name()); + MainTab mainTab = instance.getSelected(); + if (mainTab != null) { + updateEncodingLabel(mainTab.getCharset().name()); } } } 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/MainTab.java similarity index 89% rename from src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java rename to src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTab.java index 2d3007eb8642a46b85bf51ccde56018509dae62b..90ada80801f124ac961a8ba2801216eac4743427 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/MainTab.java @@ -13,7 +13,7 @@ import java.nio.charset.Charset; * * @author songdragon */ -public class JNotepadTab extends Tab { +public class MainTab extends Tab { private final LineNumberTextArea lineNumberTextArea; /** @@ -26,15 +26,15 @@ public class JNotepadTab extends Tab { private boolean isRelevance = false; private Charset charset = Charset.defaultCharset(); - public JNotepadTab(String tabTitle) { + public MainTab(String tabTitle) { this(tabTitle, new LineNumberTextArea()); } - public JNotepadTab(String tabTitle, LineNumberTextArea textArea) { + public MainTab(String tabTitle, LineNumberTextArea textArea) { this(tabTitle, textArea, Charset.defaultCharset()); } - public JNotepadTab(String tabTitle, LineNumberTextArea textArea, Charset charset) { + public MainTab(String tabTitle, LineNumberTextArea textArea, Charset charset) { super(tabTitle); lineNumberTextArea = textArea; this.setContent(lineNumberTextArea); 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/MainTabPane.java similarity index 81% rename from src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java rename to src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTabPane.java index ff8f6139a835e7c1548edf83580588a6914f412e..f9c6e8b65cacbeb778fb32d72506b748c11983db 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/MainTabPane.java @@ -10,15 +10,15 @@ import org.jcnc.jnotepad.tool.SingletonUtil; * * @author songdragon */ -public class JNotepadTabPane extends TabPane { +public class MainTabPane extends TabPane { - private static final JNotepadTabPane TAB_PANE = new JNotepadTabPane(); + private static final MainTabPane TAB_PANE = new MainTabPane(); - private JNotepadTabPane() { + private MainTabPane() { initListeners(); } - public static JNotepadTabPane getInstance() { + public static MainTabPane getInstance() { return TAB_PANE; } @@ -44,7 +44,7 @@ public class JNotepadTabPane extends TabPane { * * @param tab 新标签页 */ - public void addNewTab(JNotepadTab tab) { + public void addNewTab(MainTab tab) { if (tab == null) { return; } @@ -61,8 +61,8 @@ public class JNotepadTabPane extends TabPane { * * @return 当前选中的标签页 */ - public JNotepadTab getSelected() { - return (JNotepadTab) this.getSelectionModel().getSelectedItem(); + public MainTab getSelected() { + return (MainTab) this.getSelectionModel().getSelectedItem(); } /** @@ -70,7 +70,7 @@ public class JNotepadTabPane extends TabPane { * 应用当前菜单上选中的自动换行设置。 */ public void fireTabSelected() { - JNotepadTab selectedTab = getSelected(); + MainTab selectedTab = getSelected(); selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); JNotepadStatusBox.getInstance().updateWhenTabSelected(); } diff --git a/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/JNotepadToolBar.java b/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolBar.java similarity index 37% rename from src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/JNotepadToolBar.java rename to src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolBar.java index 0f75228a23cd557edf581da3b113a8bf4aa469c0..8fe6e8df00d16eb86623e0cb6ade071b36f15e0f 100644 --- a/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/JNotepadToolBar.java +++ b/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolBar.java @@ -1,35 +1,60 @@ package org.jcnc.jnotepad.root.left.sidebar.tools; import javafx.scene.control.Button; -import javafx.scene.control.ToolBar; import javafx.scene.image.Image; import javafx.scene.image.ImageView; -public class JNotepadToolBar extends ToolBar { - private static final JNotepadToolBar INSTANCE = new JNotepadToolBar(); - +/** + * JNotepadToolBar 是 JNotepad 应用程序的工具栏类。 + * + *

该类继承自 JavaFX 的 ToolBar 类,并提供了一个单例实例,用于管理工具栏上的按钮。

+ * + *

工具栏上的按钮用于执行不同的操作,比如设置操作。

+ * + * @author luke + */ +public class ToolBar extends javafx.scene.control.ToolBar { + /** + * 单例模式,保证只有一个 JNotepadToolBar实例 + */ + private static final ToolBar INSTANCE = new ToolBar(); + + /** + * 工具栏上的设置按钮 + */ Button setButton = new Button(); - private JNotepadToolBar() { + private ToolBar() { // 创建工具栏上的按钮 - Image image = new Image("tools.png"); // 替换为你的图片文件路径 + Image image = new Image("tools.png"); ImageView imageView = new ImageView(image); imageView.setFitWidth(10); imageView.setFitHeight(10); - imageView.setScaleX(2.5); // 设置水平缩放比例 - imageView.setScaleY(2.5); // 设置垂直缩放比例 + // 设置水平缩放比例 + imageView.setScaleX(2.5); + // 设置垂直缩放比例 + imageView.setScaleY(2.5); // 设置缩放比例 setButton.setGraphic(imageView); // 将按钮添加到工具栏 getItems().addAll(setButton); - } - public static JNotepadToolBar getInstance() { + /** + * 获取 JNotepadToolBar 的单例实例。 + * + * @return JNotepadToolBar 的单例实例 + */ + public static ToolBar getInstance() { return INSTANCE; } + /** + * 获取工具栏上的设置按钮。 + * + * @return 设置按钮 + */ public Button getSetButton() { return setButton; } diff --git a/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolHBox.java b/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolHBox.java deleted file mode 100644 index b7a09920237f2fda3d2bba0b48c1e805a046a9c6..0000000000000000000000000000000000000000 --- a/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolHBox.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.jcnc.jnotepad.root.left.sidebar.tools; - -import javafx.scene.layout.HBox; -import javafx.scene.layout.Priority; - -public class ToolHBox extends HBox { - private static final ToolHBox INSTANCE = new ToolHBox(); - - private ToolHBox() { - - HBox.setHgrow(JNotepadToolBar.getInstance(), Priority.ALWAYS); // 设置子节点水平拉伸 - - getChildren().add(JNotepadToolBar.getInstance()); - } - - public static ToolHBox getInstance() { - return INSTANCE; - } - - -} diff --git a/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolHorizontalBox.java b/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolHorizontalBox.java new file mode 100644 index 0000000000000000000000000000000000000000..4e769a2520ab0e395b7a0d2f44b43ef233d188c4 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/root/left/sidebar/tools/ToolHorizontalBox.java @@ -0,0 +1,38 @@ +package org.jcnc.jnotepad.root.left.sidebar.tools; + +import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; +import org.jcnc.jnotepad.ui.module.AbstractHorizontalBox; + +/** + * ToolHBox 是 JNotepad 应用程序的工具栏水平布局类。 + * + *

该类继承自 JavaFX 的 HBox 类,用于将工具栏放置在水平布局中。

+ * + *

工具栏水平布局中包含一个 JNotepadToolBar 的单例实例,并设置其子节点水平拉伸属性,以确保工具栏在水平方向上充分占用空间。

+ * + * @author luke + */ +public class ToolHorizontalBox extends AbstractHorizontalBox { + /** + * 单例模式,保证只有一个 ToolHBox 实例 + */ + private static final ToolHorizontalBox INSTANCE = new ToolHorizontalBox(); + + private ToolHorizontalBox() { + // 设置子节点水平拉伸 + HBox.setHgrow(ToolBar.getInstance(), Priority.ALWAYS); + + // 将 JNotepadToolBar 添加为子节点 + getChildren().add(ToolBar.getInstance()); + } + + /** + * 获取 ToolHBox 的单例实例。 + * + * @return ToolHBox 的单例实例 + */ + public static ToolHorizontalBox getInstance() { + return INSTANCE; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java deleted file mode 100644 index d4e34c19cf41a1ddd87be04e1ffa65ed63aa571b..0000000000000000000000000000000000000000 --- a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.jcnc.jnotepad.root.right; - -import org.jcnc.jnotepad.ui.module.AbstractVBox; - -public class RootRightSideBarVBox extends AbstractVBox { - - private static final RootRightSideBarVBox INSTANCE = new RootRightSideBarVBox(); - - private RootRightSideBarVBox() { - initSidebarVBox(); - } - - public static RootRightSideBarVBox getInstance() { - return INSTANCE; - } - - private void initSidebarVBox() { - - } -} diff --git a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVerticalBox.java b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVerticalBox.java new file mode 100644 index 0000000000000000000000000000000000000000..5ba00ce60449e6bea2e997308226866fc84d0246 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVerticalBox.java @@ -0,0 +1,23 @@ +package org.jcnc.jnotepad.root.right; + +import org.jcnc.jnotepad.ui.module.AbstractVerticalBox; + +/** + * @author 许轲 + */ +public class RootRightSideBarVerticalBox extends AbstractVerticalBox { + + private static final RootRightSideBarVerticalBox INSTANCE = new RootRightSideBarVerticalBox(); + + private RootRightSideBarVerticalBox() { + initSidebarVerticalBox(); + } + + private void initSidebarVerticalBox() { + + } + + public static RootRightSideBarVerticalBox getInstance() { + return INSTANCE; + } +} 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 7e8bd808240c09e2537a4a34842a06e8e0e39dc4..9944572dfc28ce397f5a0825d125901eccfcf51b 100644 --- a/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java @@ -3,28 +3,39 @@ package org.jcnc.jnotepad.root.top; import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar; import org.jcnc.jnotepad.ui.module.AbstractBorderPane; - /** - * MainBorderPane区域,用于显示文本框以及文本框周边 + * RootTopBorderPane 类表示 JNotepad 应用程序的顶部边界面板。 + * + *

该边界面板用于显示文本框以及文本框周边的内容。

* * @author 许轲 */ public class RootTopBorderPane extends AbstractBorderPane { - + /** + * 单例模式,保证只有一个 RootTopBorderPane 实例 + */ private static final RootTopBorderPane INSTANCE = new RootTopBorderPane(); private RootTopBorderPane() { initRootBorderPane(); } - public static RootTopBorderPane getInstance() { - return INSTANCE; - } - + /** + * 初始化 RootTopBorderPane。 + * + *

在顶部区域添加了 JNotepadMenuBar 的单例实例。

+ */ private void initRootBorderPane() { - //文本框上面 + // 在顶部区域添加菜单栏 setTopComponent(JNotepadMenuBar.getInstance()); } -} - + /** + * 获取 RootTopBorderPane 的单例实例。 + * + * @return RootTopBorderPane 的单例实例 + */ + public static RootTopBorderPane getInstance() { + return INSTANCE; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java b/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java index 33b46ff668991f3751ea7660593d389c7ec8bd90..004cc8cd74d6fbc01a75f808a3f81cb725688f31 100644 --- a/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java @@ -7,12 +7,12 @@ import javafx.stage.Stage; import org.jcnc.jnotepad.app.config.AppConfig; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.controller.config.AppConfigController; -import org.jcnc.jnotepad.controller.event.handler.menuBar.*; +import org.jcnc.jnotepad.controller.event.handler.menubar.*; import org.jcnc.jnotepad.controller.event.handler.tool.SetBtn; 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.left.sidebar.tools.JNotepadToolBar; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; +import org.jcnc.jnotepad.root.left.sidebar.tools.ToolBar; import org.jcnc.jnotepad.tool.LogUtil; import org.slf4j.Logger; @@ -35,13 +35,13 @@ public class JNotepadMenuBar extends MenuBar { /** * 标签页布局组件封装。 */ - JNotepadTabPane jNotepadTabPane = JNotepadTabPane.getInstance(); + MainTabPane mainTabPane = MainTabPane.getInstance(); AppConfigController appConfigController = AppConfigController.getInstance(); Logger logger = LogUtil.getLogger(this.getClass()); /** * 工具栏 */ - JNotepadToolBar toolBar = JNotepadToolBar.getInstance(); + ToolBar toolBar = ToolBar.getInstance(); /** * 获取工具栏中的setButton */ @@ -125,7 +125,6 @@ public class JNotepadMenuBar extends MenuBar { * 设置当前语言选中状态 * * @param language 语言 - * @since 2023/8/25 22:49 */ public void toggleLanguageCheck(String language) { switch (language) { @@ -290,7 +289,7 @@ public class JNotepadMenuBar extends MenuBar { // 1. 更新全局配置 AppConfigController.getInstance().setAutoLineConfig(after); // 2. 对当前tab生效配置 - jNotepadTabPane.fireTabSelected(); + mainTabPane.fireTabSelected(); }); topItem.selectedProperty().addListener((observableValue, before, after) -> { // 获取窗口容器 @@ -323,7 +322,7 @@ public class JNotepadMenuBar extends MenuBar { * 根据当前选中tab,更新菜单选项 */ public void updateMenuStatusBySelectedTab() { - JNotepadTab selectedTab = jNotepadTabPane.getSelected(); + MainTab selectedTab = mainTabPane.getSelected(); lineFeedItem.selectedProperty().setValue(selectedTab.isAutoLine()); } } diff --git a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java index 0889776d31520b1e0a3678264e38a2c2e1340e2c..5cde679f334dc837030defe07de80113005002bf 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java +++ b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java @@ -1,6 +1,5 @@ package org.jcnc.jnotepad.tool; - import com.ibm.icu.text.CharsetDetector; import com.ibm.icu.text.CharsetMatch; import org.slf4j.Logger; @@ -10,25 +9,25 @@ import java.io.File; import java.io.FileInputStream; import java.nio.charset.Charset; - /** * 编码检测工具类 * + *

该工具类用于检测文本文件的编码类型。

+ * * @author 许轲 */ public class EncodingDetector { /** - * 编码侦测概率,阈值:50% + * 编码侦测概率阈值,50% */ public static final int THRESHOLD_CONFIDENCE = 50; private static final Logger LOG = LogUtil.getLogger(EncodingDetector.class); - private EncodingDetector() { } /** - * 检测文本编码 + * 检测文本编码。 * * @param file 要检测的文件 * @return 字符串表示的编码,如果检测失败则返回 "UNKNOWN" @@ -61,7 +60,7 @@ public class EncodingDetector { } /** - * 检测文本编码 + * 检测文本编码。 * * @param file 文件 * @return Charset编码 @@ -76,4 +75,4 @@ public class EncodingDetector { return Charset.defaultCharset(); } } -} \ No newline at end of file +} diff --git a/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java b/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java index 46674eef8fc12e2fc1db71cbed9b2fdb72f21f0b..2b29cc9a97342bbcc0d86938fb8b0440f96064fa 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java @@ -10,7 +10,9 @@ import org.jcnc.jnotepad.exception.AppException; import static com.fasterxml.jackson.core.util.DefaultIndenter.SYS_LF; /** - * jackson解析器的facade类,主要提供objectMapper对象 + * Jackson 解析器的外观类,主要提供 ObjectMapper 对象。 + * + *

该类用于封装 Jackson 对象映射工具的配置和操作。

* * @author songdragon */ @@ -29,6 +31,13 @@ public class JsonUtil { private JsonUtil() { } + /** + * 将对象转换为 JSON 字符串。 + * + * @param o 要转换的对象 + * @return 对象的 JSON 表示,如果转换失败则抛出 AppException 异常 + * @throws AppException 如果转换失败 + */ public static String toJsonString(Object o) { try { return OBJECT_MAPPER.writeValueAsString(o); diff --git a/src/main/java/org/jcnc/jnotepad/tool/LogUtil.java b/src/main/java/org/jcnc/jnotepad/tool/LogUtil.java index 153c92f8a3e99bb2c6c9a9a8285b9458cfcaa251..bf0f2706ef8f8702996e73ded493e757aacf6300 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/LogUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/LogUtil.java @@ -1,11 +1,12 @@ package org.jcnc.jnotepad.tool; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * 日志工具
注意,使用该工具的方法时,如果需要在JavaFx项目中调用日志请使用Platform.runLater()调用 + * 日志工具 + * + *

注意:如果在JavaFX项目中需要调用日志,请使用Platform.runLater()来调用。

* * @author gewuyou */ @@ -14,11 +15,13 @@ public class LogUtil { } /** - * 获取日志类 + * 获取日志类。 * * @param currentClass 所要记录的类 - * @return org.apache.logging.log4j.Logger 日志对象 - * @apiNote 传入当前需要记录的类,返回记录该类的日志类
建议一个类调用超过两次这个方法时,应当将该日志类变成成员对象,而不是多次调用 + * @return org.slf4j.Logger 日志对象 + * + *

传入当前需要记录的类,返回记录该类的日志类。

+ *

建议一个类调用超过两次这个方法时,应当将该日志类变成成员对象,而不是多次调用。

*/ public static Logger getLogger(Class currentClass) { return LoggerFactory.getLogger(currentClass); diff --git a/src/main/java/org/jcnc/jnotepad/tool/PopUpUtil.java b/src/main/java/org/jcnc/jnotepad/tool/PopUpUtil.java index 359f99a236068361c529e421d4fb069992738790..ada80e319f72354f3f6d2a455c7ffcd4cfb5af38 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/PopUpUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/PopUpUtil.java @@ -13,11 +13,13 @@ public class PopUpUtil { } /** - * 获取错误弹窗 + * 获取错误弹窗。 * * @param title 弹窗标题 * @param headerText 头文本 * @param message 信息 + * + *

用于创建一个错误类型的弹窗,显示给用户以指示发生了错误。

*/ public static void errorAlert(String title, String headerText, String message) { Alert alert = new Alert(Alert.AlertType.ERROR); @@ -26,5 +28,4 @@ public class PopUpUtil { alert.setContentText(message); alert.showAndWait(); } - } diff --git a/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java index ee986bb31e71c6222e86caf904682e2791fa8db9..cd09ade2df9e981f14582ad2f27df988b1fa2e40 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java @@ -1,19 +1,18 @@ package org.jcnc.jnotepad.tool; - import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.manager.Controller; /** - * 单例工具
- * 封装了除UI组件外项目中所有需要的单例组件,以减少单例带来的代码的复杂性 + * 单例工具 + * + *

封装了除UI组件外项目中所有需要的单例组件,以减少单例带来的代码的复杂性。

* * @author gewuyou */ public class SingletonUtil { - /** * 控制器类 */ @@ -23,6 +22,7 @@ public class SingletonUtil { * 应用程序配置控制器 */ private static final AppConfigController APP_CONFIG_CONTROLLER = AppConfigController.getInstance(); + /** * UI资源绑定组件 */ @@ -32,30 +32,27 @@ public class SingletonUtil { } /** - * 获取控制器类 + * 获取控制器类。 * - * @return org.jcnc.jnotepad.controller.manager.Controller - * @since 2023/8/30 13:25 + * @return org.jcnc.jnotepad.controller.manager.Controller 控制器对象 */ public static Controller getController() { return CONTROLLER; } /** - * 获取应用程序配置控制器 + * 获取应用程序配置控制器。 * - * @return org.jcnc.jnotepad.controller.config.AppConfigController - * @since 2023/8/30 12:48 + * @return org.jcnc.jnotepad.controller.config.AppConfigController 应用程序配置控制器对象 */ public static AppConfigController getAppConfigController() { return APP_CONFIG_CONTROLLER; } /** - * 获取UI资源绑定组件 + * 获取UI资源绑定组件。 * - * @return org.jcnc.jnotepad.app.i18n.UiResourceBundle - * @since 2023/8/30 12:45 + * @return org.jcnc.jnotepad.app.i18n.UiResourceBundle UI资源绑定对象 */ public static UiResourceBundle getUiResourceBundle() { return UI_RESOURCE_BUNDLE; diff --git a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java index bd4caefe85532d970a196313a98b3b7359dc62c4..92f0daab00a7af138f0c1e44a0187c3ccadc0491 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java @@ -2,43 +2,127 @@ 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.StatusHorizontalBox; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; +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组件,以减少组件单例模式造成的代码复杂性。

+ * * @author gewuyou */ public class UiUtil { + /** + * 标签页布局组件 + */ + private static final MainTabPane TAB_PANE = MainTabPane.getInstance(); + /** + * 视图管理组件 + */ + private static final ViewManager VIEW_MANAGER = ViewManager.getInstance(); + /** + * 状态栏组件 + */ + private static final StatusHorizontalBox STATUS_BOX = StatusHorizontalBox.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 javafx.scene.image.Image - * @since 2023/8/30 11:03 + * @return org.jcnc.jnotepad.ui.setStage.SetStage 设置窗口对象 + */ + public static SetStage getSetStage() { + return SET_STAGE; + } + + /** + * 获取应用程序图标。 + * + * @return javafx.scene.image.Image 应用程序图标对象 */ public static Image getIcon() { return ICON; } /** - * 获取应用窗口 + * 获取标签页布局组件。 + * + * @return org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane 标签页布局组件对象 + * @apiNote JNotepadTabPane.getInstance() + * @see MainTabPane + */ + public static MainTabPane getJnotepadTabPane() { + return TAB_PANE; + } + + /** + * 获取标签页组件。 * - * @return javafx.stage.Window + * @return org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab 标签页组件对象 + * @apiNote JNotepadTabPane.getInstance().getSelected()
获取当前选中的标签页 + * @see MainTabPane + */ + public static MainTab getJnotepadtab() { + return TAB_PANE.getSelected(); + } + + /** + * 获取应用窗口。 + * + * @return javafx.stage.Window 应用窗口对象 * @apiNote JNotepadTabPane.getInstance().getSelected().getTabPane().getScene().getWindow() - * @since 2023/8/29 14:12 */ public static Window getAppWindow() { - return LunchApp.getWindow(); + return TAB_PANE.getSelected().getTabPane().getScene().getWindow(); + } + + /** + * 获取视图管理组件。 + * + * @return org.jcnc.jnotepad.view.manager.ViewManager 视图管理组件对象 + * @apiNote ViewManager.getInstance() + */ + public static ViewManager getViewManager() { + return VIEW_MANAGER; + } + + /** + * 获取状态栏组件。 + * + * @return org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox 状态栏组件对象 + */ + public static StatusHorizontalBox getStatusBox() { + return STATUS_BOX; + } + + /** + * 获取菜单栏组件。 + * + * @return org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar 菜单栏组件对象 + */ + public static JNotepadMenuBar getMenuBar() { + return MENU_BAR; } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/FileChooserFactory.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/FileChooserFactory.java index 7b6489bd46d4eedb598c997e36813726cd43bf38..5cb0f6dec1e2960e694d89274951a0c67339ba8f 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/FileChooserFactory.java +++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/FileChooserFactory.java @@ -7,27 +7,27 @@ import java.io.File; /** * 文件选择对话框工厂 * + *

该工厂接口用于创建文件选择对话框,包括原始和详细两种类型。

+ * * @author gewuyou */ public interface FileChooserFactory { /** - * 创建原始文件选择对话框 + * 创建原始文件选择对话框。 * - * @return javafx.stage.FileChooser - * @since 2023/8/31 20:29 + * @return javafx.stage.FileChooser 原始文件选择对话框对象 */ FileChooser createFileChooser(); /** - * 创建详细的文件选择对话框 + * 创建详细的文件选择对话框。 * - * @param title 对话框名字 - * @param filename 选中的文件名 + * @param title 对话框标题 + * @param filename 默认选中的文件名 * @param directory 初始目录 - * @param extensionFilter 文件类型数组 - * @return javafx.stage.FileChooser - * @apiNote - * @since 2023/8/31 20:35 + * @param extensionFilter 文件类型过滤器 + * @return javafx.stage.FileChooser 详细文件选择对话框对象 + * @apiNote 该方法用于创建一个带有标题、默认文件名、初始目录和文件类型过滤器的详细文件选择对话框。 */ FileChooser createFileChooser(String title, String filename, File directory, FileChooser.ExtensionFilter extensionFilter); } 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 dbe126f63ed30fb0030d8100496f049b44604511..82f16dec07db88f47702565b60a6f95d909b442a 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 @@ -27,7 +27,6 @@ public class TextFileChooserFactory implements FileChooserFactory { * 创建原始文件选择对话框 * * @return javafx.stage.FileChooser - * @since 2023/8/31 20:29 */ @Override public FileChooser createFileChooser() { @@ -43,7 +42,6 @@ public class TextFileChooserFactory implements FileChooserFactory { * @param extensionFilter 文件类型数组 * @return javafx.stage.FileChooser * @apiNote - * @since 2023/8/31 20:35 */ @Override public FileChooser createFileChooser(String title, String filename, File directory, FileChooser.ExtensionFilter extensionFilter) { diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java index 8ceef05a8b4b3e5f6fdc47225db0bef647bd3c4e..9a14b18ba0c6205cb674c57481f33a6c71c6bcc2 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java @@ -2,8 +2,15 @@ package org.jcnc.jnotepad.ui.module; import javafx.scene.Node; import javafx.scene.layout.BorderPane; -import org.jcnc.jnotepad.Interface.BorderPaneAble; - +import org.jcnc.jnotepad.interfaces.BorderPaneAble; + +/** + * 抽象边界面板类 + * + *

这个抽象类继承自JavaFX的BorderPane类,实现了BorderPaneAble接口,用于管理UI组件的布局。

+ * + * @author luke + */ public abstract class AbstractBorderPane extends BorderPane implements BorderPaneAble { @Override @@ -30,5 +37,4 @@ public abstract class AbstractBorderPane extends BorderPane implements BorderPan public void setCenterComponent(Node node) { setCenter(node); } - } diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractHBox.java b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractHorizontalBox.java similarity index 51% rename from src/main/java/org/jcnc/jnotepad/ui/module/AbstractHBox.java rename to src/main/java/org/jcnc/jnotepad/ui/module/AbstractHorizontalBox.java index 189ee44fc653f3f52cfd0ac0b4ae17244f0998c7..8cb72e35a2a3d25644c4b90b964330ae0def0ff1 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractHBox.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractHorizontalBox.java @@ -2,12 +2,19 @@ package org.jcnc.jnotepad.ui.module; import javafx.scene.Node; import javafx.scene.layout.HBox; -import org.jcnc.jnotepad.Interface.HBoxAble; +import org.jcnc.jnotepad.interfaces.HorizontalBoxAble; -public abstract class AbstractHBox extends HBox implements HBoxAble { +/** + * 抽象水平盒子类 + * + *

这个抽象类继承自JavaFX的HBox类,实现了HBoxAble接口,用于管理水平排列的UI组件。

+ * + * @author luke + */ +public abstract class AbstractHorizontalBox extends HBox implements HorizontalBoxAble { private final HBox hBox; - public AbstractHBox() { + public AbstractHorizontalBox() { hBox = new HBox(); } @@ -22,7 +29,7 @@ public abstract class AbstractHBox extends HBox implements HBoxAble { } @Override - public HBox getHBox() { + public HBox getHorizontalBox() { return hBox; } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractVBox.java b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractVerticalBox.java similarity index 51% rename from src/main/java/org/jcnc/jnotepad/ui/module/AbstractVBox.java rename to src/main/java/org/jcnc/jnotepad/ui/module/AbstractVerticalBox.java index 71341e1dadd7164bef1364f3df97cdb750b67ba5..bdb24321cdfe99c1d84de18d3dede91e8b11fcdb 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractVBox.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractVerticalBox.java @@ -2,13 +2,20 @@ package org.jcnc.jnotepad.ui.module; import javafx.scene.Node; import javafx.scene.layout.VBox; -import org.jcnc.jnotepad.Interface.VBoxAble; +import org.jcnc.jnotepad.interfaces.VerticalBoxAble; -public abstract class AbstractVBox extends VBox implements VBoxAble { +/** + * 抽象垂直盒子类 + * + *

这个抽象类继承自JavaFX的VBox类,实现了VBoxAble接口,用于管理垂直排列的UI组件。

+ * + * @author luke + */ +public abstract class AbstractVerticalBox extends VBox implements VerticalBoxAble { private final VBox vBox; - public AbstractVBox() { + public AbstractVerticalBox() { vBox = new VBox(); } @@ -23,7 +30,7 @@ public abstract class AbstractVBox extends VBox implements VBoxAble { } @Override - public VBox getVBox() { + public VBox getVerticalBox() { return vBox; } } 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 fbb47a08e773c99c956140149c8d25c96adbcb14..d68b7ae5367b16dbd3b48807ba71a3fead47aef4 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java @@ -3,11 +3,10 @@ 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.root.center.main.center.tab.MainTab; 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; @@ -16,13 +15,17 @@ import java.io.FileWriter; import java.io.IOException; /** - * @author 许轲 + * 行号文本区域 + * + *

这个类继承自JavaFX的BorderPane类,用于显示带有行号的文本区域。它包括主要文本区域和行号文本区域。

+ * + * @author luke */ 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; @@ -47,8 +50,6 @@ public class LineNumberTextArea extends BorderPane { setCenter(mainTextArea); setLeft(lineNumberArea); - - } private void initListeners() { @@ -60,12 +61,12 @@ public class LineNumberTextArea extends BorderPane { lineNumberArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberWidth()); - this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> JNotepadStatusBox.getInstance().updateWordCountStatusLabel()); + this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> UiUtil.getStatusBox().updateWordCountStatusLabel()); this.textProperty().addListener((observable, oldValue, newValue) -> { // 更新行号 updateLineNumberArea(); // 更新状态栏 - JNotepadStatusBox.getInstance().updateWordCountStatusLabel(); + UiUtil.getStatusBox().updateWordCountStatusLabel(); // 自动保存 save(); }); @@ -75,7 +76,7 @@ public class LineNumberTextArea extends BorderPane { * 以原文件编码格式写回文件 */ public void save() { - JNotepadTab tab = JNotepadTabPane.getInstance().getSelected(); + MainTab tab = UiUtil.getJnotepadtab(); if (tab == null) { return; } @@ -114,7 +115,6 @@ public class LineNumberTextArea extends BorderPane { return mainTextArea.textProperty(); } - private void updateLineNumberArea() { // 保存当前的滚动位置 /* @@ -138,6 +138,4 @@ public class LineNumberTextArea extends BorderPane { public TextArea getMainTextArea() { return mainTextArea; } - } - diff --git a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java b/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java similarity index 95% rename from src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java rename to src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java index 02927370bbfa98e2ffba42fa774b86c9e4235c4f..758e450a4666bd0e6dad296b46d699669b0940ae 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.ui.setStage; +package org.jcnc.jnotepad.ui.setstage; import javafx.scene.Scene; import javafx.scene.control.Label; @@ -12,6 +12,8 @@ import org.jcnc.jnotepad.tool.UiUtil; /** * 设置窗口管理类,实现了单例模式。 * + *

该类用于管理设置窗口的显示和内容。

+ * * @author 许轲 */ public class SetStage { @@ -22,8 +24,6 @@ public class SetStage { private static final SetStage SET_STAGE = new SetStage(); private StackPane contentDisplay; - private TreeView settingsTreeView; - private SetStage() { // 私有构造方法以实现单例模式 } @@ -45,7 +45,7 @@ public class SetStage { contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); // 创建 TreeView,并初始化设置项 - settingsTreeView = createTreeView(); + TreeView settingsTreeView = createTreeView(); // 创建一个分割面板,左侧是设置树,右侧是内容显示区域 SplitPane splitPane = new SplitPane(settingsTreeView, contentDisplay); @@ -82,7 +82,6 @@ public class SetStage { appearanceItem.getChildren().add(new TreeItem<>("外观设置项1")); appearanceItem.getChildren().add(new TreeItem<>("外观设置项2")); - securityItem.getChildren().add(new TreeItem<>("安全设置项1")); securityItem.getChildren().add(new TreeItem<>("安全设置项2")); diff --git a/src/main/java/org/jcnc/jnotepad/view/manager/CustomTitleBar.java b/src/main/java/org/jcnc/jnotepad/view/manager/CustomTitleBar.java index 629d7b5551321e54a37067cbdcd2e13915aa9c83..0102b2837e19081dc548431e47e22bd50d015ed2 100644 --- a/src/main/java/org/jcnc/jnotepad/view/manager/CustomTitleBar.java +++ b/src/main/java/org/jcnc/jnotepad/view/manager/CustomTitleBar.java @@ -10,11 +10,12 @@ import javafx.scene.layout.HBox; import javafx.stage.Stage; import javafx.util.Duration; -/* - * 自定义的标题栏,没有完善好,暂时搁置 - * */ - - +/** + * 自定义标题栏组件,用于自定义窗口标题栏的显示和交互。 + * 该类提供了窗口图标、标题文本以及最小化、最大化和关闭按钮的功能。 + * + * @author 许轲 + */ public class CustomTitleBar extends HBox { private static CustomTitleBar instance; @@ -23,9 +24,9 @@ public class CustomTitleBar extends HBox { this.setAlignment(Pos.CENTER); // 左侧图标 - ImageView iconView = new ImageView(new Image("icon.png")); - iconView.setFitWidth(30); - iconView.setFitHeight(30); + ImageView iconImageView = new ImageView(new Image("icon.png")); + iconImageView.setFitWidth(30); + iconImageView.setFitHeight(30); Label titleLabel = new Label("自定义标题栏"); titleLabel.setStyle("-fx-font-size: 18px;"); @@ -34,14 +35,15 @@ public class CustomTitleBar extends HBox { HBox buttonBox = new HBox(5); buttonBox.setAlignment(Pos.CENTER_RIGHT); + // 最小化按钮 Button minimizeButton = new Button("-"); minimizeButton.setStyle("-fx-background-color: transparent; "); minimizeButton.setOnAction(event -> { - Stage stage = (Stage) this.getScene().getWindow(); stage.setIconified(true); // 最小化窗口 }); + // 最大化/还原按钮 Button maximizeButton = new Button("□"); maximizeButton.setStyle("-fx-background-color: transparent;"); maximizeButton.setOnAction(event -> { @@ -49,6 +51,7 @@ public class CustomTitleBar extends HBox { stage.setMaximized(!stage.isMaximized()); // 最大化/还原窗口 }); + // 关闭按钮 Button closeButton = new Button("X"); closeButton.setStyle("-fx-background-color: transparent;"); closeButton.setOnAction(event -> { @@ -58,9 +61,14 @@ public class CustomTitleBar extends HBox { buttonBox.getChildren().addAll(minimizeButton, maximizeButton, closeButton); - this.getChildren().addAll(iconView, titleLabel, buttonBox); + this.getChildren().addAll(iconImageView, titleLabel, buttonBox); } + /** + * 获取标题栏的单例实例 + * + * @return CustomTitleBar的单例实例 + */ public static CustomTitleBar getInstance() { if (instance == null) { instance = new CustomTitleBar(); @@ -68,11 +76,16 @@ public class CustomTitleBar extends HBox { return instance; } + /** + * 使窗口可拖动 + * + * @param stage 要拖动的窗口的Stage对象 + */ public void makeDraggable(Stage stage) { - // 创建一个平移动画,设置持续时间和目标位置 TranslateTransition minimizeAnimation = new TranslateTransition(Duration.seconds(0.3), stage.getScene().getRoot()); - minimizeAnimation.setToY(stage.getHeight()); // 将根节点向下平移,使窗口消失 + // 将根节点向下平移,使窗口消失 + minimizeAnimation.setToY(stage.getHeight()); final Delta dragDelta = new Delta(); @@ -92,4 +105,4 @@ public class CustomTitleBar extends HBox { private static class Delta { double x, y; } -} \ No newline at end of file +} diff --git a/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java b/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java index 8da3b47a4454cbf71f185e9c767bf7c9a284e500..9008291c442df86a3edbb2d1c1517589cfa80bd5 100644 --- a/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java +++ b/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java @@ -5,9 +5,10 @@ import javafx.scene.layout.BorderPane; import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.root.RootBorderPane; - /** - * 该类管理记事本应用程序的视图组件。 + * 视图管理器类,用于管理记事本应用程序的视图组件。 + * + *

该类负责管理应用程序的视图组件,包括主界面布局和标签页索引等。

* * @author 许轲 */ @@ -15,30 +16,27 @@ public class ViewManager { private static ViewManager instance = null; - // 主界面布局 private int tabIndex = 0; /** * 主布局 */ private BorderPane root; - /** - * 构造函数。设置场景和根布局。 + * 私有构造函数。设置场景和根布局。 * - * @param scene 与视图相关联的JavaFX场景。 + * @param scene 与视图相关联的 JavaFX 场景。 */ private ViewManager(Scene scene) { root = new BorderPane(); scene.setRoot(root); - } /** - * 获取ViewManager的实例。如果实例不存在,则创建一个新实例。 + * 获取 ViewManager 的实例。如果实例不存在,则创建一个新实例。 * - * @param scene 与视图相关联的JavaFX场景。 - * @return ViewManager的实例。 + * @param scene 与视图相关联的 JavaFX 场景。 + * @return ViewManager 的实例。 */ public static ViewManager getInstance(Scene scene) { if (instance == null) { @@ -47,18 +45,24 @@ public class ViewManager { return instance; } + /** + * 获取 ViewManager 的实例。 + * + * @return ViewManager 的实例。 + * @throws AppException 如果实例未初始化。 + */ public static ViewManager getInstance() { if (instance != null) { return instance; } else { - throw new AppException("ViewManager的实例未初始化!"); + throw new AppException("ViewManager 的实例未初始化!"); } } /** - * 自增并获取标签页索引 + * 自增并获取标签页索引。 * - * @return int 标签页索引 + * @return 自增后的标签页索引。 * @apiNote ++tabIndex */ public int selfIncreaseAndGetTabIndex() { @@ -68,13 +72,13 @@ public class ViewManager { /** * 初始化屏幕组件。 * - * @param scene 与视图相关联的JavaFX场景。 + * @param scene 与视图相关联的 JavaFX 场景。 */ public void initScreen(Scene scene) { // 创建主界面布局 root = new BorderPane(); - //root.setTop(CustomTitleBar.getInstance()); + /*root.setTop(CustomTitleBar.getInstance());*/ root.setCenter(RootBorderPane.getInstance()); scene.setRoot(root);