diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 63aaeef..4b3e2af 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -16,6 +16,7 @@ module org.jcnc.jnotepad { requires org.kordamp.ikonli.javafx; requires org.kordamp.ikonli.antdesignicons; exports org.jcnc.jnotepad; + exports org.jcnc.jnotepad.model; exports org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad.app.i18n; exports org.jcnc.jnotepad.common.constants; diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index 5b7afd4..ec1cd1d 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -11,7 +11,7 @@ import org.jcnc.jnotepad.common.constants.AppConstants; import org.jcnc.jnotepad.common.constants.TextConstants; import org.jcnc.jnotepad.common.manager.ThreadPoolManager; import org.jcnc.jnotepad.controller.i18n.LocalizationController; -import org.jcnc.jnotepad.util.SingletonUtil; +import org.jcnc.jnotepad.controller.manager.Controller; import org.jcnc.jnotepad.util.UiUtil; import org.jcnc.jnotepad.views.manager.ViewManager; @@ -86,7 +86,7 @@ public class LunchApp extends Application { // 使用线程池加载关联文件并创建文本区域 List rawParameters = getParameters().getRaw(); - SingletonUtil.getController().openAssociatedFileAndCreateTextArea(rawParameters); + Controller.getInstance().openAssociatedFileAndCreateTextArea(rawParameters); } @Override 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 0577198..e47c1bd 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java @@ -1,6 +1,7 @@ package org.jcnc.jnotepad.app.config; import com.fasterxml.jackson.annotation.JsonIgnore; +import org.jcnc.jnotepad.model.ShortcutKey; import java.util.ArrayList; import java.util.List; @@ -33,7 +34,7 @@ public class AppConfig { myData.setLanguage(CHINESE); myData.setTextWrap(false); - List shortcutKeys = new ArrayList<>(); + List shortcutKeys = new ArrayList<>(); shortcutKeys.add(createShortcutKey("newItem", CTRL_N)); shortcutKeys.add(createShortcutKey("openItem", CTRL_O)); shortcutKeys.add(createShortcutKey("saveItem", CTRL_S)); @@ -54,8 +55,8 @@ public class AppConfig { * @param shortcutKeyValue 快捷键值 * @return ShortcutKey 对象 */ - private static AppConfig.ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) { - AppConfig.ShortcutKey shortcutKey = new AppConfig.ShortcutKey(); + private static ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) { + ShortcutKey shortcutKey = new ShortcutKey(); shortcutKey.setButtonName(buttonName); shortcutKey.setShortcutKeyValue(shortcutKeyValue); return shortcutKey; @@ -85,27 +86,4 @@ public class AppConfig { 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/controller/config/AppConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java index 3e76902..ac42585 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java @@ -2,6 +2,7 @@ package org.jcnc.jnotepad.controller.config; import org.jcnc.jnotepad.app.config.AppConfig; import org.jcnc.jnotepad.exception.AppException; +import org.jcnc.jnotepad.model.ShortcutKey; import org.jcnc.jnotepad.util.JsonUtil; import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.util.PopUpUtil; @@ -175,7 +176,7 @@ public class AppConfigController { * * @return 快捷键设置列表 */ - public List getShortcutKey() { + public List getShortcutKey() { return this.appConfig.getShortcutKey(); } } 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 548c479..89e179d 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.util.LogUtil; -import org.jcnc.jnotepad.util.SingletonUtil; import java.io.File; @@ -23,7 +23,7 @@ public class OpenConfig extends OpenFile { @Override public void handle(ActionEvent actionEvent) { // 显示文件选择对话框,并获取配置文件 - File file = SingletonUtil.getAppConfigController().getConfigPath().toFile(); + File file = AppConfigController.getInstance().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 cb65d9b..d65e8b5 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 @@ -5,10 +5,10 @@ import javafx.event.EventHandler; import javafx.stage.FileChooser; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.common.constants.TextConstants; +import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory; import org.jcnc.jnotepad.util.LogUtil; -import org.jcnc.jnotepad.util.SingletonUtil; import org.jcnc.jnotepad.util.UiUtil; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; @@ -55,7 +55,7 @@ public class SaveFile implements EventHandler { // 如果该文件是配置文件,则刷新快捷键 if (CONFIG_NAME.equals(selectedTab.getText())) { // 重新加载语言包和快捷键 - SingletonUtil.getAppConfigController().loadConfig(); + AppConfigController.getInstance().loadConfig(); TopMenuBar.getInstance().initShortcutKeys(); LocalizationController.initLocal(); logger.info("已刷新语言包!"); 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 9e38dd1..d4ccead 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.util.SingletonUtil; import java.util.HashMap; import java.util.LinkedHashMap; @@ -40,7 +40,7 @@ public class LocalizationController { private final AppConfigController appConfigController; private LocalizationController() { - this.appConfigController = SingletonUtil.getAppConfigController(); + this.appConfigController = AppConfigController.getInstance(); } /** @@ -70,7 +70,7 @@ public class LocalizationController { } Locale.setDefault(locale); - SingletonUtil.getUiResourceBundle().resetLocal(getCurrentLocal()); + UiResourceBundle.getInstance().resetLocal(getCurrentLocal()); LOCALIZATION_CONFIG.setLanguage(SUPPORT_LANGUAGES.get(locale)); } diff --git a/src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java b/src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java new file mode 100644 index 0000000..3bb2523 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java @@ -0,0 +1,27 @@ +package org.jcnc.jnotepad.model; + +/** + * 快捷键信息类 + * + * @author gewuyou + */ +public 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/ui/module/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java index fceda49..c49a524 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java @@ -3,8 +3,8 @@ 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.util.LogUtil; -import org.jcnc.jnotepad.util.SingletonUtil; import org.jcnc.jnotepad.views.root.center.main.bottom.status.BottomStatusBox; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; @@ -58,7 +58,7 @@ public class LineNumberTextArea extends BorderPane { */ public LineNumberTextArea() { // 设置主文本区域是否自动换行,根据应用配置决定 - mainTextArea.setWrapText(SingletonUtil.getAppConfigController().getAutoLineConfig()); + mainTextArea.setWrapText(AppConfigController.getInstance().getAutoLineConfig()); // 设置行号区域不可编辑 lineNumberArea.setEditable(false); diff --git a/src/main/java/org/jcnc/jnotepad/util/SingletonUtil.java b/src/main/java/org/jcnc/jnotepad/util/SingletonUtil.java deleted file mode 100644 index dc52e33..0000000 --- a/src/main/java/org/jcnc/jnotepad/util/SingletonUtil.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.jcnc.jnotepad.util; - -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 控制器对象 - */ - public static Controller getController() { - return CONTROLLER; - } - - /** - * 获取应用程序配置控制器。 - * - * @return org.jcnc.jnotepad.controller.config.AppConfigController 应用程序配置控制器对象 - */ - public static AppConfigController getAppConfigController() { - return APP_CONFIG_CONTROLLER; - } - - /** - * 获取UI资源绑定组件。 - * - * @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/views/root/center/main/center/tab/CenterTab.java b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTab.java index cf3ab61..1cb56db 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTab.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTab.java @@ -1,8 +1,8 @@ package org.jcnc.jnotepad.views.root.center.main.center.tab; import javafx.scene.control.Tab; +import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; -import org.jcnc.jnotepad.util.SingletonUtil; import java.io.File; import java.nio.charset.Charset; @@ -38,7 +38,7 @@ public class CenterTab extends Tab { super(tabTitle); lineNumberTextArea = textArea; this.setContent(lineNumberTextArea); - setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); + setAutoLine(AppConfigController.getInstance().getAutoLineConfig()); this.charset = charset; } diff --git a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTabPane.java b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTabPane.java index 4e24790..d934939 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTabPane.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTabPane.java @@ -1,7 +1,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.tab; import javafx.scene.control.TabPane; -import org.jcnc.jnotepad.util.SingletonUtil; +import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.views.root.center.main.bottom.status.BottomStatusBox; import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar; @@ -71,7 +71,7 @@ public class CenterTabPane extends TabPane { */ public void fireTabSelected() { CenterTab selectedTab = getSelected(); - selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); + selectedTab.setAutoLine(AppConfigController.getInstance().getAutoLineConfig()); BottomStatusBox.getInstance().updateWhenTabSelected(); } } diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java index 0c35f11..c091166 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java @@ -4,12 +4,12 @@ import javafx.event.ActionEvent; 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.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.event.handler.menubar.*; import org.jcnc.jnotepad.controller.event.handler.util.SetBtn; import org.jcnc.jnotepad.controller.i18n.LocalizationController; +import org.jcnc.jnotepad.model.ShortcutKey; import org.jcnc.jnotepad.plugin.PluginDemo; import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; @@ -156,9 +156,9 @@ public class TopMenuBar extends MenuBar { * 初始化快捷键。 */ public void initShortcutKeys() { - List shortcutKeyConfigs = appConfigController.getShortcutKey(); + List shortcutKeyConfigs = appConfigController.getShortcutKey(); //FIXME: 如果shortcutKey不存在,需要解绑已绑定的快捷键 - for (AppConfig.ShortcutKey shortcutKey : shortcutKeyConfigs) { + for (ShortcutKey shortcutKey : shortcutKeyConfigs) { // 保证json的key必须和变量名一致 MenuItem menuItem = this.itemMap.get(shortcutKey.getButtonName()); String shortKeyValue = shortcutKey.getShortcutKeyValue();