diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 9d88868..b867622 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -12,20 +12,24 @@ module org.jcnc.jnotepad { requires ch.qos.logback.core; requires ch.qos.logback.classic; requires com.ibm.icu; - exports org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad; + exports org.jcnc.jnotepad.app.config; + exports org.jcnc.jnotepad.app.i18n; + exports org.jcnc.jnotepad.constants; + exports org.jcnc.jnotepad.controller.config; + 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.tool; exports org.jcnc.jnotepad.Interface; - exports org.jcnc.jnotepad.controller.manager; - exports org.jcnc.jnotepad.view.manager; - exports org.jcnc.jnotepad.constants; - exports org.jcnc.jnotepad.controller.i18n; exports org.jcnc.jnotepad.ui.root.center.tab; exports org.jcnc.jnotepad.ui.root.bottom.status; exports org.jcnc.jnotepad.ui.root.top.menu; - opens org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad.ui.module; + exports org.jcnc.jnotepad.ui.setStage; exports org.jcnc.jnotepad.ui.root.top.tools; - exports org.jcnc.jnotepad.controller.event.handler.tool; - exports org.jcnc.jnotepad.controller.event.handler.menuBar; + exports org.jcnc.jnotepad.view.manager; + opens org.jcnc.jnotepad.app.config; + } \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java b/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java index 8bdf62b..2eb7826 100644 --- a/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java +++ b/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java @@ -8,5 +8,6 @@ public interface HBoxAble { void addChild(Node node); void addChild(Node... nodes); + HBox getHBox(); } diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index 984a657..f931eda 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -6,12 +6,12 @@ import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; -import org.jcnc.jnotepad.app.i18n.UIResourceBundle; +import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.AppConstants; import org.jcnc.jnotepad.constants.TextConstants; import org.jcnc.jnotepad.controller.i18n.LocalizationController; -import org.jcnc.jnotepad.controller.manager.Controller; import org.jcnc.jnotepad.manager.ThreadPoolManager; +import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.view.manager.ViewManager; @@ -30,9 +30,12 @@ public class LunchApp extends Application { * 线程池 */ private final ExecutorService threadPool = ThreadPoolManager.getThreadPool(); - Controller controller = Controller.getInstance(); Scene scene; + public static void main(String[] args) { + launch(args); + } + @Override public void start(Stage primaryStage) { Pane root = new Pane(); @@ -42,7 +45,7 @@ public class LunchApp extends Application { Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet()); scene.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/css/styles.css")).toExternalForm()); initUiComponents(); - UIResourceBundle.bindStringProperty(primaryStage.titleProperty(), TextConstants.TITLE); + UiResourceBundle.bindStringProperty(primaryStage.titleProperty(), TextConstants.TITLE); primaryStage.setWidth(width); primaryStage.setHeight(length); primaryStage.setScene(scene); @@ -61,7 +64,7 @@ public class LunchApp extends Application { // 使用线程池加载关联文件并创建文本区域 List rawParameters = getParameters().getRaw(); - controller.openAssociatedFileAndCreateTextArea(rawParameters); + SingletonUtil.getController().openAssociatedFileAndCreateTextArea(rawParameters); } @Override @@ -70,8 +73,4 @@ public class LunchApp extends Application { threadPool.shutdownNow(); } - public static void main(String[] args) { - launch(args); - } - } diff --git a/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java index 677f3b7..05938af 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java @@ -5,64 +5,23 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.ArrayList; import java.util.List; +import static org.jcnc.jnotepad.constants.TextConstants.CHINESE; + /** * 数据模型类,用于表示 MyData 对象的数据结构。 * * @author 许轲 */ public class AppConfig { - private String language; - - @JsonIgnore - private boolean textWrap; - - private List shortcutKey; - - /** - * ShortcutKey 类,用于表示快捷键信息。 - */ - public static class ShortcutKey { - private String buttonName; - private String shortcutKeyValue; - - public String getButtonName() { - return buttonName; - } - - public void setButtonName(String buttonName) { - this.buttonName = buttonName; - } - - public String getShortcutKeyValue() { - return shortcutKeyValue; - } - - public void setShortcutKeyValue(String shortcutKeyValue) { - this.shortcutKeyValue = shortcutKeyValue; - } - } - - public String getLanguage() { - return language; - } - - public void setLanguage(String language) { - this.language = language; - } - - public List getShortcutKey() { - return shortcutKey; - } - - public void setShortcutKey(List shortcutKey) { - this.shortcutKey = shortcutKey; - } - private static final String CTRL_N = "ctrl+n"; private static final String CTRL_O = "ctrl+o"; private static final String CTRL_S = "ctrl+s"; private static final String CTRL_ALT_S = "ctrl+alt+s"; private static final String ALT_S = "alt+s"; + private String language; + @JsonIgnore + private boolean textWrap; + private List shortcutKey; /** * 生成默认应用配置对象。 @@ -71,7 +30,7 @@ public class AppConfig { */ public static AppConfig generateDefaultAppConfig() { AppConfig myData = new AppConfig(); - myData.setLanguage("chinese"); + myData.setLanguage(CHINESE); myData.setTextWrap(false); List shortcutKeys = new ArrayList<>(); @@ -102,6 +61,22 @@ public class AppConfig { return shortcutKey; } + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public List getShortcutKey() { + return shortcutKey; + } + + public void setShortcutKey(List shortcutKey) { + this.shortcutKey = shortcutKey; + } + public boolean isTextWrap() { return textWrap; } @@ -109,4 +84,28 @@ public class AppConfig { public void setTextWrap(boolean textWrap) { this.textWrap = textWrap; } + + /** + * ShortcutKey 类,用于表示快捷键信息。 + */ + public static class ShortcutKey { + private String buttonName; + private String shortcutKeyValue; + + public String getButtonName() { + return buttonName; + } + + public void setButtonName(String buttonName) { + this.buttonName = buttonName; + } + + public String getShortcutKeyValue() { + return shortcutKeyValue; + } + + public void setShortcutKeyValue(String shortcutKeyValue) { + this.shortcutKeyValue = shortcutKeyValue; + } + } } diff --git a/src/main/java/org/jcnc/jnotepad/app/i18n/UIResourceBundle.java b/src/main/java/org/jcnc/jnotepad/app/i18n/UiResourceBundle.java similarity index 93% rename from src/main/java/org/jcnc/jnotepad/app/i18n/UIResourceBundle.java rename to src/main/java/org/jcnc/jnotepad/app/i18n/UiResourceBundle.java index a0ec173..945f872 100644 --- a/src/main/java/org/jcnc/jnotepad/app/i18n/UIResourceBundle.java +++ b/src/main/java/org/jcnc/jnotepad/app/i18n/UiResourceBundle.java @@ -15,31 +15,52 @@ import java.util.ResourceBundle; * * @author songdragon */ -public class UIResourceBundle { +public class UiResourceBundle { - private static final UIResourceBundle INSTANCE = new UIResourceBundle(); + private static final UiResourceBundle INSTANCE = new UiResourceBundle(); /** * resource目录下的i18n/i18nXXX.properties */ private static final String BASENAME = "i18n/i18n"; - + /** + * 资源文件的观察者绑定。 + */ + private final ObjectProperty resources = new SimpleObjectProperty<>(); /** * 当前语言 */ private Locale currentLocale; - public static UIResourceBundle getInstance() { + private UiResourceBundle() { + + } + + public static UiResourceBundle getInstance() { return INSTANCE; } - private UIResourceBundle() { - + /** + * 工具方法:绑定StringProperty和Key对应的内容 + * + * @param stringProperty 字符串属性 + * @param key 键值 + */ + public static void bindStringProperty(StringProperty stringProperty, String key) { + if (stringProperty == null) { + return; + } + stringProperty.bind(getInstance().getStringBinding(key)); } /** - * 资源文件的观察者绑定。 + * 获取当前资源中的key值 + * + * @param key 资源所对应键 + * @return 当前键所对应的值 */ - private final ObjectProperty resources = new SimpleObjectProperty<>(); + public static String getContent(String key) { + return INSTANCE.getResources().getString(key); + } /** * 获取当前资源文件 @@ -81,29 +102,6 @@ public class UIResourceBundle { return Bindings.createStringBinding(() -> getResources().getString(key), resourcesProperty()); } - /** - * 工具方法:绑定StringProperty和Key对应的内容 - * - * @param stringProperty 字符串属性 - * @param key 键值 - */ - public static void bindStringProperty(StringProperty stringProperty, String key) { - if (stringProperty == null) { - return; - } - stringProperty.bind(getInstance().getStringBinding(key)); - } - - /** - * 获取当前资源中的key值 - * - * @param key 资源所对应键 - * @return 当前键所对应的值 - */ - public static String getContent(String key) { - return INSTANCE.getResources().getString(key); - } - /** * 注册资源变更监听器 * diff --git a/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java b/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java index 7ef55e6..ade589f 100644 --- a/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java +++ b/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java @@ -7,9 +7,6 @@ package org.jcnc.jnotepad.constants; */ public class AppConstants { - private AppConstants() { - } - /** * 初始宽度 */ @@ -23,4 +20,7 @@ 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 176558f..61ba647 100644 --- a/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java +++ b/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java @@ -8,19 +8,15 @@ package org.jcnc.jnotepad.constants; */ public class TextConstants { - private TextConstants() { - } + public static final String TITLE = "title"; /// GlobalConfig文本常量 - - public static final String TITLE = "title"; public static final String SAVE = "SAVE"; public static final String FILE = "FILE"; public static final String NEW = "NEW"; public static final String OPEN = "OPEN"; public static final String SAVE_AS = "SAVE_AS"; - public static final String RENAME = "RENAME"; public static final String SET = "SET"; public static final String WORD_WRAP = "WORD_WRAP"; @@ -37,16 +33,18 @@ public class TextConstants { public static final String COLUMN = "COLUMN"; public static final String WORD_COUNT = "WORD_COUNT"; public static final String ENCODE = "ENCODE"; - - /// Config 文本常量 /** * 英文小写 */ public static final String ENGLISH = "english"; + /// Config 文本常量 /** * 中文小写 */ public static final String CHINESE = "chinese"; + private TextConstants() { + } + } 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 3b605f3..b9e11bc 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java @@ -22,27 +22,23 @@ import java.util.List; */ public class AppConfigController { - private static final Logger logger = LogUtil.getLogger(AppConfigController.class); - - private static final AppConfigController INSTANCE = new AppConfigController(); - - public static AppConfigController getInstance() { - return INSTANCE; - } - /** * 配置文件名 */ public static final String CONFIG_NAME = "jnotepadConfig.json"; - + private static final Logger logger = LogUtil.getLogger(AppConfigController.class); + 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(); } + public static AppConfigController getInstance() { + return INSTANCE; + } + /** * 加载配置文件内容 */ 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 b4de320..7506996 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 @@ -2,7 +2,7 @@ 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.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; @@ -36,7 +36,7 @@ public class NewFile implements EventHandler { ViewManager viewManager = UiUtil.getViewManager(); // 创建标签页 JNotepadTab jNotepadTab = new JNotepadTab( - UIResourceBundle.getContent(TextConstants.NEW_FILE) + UiResourceBundle.getContent(TextConstants.NEW_FILE) + viewManager.selfIncreaseAndGetTabIndex(), textArea); // 设置当前标签页与本地文件无关联 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 index ec2e9e5..1c403db 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,8 +1,8 @@ package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.event.ActionEvent; -import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.tool.LogUtil; +import org.jcnc.jnotepad.tool.SingletonUtil; import java.io.File; @@ -16,7 +16,7 @@ public class OpenConfig extends OpenFile { @Override public void handle(ActionEvent actionEvent) { // 显示文件选择对话框,并获取配置文件 - File file = AppConfigController.getInstance().getConfigPath().toFile(); + File file = SingletonUtil.getAppConfigController().getConfigPath().toFile(); LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能,{}", file); // 创建打开文件的任务并启动线程执行任务 openFile(file); 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 64f0753..fb1c761 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 @@ -3,9 +3,9 @@ package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.stage.FileChooser; -import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.tool.LogUtil; +import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import org.slf4j.Logger; @@ -46,7 +46,7 @@ public class SaveFile implements EventHandler { // 如果该文件是配置文件则刷新快捷键 if (CONFIG_NAME.equals(selectedTab.getText())) { // 重新加载语言包和快捷键 - AppConfigController.getInstance().loadConfig(); + SingletonUtil.getAppConfigController().loadConfig(); UiUtil.getMenuBar().initShortcutKeys(); LocalizationController.initLocal(); logger.info("已刷新语言包!"); 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 4d36719..f46891b 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.ui.setStage.SetStage; +import org.jcnc.jnotepad.tool.UiUtil; /** @@ -21,7 +21,7 @@ public class SetBtn implements EventHandler { */ @Override public void handle(ActionEvent event) { - SetStage.getInstance().openSetStage(); + UiUtil.getSetStage().openSetStage(); } 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 84edbfa..0de3f0c 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java @@ -1,8 +1,8 @@ package org.jcnc.jnotepad.controller.i18n; import org.jcnc.jnotepad.LunchApp; -import org.jcnc.jnotepad.app.i18n.UIResourceBundle; import org.jcnc.jnotepad.controller.config.AppConfigController; +import org.jcnc.jnotepad.tool.SingletonUtil; import java.util.HashMap; import java.util.LinkedHashMap; @@ -36,15 +36,14 @@ public class LocalizationController { SUPPORT_LANGUAGES.put(Locale.ENGLISH, ENGLISH); } - public static Locale getCurrentLocal() { - return Locale.getDefault(); + private final AppConfigController appConfigController; + + private LocalizationController() { + this.appConfigController = SingletonUtil.getAppConfigController(); } - /** - * 初始化语言配置 - */ - public static void initLocal() { - setCurrentLocal(null); + public static Locale getCurrentLocal() { + return Locale.getDefault(); } /** @@ -65,19 +64,15 @@ public class LocalizationController { } Locale.setDefault(locale); - UIResourceBundle.getInstance().resetLocal(getCurrentLocal()); + SingletonUtil.getUiResourceBundle().resetLocal(getCurrentLocal()); LOCALIZATION_CONFIG.setLanguage(SUPPORT_LANGUAGES.get(locale)); } - private LocalizationController() { - this.appConfigController = AppConfigController.getInstance(); - } - - private final AppConfigController appConfigController; - - - private void setLanguage(String language) { - appConfigController.updateLanguage(language); + /** + * 初始化语言配置 + */ + public static void initLocal() { + setCurrentLocal(null); } /** @@ -88,4 +83,8 @@ public class LocalizationController { public String getLanguage() { return appConfigController.getLanguage(); } + + private void setLanguage(String language) { + appConfigController.updateLanguage(language); + } } diff --git a/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java b/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java index cf7f6ff..7201662 100644 --- a/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java +++ b/src/main/java/org/jcnc/jnotepad/manager/ThreadPoolManager.java @@ -13,9 +13,6 @@ import java.util.concurrent.atomic.AtomicInteger; * @author gewuyou */ public class ThreadPoolManager { - private ThreadPoolManager() { - } - private static final Logger logger = LogUtil.getLogger(ThreadPoolManager.class); /** * 核心线程数 @@ -45,18 +42,6 @@ public class ThreadPoolManager { * 当前运行线程数 */ private static final AtomicInteger THREAD_COUNT = new AtomicInteger(1); - - /** - * 当前运行线程数自减 - * - * @apiNote 当你创建任务时,务必在最后执行一次该方法 - * @see ThreadPoolManager - * @since 2023/8/26 22:00 - */ - public static void threadContSelfSubtracting() { - THREAD_COUNT.decrementAndGet(); - } - /** * 线程工厂 */ @@ -78,6 +63,20 @@ public class ThreadPoolManager { private static final ThreadPoolExecutor THREAD_POOL = new ThreadPoolExecutor( CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_TIME, TIME_UNIT, BLOCKING_QUEUE, THREAD_FACTORY, HANDLER); + private ThreadPoolManager() { + } + + /** + * 当前运行线程数自减 + * + * @apiNote 当你创建任务时,务必在最后执行一次该方法 + * @see ThreadPoolManager + * @since 2023/8/26 22:00 + */ + public static void threadContSelfSubtracting() { + THREAD_COUNT.decrementAndGet(); + } + public static ExecutorService getThreadPool() { return THREAD_POOL; } diff --git a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java index a4d07e1..0889776 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java +++ b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java @@ -17,11 +17,11 @@ import java.nio.charset.Charset; * @author 许轲 */ public class EncodingDetector { - private static final Logger LOG = LogUtil.getLogger(EncodingDetector.class); /** * 编码侦测概率,阈值:50% */ public static final int THRESHOLD_CONFIDENCE = 50; + private static final Logger LOG = LogUtil.getLogger(EncodingDetector.class); private EncodingDetector() { diff --git a/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java b/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java index b865755..46674ee 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java @@ -15,9 +15,6 @@ import static com.fasterxml.jackson.core.util.DefaultIndenter.SYS_LF; * @author songdragon */ public class JsonUtil { - private JsonUtil() { - } - public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); static { @@ -29,6 +26,9 @@ public class JsonUtil { OBJECT_MAPPER.setDefaultPrettyPrinter(prettyPrinter); } + private JsonUtil() { + } + public static String toJsonString(Object o) { try { return OBJECT_MAPPER.writeValueAsString(o); diff --git a/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java new file mode 100644 index 0000000..22e1a7d --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java @@ -0,0 +1,63 @@ +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组件外项目中所有需要的单例组件,以减少单例带来的代码的复杂性 + * + * @author gewuyou + */ +public class SingletonUtil { + + + /** + * 控制器类 + */ + private static final Controller CONTROLLER = Controller.getInstance(); + + /** + * 应用程序配置控制器 + */ + private static final AppConfigController APP_CONFIG_CONTROLLER = AppConfigController.getInstance(); + /** + * UI资源绑定组件 + */ + private static final UiResourceBundle UI_RESOURCE_BUNDLE = UiResourceBundle.getInstance(); + + private SingletonUtil() { + } + + /** + * 获取控制器类 + * + * @return org.jcnc.jnotepad.controller.manager.Controller + * @since 2023/8/30 13:25 + */ + public static Controller getController() { + return CONTROLLER; + } + + /** + * 获取应用程序配置控制器 + * + * @return org.jcnc.jnotepad.controller.config.AppConfigController + * @since 2023/8/30 12:48 + */ + public static AppConfigController getAppConfigController() { + return APP_CONFIG_CONTROLLER; + } + + /** + * 获取UI资源绑定组件I + * + * @return org.jcnc.jnotepad.app.i18n.UiResourceBundle + * @since 2023/8/30 12:45 + */ + 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 caee381..5bffe22 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java @@ -7,6 +7,7 @@ import org.jcnc.jnotepad.ui.root.bottom.status.JNotepadStatusBox; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.ui.root.top.menu.JNotepadMenuBar; +import org.jcnc.jnotepad.ui.setStage.SetStage; import org.jcnc.jnotepad.view.manager.ViewManager; import java.util.Objects; @@ -18,9 +19,6 @@ import java.util.Objects; * @author gewuyou */ public class UiUtil { - private UiUtil() { - } - /** * 标签页布局组件 */ @@ -41,6 +39,23 @@ public class UiUtil { * 应用程序图标 */ 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; + } /** * 获取应用程序图标 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 b64c6b8..428214d 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.controller.config.AppConfigController; import org.jcnc.jnotepad.tool.LogUtil; -import org.jcnc.jnotepad.ui.root.bottom.status.JNotepadStatusBox; +import org.jcnc.jnotepad.tool.SingletonUtil; +import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; -import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; import java.io.BufferedWriter; import java.io.File; @@ -18,16 +17,15 @@ import java.io.IOException; * @author 许轲 */ public class LineNumberTextArea extends BorderPane { - private final TextArea mainTextArea; - private final TextArea lineNumberArea; - static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE}; private static final int MIN_LINE_NUMBER_WIDTH = 30; + private final TextArea mainTextArea; + private final TextArea lineNumberArea; public LineNumberTextArea() { mainTextArea = new TextArea(); - mainTextArea.setWrapText(AppConfigController.getInstance().getAutoLineConfig()); + mainTextArea.setWrapText(SingletonUtil.getAppConfigController().getAutoLineConfig()); lineNumberArea = new TextArea(); lineNumberArea.setEditable(false); @@ -58,12 +56,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(); }); @@ -73,7 +71,7 @@ public class LineNumberTextArea extends BorderPane { * 以原文件编码格式写回文件 */ public void save() { - JNotepadTab tab = JNotepadTabPane.getInstance().getSelected(); + JNotepadTab tab = UiUtil.getJnotepadtab(); if (tab != null) { File file = (File) tab.getUserData(); String newValue = this.mainTextArea.getText(); @@ -87,6 +85,7 @@ public class LineNumberTextArea extends BorderPane { } } } + private void updateLineNumberWidth() { int numOfLines = mainTextArea.getParagraphs().size(); int count = 1; diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/bottom/status/JNotepadStatusBox.java b/src/main/java/org/jcnc/jnotepad/ui/root/bottom/status/JNotepadStatusBox.java index ef0c0cd..6aa2502 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/bottom/status/JNotepadStatusBox.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/bottom/status/JNotepadStatusBox.java @@ -3,7 +3,7 @@ package org.jcnc.jnotepad.ui.root.bottom.status; import javafx.geometry.Insets; import javafx.scene.control.Label; import javafx.scene.control.TextArea; -import org.jcnc.jnotepad.app.i18n.UIResourceBundle; +import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; import org.jcnc.jnotepad.ui.module.AbstractHBox; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; @@ -21,13 +21,11 @@ import java.nio.charset.Charset; public class JNotepadStatusBox extends AbstractHBox { private static final JNotepadStatusBox STATUS_BOX = new JNotepadStatusBox(); + private static final String STATUS_LABEL_FORMAT = "%s : %d \t%s: %d \t%s: %d \t"; /** * 字数统计及光标 */ private Label statusLabel; - private static final String STATUS_LABEL_FORMAT = "%s : %d \t%s: %d \t%s: %d \t"; - - /** * 显示文本编码 */ @@ -38,6 +36,10 @@ public class JNotepadStatusBox extends AbstractHBox { initStatusBox(); } + public static JNotepadStatusBox getInstance() { + return STATUS_BOX; + } + /** * 初始化状态栏组件 * @@ -56,14 +58,10 @@ public class JNotepadStatusBox extends AbstractHBox { this.getChildren().add(encodingLabel); this.getProperties().put("borderpane-margin", new Insets(5, 10, 5, 10)); - UIResourceBundle.getInstance().addListener((observable, oldValue, newValue) -> updateWhenTabSelected()); + UiResourceBundle.getInstance().addListener((observable, oldValue, newValue) -> updateWhenTabSelected()); } - public static JNotepadStatusBox getInstance() { - return STATUS_BOX; - } - public void updateEncodingLabel() { updateEncodingLabel(null); } @@ -143,9 +141,9 @@ public class JNotepadStatusBox extends AbstractHBox { } protected String getStatusBarFormattedText(int row, int column, int wordCount) { - String rowText = UIResourceBundle.getContent(TextConstants.ROW); - String columnText = UIResourceBundle.getContent(TextConstants.COLUMN); - String wordCountText = UIResourceBundle.getContent(TextConstants.WORD_COUNT); + String rowText = UiResourceBundle.getContent(TextConstants.ROW); + String columnText = UiResourceBundle.getContent(TextConstants.COLUMN); + String wordCountText = UiResourceBundle.getContent(TextConstants.WORD_COUNT); return String.format(STATUS_LABEL_FORMAT, rowText, row, @@ -158,6 +156,6 @@ public class JNotepadStatusBox extends AbstractHBox { protected String getEncodingFormattedText(String encoding) { String encodingLabelFormat = "\t%s : %s"; - return String.format(encodingLabelFormat, UIResourceBundle.getContent(TextConstants.ENCODE), encoding); + return String.format(encodingLabelFormat, UiResourceBundle.getContent(TextConstants.ENCODE), encoding); } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java index 711e315..d5edb7a 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java @@ -14,6 +14,7 @@ import java.nio.charset.Charset; */ public class JNotepadTab extends Tab { + private final LineNumberTextArea lineNumberTextArea; /** * 默认关闭自动换行 */ @@ -22,18 +23,8 @@ public class JNotepadTab extends Tab { * 是否与本地文件关联 */ private boolean isRelevance = false; - - private final LineNumberTextArea lineNumberTextArea; private Charset charset = Charset.defaultCharset(); - public boolean isRelevance() { - return isRelevance; - } - - public void setRelevance(boolean relevance) { - isRelevance = relevance; - } - public JNotepadTab(String tabTitle) { this(tabTitle, new LineNumberTextArea()); } @@ -50,6 +41,14 @@ public class JNotepadTab extends Tab { this.charset = charset; } + public boolean isRelevance() { + return isRelevance; + } + + public void setRelevance(boolean relevance) { + isRelevance = relevance; + } + public boolean isAutoLine() { return autoLine; } diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTabPane.java b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTabPane.java index c922108..dcd1398 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTabPane.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTabPane.java @@ -17,6 +17,10 @@ public class JNotepadTabPane extends TabPane { initListeners(); } + public static JNotepadTabPane getInstance() { + return TAB_PANE; + } + /** * 初始化监听器 */ @@ -34,10 +38,6 @@ public class JNotepadTabPane extends TabPane { ); } - public static JNotepadTabPane getInstance() { - return TAB_PANE; - } - /** * 添加新tab并设置为选中状态 * diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java index daf051e..404639d 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java @@ -5,7 +5,7 @@ import javafx.scene.control.*; import javafx.scene.input.KeyCombination; import javafx.stage.Stage; import org.jcnc.jnotepad.app.config.AppConfig; -import org.jcnc.jnotepad.app.i18n.UIResourceBundle; +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.tool.SetBtn; @@ -27,20 +27,20 @@ import static org.jcnc.jnotepad.constants.TextConstants.*; */ public class JNotepadMenuBar extends MenuBar { + private static final JNotepadMenuBar MENU_BAR = new JNotepadMenuBar(); + private final Map itemMap = new HashMap<>(); /** * 标签页布局组件封装。 */ JNotepadTabPane jNotepadTabPane = JNotepadTabPane.getInstance(); - - private static final JNotepadMenuBar MENU_BAR = new JNotepadMenuBar(); - AppConfigController appConfigController = AppConfigController.getInstance(); Logger logger = LogUtil.getLogger(this.getClass()); - - private JNotepadMenuBar() { - initMenuBar(); - } - + /** + * 工具栏 + */ + JNotepadToolBar toolBar = JNotepadToolBar.getInstance(); + // 获取工具栏中的setButton + Button setButton = toolBar.getSetButton(); /** * 文件菜单 */ @@ -49,18 +49,16 @@ public class JNotepadMenuBar extends MenuBar { * 设置菜单 */ private Menu setMenu; + + /// 菜单按钮 /** * 插件菜单 */ private Menu pluginMenu; - /** * 语言菜单 */ private Menu languageMenu; - - /// 菜单按钮 - /** * 新建 */ @@ -101,7 +99,6 @@ public class JNotepadMenuBar extends MenuBar { * 置顶按钮 */ private CheckMenuItem topItem; - /** * 中文选项 */ @@ -110,15 +107,14 @@ public class JNotepadMenuBar extends MenuBar { * 英文选项 */ private RadioMenuItem englishItem; - private final Map itemMap = new HashMap<>(); - /** - * 工具栏 - */ - JNotepadToolBar toolBar = JNotepadToolBar.getInstance(); + private JNotepadMenuBar() { + initMenuBar(); + } - // 获取工具栏中的setButton - Button setButton = toolBar.getSetButton(); + public static JNotepadMenuBar getInstance() { + return MENU_BAR; + } /** * 设置当前语言选中状态 @@ -176,17 +172,17 @@ public class JNotepadMenuBar extends MenuBar { logger.info("初始化语言菜单!"); // 语言菜单 languageMenu = new Menu(); - UIResourceBundle.bindStringProperty(languageMenu.textProperty(), LANGUAGE); + UiResourceBundle.bindStringProperty(languageMenu.textProperty(), LANGUAGE); ToggleGroup languageToggleGroup = new ToggleGroup(); chineseItem = new RadioMenuItem(); - UIResourceBundle.bindStringProperty(chineseItem.textProperty(), UPPER_CHINESE); + UiResourceBundle.bindStringProperty(chineseItem.textProperty(), UPPER_CHINESE); chineseItem.setUserData(Locale.CHINESE); itemMap.put("chineseItem", chineseItem); languageToggleGroup.getToggles().add(chineseItem); englishItem = new RadioMenuItem(); - UIResourceBundle.bindStringProperty(englishItem.textProperty(), UPPER_ENGLISH); + UiResourceBundle.bindStringProperty(englishItem.textProperty(), UPPER_ENGLISH); englishItem.setUserData(Locale.ENGLISH); itemMap.put("englishItem", englishItem); languageToggleGroup.getToggles().add(englishItem); @@ -202,27 +198,27 @@ public class JNotepadMenuBar extends MenuBar { logger.info("初始化文件菜单!"); // 文件菜单 fileMenu = new Menu(); - UIResourceBundle.bindStringProperty(fileMenu.textProperty(), FILE); + UiResourceBundle.bindStringProperty(fileMenu.textProperty(), FILE); newItem = new MenuItem(); - UIResourceBundle.bindStringProperty(newItem.textProperty(), NEW); + UiResourceBundle.bindStringProperty(newItem.textProperty(), NEW); itemMap.put("newItem", newItem); openItem = new MenuItem(); - UIResourceBundle.bindStringProperty(openItem.textProperty(), OPEN); + UiResourceBundle.bindStringProperty(openItem.textProperty(), OPEN); itemMap.put("openItem", openItem); saveItem = new MenuItem(); - UIResourceBundle.bindStringProperty(saveItem.textProperty(), SAVE); + UiResourceBundle.bindStringProperty(saveItem.textProperty(), SAVE); itemMap.put("saveItem", saveItem); saveAsItem = new MenuItem(); - UIResourceBundle.bindStringProperty(saveAsItem.textProperty(), SAVE_AS); + UiResourceBundle.bindStringProperty(saveAsItem.textProperty(), SAVE_AS); itemMap.put("saveAsItem", saveAsItem); renameItem = new MenuItem(); - UIResourceBundle.bindStringProperty(renameItem.textProperty(), RENAME); + UiResourceBundle.bindStringProperty(renameItem.textProperty(), RENAME); itemMap.put("renameItem", renameItem); fileMenu.getItems().addAll(newItem, openItem, saveItem, saveAsItem, renameItem); @@ -235,19 +231,19 @@ public class JNotepadMenuBar extends MenuBar { logger.info("初始化设置菜单"); // 设置菜单 setMenu = new Menu(); - UIResourceBundle.bindStringProperty(setMenu.textProperty(), SET); + UiResourceBundle.bindStringProperty(setMenu.textProperty(), SET); lineFeedItem = new CheckMenuItem(); - UIResourceBundle.bindStringProperty(lineFeedItem.textProperty(), WORD_WRAP); + UiResourceBundle.bindStringProperty(lineFeedItem.textProperty(), WORD_WRAP); itemMap.put("lineFeedItem", lineFeedItem); lineFeedItem.selectedProperty().set(true); topItem = new CheckMenuItem(); - UIResourceBundle.bindStringProperty(topItem.textProperty(), TOP); + UiResourceBundle.bindStringProperty(topItem.textProperty(), TOP); itemMap.put("topItem", topItem); openConfigItem = new MenuItem(); - UIResourceBundle.bindStringProperty(openConfigItem.textProperty(), OPEN_CONFIGURATION_FILE); + UiResourceBundle.bindStringProperty(openConfigItem.textProperty(), OPEN_CONFIGURATION_FILE); itemMap.put("openConfigItem", openConfigItem); itemMap.put("languageMenu", languageMenu); @@ -261,23 +257,19 @@ public class JNotepadMenuBar extends MenuBar { logger.info("初始化插件菜单!"); // 插件菜单 pluginMenu = new Menu(); - UIResourceBundle.bindStringProperty(pluginMenu.textProperty(), PLUGIN); + UiResourceBundle.bindStringProperty(pluginMenu.textProperty(), PLUGIN); addItem = new MenuItem(); - UIResourceBundle.bindStringProperty(addItem.textProperty(), ADD_PLUGIN); + UiResourceBundle.bindStringProperty(addItem.textProperty(), ADD_PLUGIN); itemMap.put("addItem", addItem); countItem = new MenuItem(); - UIResourceBundle.bindStringProperty(countItem.textProperty(), STATISTICS); + UiResourceBundle.bindStringProperty(countItem.textProperty(), STATISTICS); itemMap.put("countItem", countItem); pluginMenu.getItems().addAll(addItem, countItem); } - public static JNotepadMenuBar getInstance() { - return MENU_BAR; - } - /** * 初始化事件处理 */ diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java index 4b1f2e2..e84d498 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java @@ -26,11 +26,11 @@ public class JNotepadToolBar extends ToolBar { } - public Button getSetButton() { - return setButton; - } - public static JNotepadToolBar getInstance() { return INSTANCE; } + + public Button getSetButton() { + return setButton; + } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java index 96df3b4..6a6c238 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java @@ -18,6 +18,4 @@ public class ToolHBox extends HBox { } - - } diff --git a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java index 874998e..b47794f 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java @@ -4,10 +4,11 @@ import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.SplitPane; -import javafx.scene.layout.StackPane; import javafx.scene.control.TitledPane; +import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; +import org.jcnc.jnotepad.tool.UiUtil; /** * 设置窗口管理类,实现了单例模式。 @@ -16,7 +17,9 @@ import javafx.stage.Stage; */ public class SetStage { - // 唯一的 SetStage 实例,使用单例模式 + /** + * 唯一的 SetStage 实例,使用单例模式 + */ private static final SetStage SET_STAGE = new SetStage(); private StackPane contentDisplay; @@ -24,6 +27,10 @@ public class SetStage { private ListView appearanceListView; private ListView securityListView; + private SetStage() { + // 私有构造方法以实现单例模式 + } + /** * 获取 SetStage 的唯一实例。 * @@ -33,10 +40,6 @@ public class SetStage { return SET_STAGE; } - private SetStage() { - // 私有构造方法以实现单例模式 - } - /** * 打开设置窗口。 */ @@ -65,7 +68,8 @@ public class SetStage { // 创建一个分割面板,左侧是设置列表,右侧是内容显示区域 SplitPane splitPane = new SplitPane(titledPaneContainer, contentDisplay); - splitPane.setDividerPositions(0.3); // 设置分割位置 + // 设置分割位置 + splitPane.setDividerPositions(0.3); // 创建设置窗口的场景 Scene scene = new Scene(splitPane, 800, 600); @@ -74,6 +78,7 @@ public class SetStage { Stage setStage = new Stage(); setStage.setScene(scene); setStage.setTitle("设置窗口"); + setStage.getIcons().add(UiUtil.getIcon()); setStage.show(); } @@ -101,7 +106,4 @@ public class SetStage { contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容")); } } - - - } 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 b536773..3d25a34 100644 --- a/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java +++ b/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java @@ -15,27 +15,26 @@ import org.jcnc.jnotepad.ui.root.top.RootTopVBox; */ public class ViewManager { - private int tabIndex = 0; + private static ViewManager instance = null; // 主界面布局 + private int tabIndex = 0; /** * 主布局 */ private BorderPane root; - private static ViewManager instance = null; - /** - * 自增并获取标签页索引 + * 构造函数。设置场景和根布局。 * - * @return int 标签页索引 - * @apiNote ++tabIndex + * @param scene 与视图相关联的JavaFX场景。 */ - public int selfIncreaseAndGetTabIndex() { - return ++tabIndex; - } + private ViewManager(Scene scene) { + root = new BorderPane(); + scene.setRoot(root); + } /** * 获取ViewManager的实例。如果实例不存在,则创建一个新实例。 @@ -59,14 +58,13 @@ public class ViewManager { } /** - * 构造函数。设置场景和根布局。 + * 自增并获取标签页索引 * - * @param scene 与视图相关联的JavaFX场景。 + * @return int 标签页索引 + * @apiNote ++tabIndex */ - private ViewManager(Scene scene) { - root = new BorderPane(); - scene.setRoot(root); - + public int selfIncreaseAndGetTabIndex() { + return ++tabIndex; } /** diff --git a/src/main/resources/img/icon.svg b/src/main/resources/img/icon.svg index 7946550..bdeb0d5 100644 --- a/src/main/resources/img/icon.svg +++ b/src/main/resources/img/icon.svg @@ -1,8 +1,9 @@ +RU5ErkJggg=="/>