!85 ♻️ 重构代码 初步重构项目结构

Merge pull request !85 from 格物方能致知/refactor-I7ZZHP
This commit is contained in:
Luke 2023-09-09 13:33:16 +00:00 committed by Gitee
commit 5be9a5543c
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
13 changed files with 52 additions and 105 deletions

View File

@ -16,6 +16,7 @@ module org.jcnc.jnotepad {
requires org.kordamp.ikonli.javafx; requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.antdesignicons; requires org.kordamp.ikonli.antdesignicons;
exports org.jcnc.jnotepad; exports org.jcnc.jnotepad;
exports org.jcnc.jnotepad.model;
exports org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad.app.config;
exports org.jcnc.jnotepad.app.i18n; exports org.jcnc.jnotepad.app.i18n;
exports org.jcnc.jnotepad.common.constants; exports org.jcnc.jnotepad.common.constants;

View File

@ -11,7 +11,7 @@ import org.jcnc.jnotepad.common.constants.AppConstants;
import org.jcnc.jnotepad.common.constants.TextConstants; import org.jcnc.jnotepad.common.constants.TextConstants;
import org.jcnc.jnotepad.common.manager.ThreadPoolManager; import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
import org.jcnc.jnotepad.controller.i18n.LocalizationController; 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.util.UiUtil;
import org.jcnc.jnotepad.views.manager.ViewManager; import org.jcnc.jnotepad.views.manager.ViewManager;
@ -86,7 +86,7 @@ public class LunchApp extends Application {
// 使用线程池加载关联文件并创建文本区域 // 使用线程池加载关联文件并创建文本区域
List<String> rawParameters = getParameters().getRaw(); List<String> rawParameters = getParameters().getRaw();
SingletonUtil.getController().openAssociatedFileAndCreateTextArea(rawParameters); Controller.getInstance().openAssociatedFileAndCreateTextArea(rawParameters);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package org.jcnc.jnotepad.app.config; package org.jcnc.jnotepad.app.config;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import org.jcnc.jnotepad.model.ShortcutKey;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -33,7 +34,7 @@ public class AppConfig {
myData.setLanguage(CHINESE); myData.setLanguage(CHINESE);
myData.setTextWrap(false); myData.setTextWrap(false);
List<AppConfig.ShortcutKey> shortcutKeys = new ArrayList<>(); List<ShortcutKey> shortcutKeys = new ArrayList<>();
shortcutKeys.add(createShortcutKey("newItem", CTRL_N)); shortcutKeys.add(createShortcutKey("newItem", CTRL_N));
shortcutKeys.add(createShortcutKey("openItem", CTRL_O)); shortcutKeys.add(createShortcutKey("openItem", CTRL_O));
shortcutKeys.add(createShortcutKey("saveItem", CTRL_S)); shortcutKeys.add(createShortcutKey("saveItem", CTRL_S));
@ -54,8 +55,8 @@ public class AppConfig {
* @param shortcutKeyValue 快捷键值 * @param shortcutKeyValue 快捷键值
* @return ShortcutKey 对象 * @return ShortcutKey 对象
*/ */
private static AppConfig.ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) { private static ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) {
AppConfig.ShortcutKey shortcutKey = new AppConfig.ShortcutKey(); ShortcutKey shortcutKey = new ShortcutKey();
shortcutKey.setButtonName(buttonName); shortcutKey.setButtonName(buttonName);
shortcutKey.setShortcutKeyValue(shortcutKeyValue); shortcutKey.setShortcutKeyValue(shortcutKeyValue);
return shortcutKey; return shortcutKey;
@ -85,27 +86,4 @@ public class AppConfig {
this.textWrap = 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;
}
}
} }

View File

@ -2,6 +2,7 @@ package org.jcnc.jnotepad.controller.config;
import org.jcnc.jnotepad.app.config.AppConfig; import org.jcnc.jnotepad.app.config.AppConfig;
import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.exception.AppException;
import org.jcnc.jnotepad.model.ShortcutKey;
import org.jcnc.jnotepad.util.JsonUtil; import org.jcnc.jnotepad.util.JsonUtil;
import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.util.LogUtil;
import org.jcnc.jnotepad.util.PopUpUtil; import org.jcnc.jnotepad.util.PopUpUtil;
@ -175,7 +176,7 @@ public class AppConfigController {
* *
* @return 快捷键设置列表 * @return 快捷键设置列表
*/ */
public List<AppConfig.ShortcutKey> getShortcutKey() { public List<ShortcutKey> getShortcutKey() {
return this.appConfig.getShortcutKey(); return this.appConfig.getShortcutKey();
} }
} }

View File

@ -1,8 +1,8 @@
package org.jcnc.jnotepad.controller.event.handler.menubar; package org.jcnc.jnotepad.controller.event.handler.menubar;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.util.LogUtil;
import org.jcnc.jnotepad.util.SingletonUtil;
import java.io.File; import java.io.File;
@ -23,7 +23,7 @@ public class OpenConfig extends OpenFile {
@Override @Override
public void handle(ActionEvent actionEvent) { public void handle(ActionEvent actionEvent) {
// 显示文件选择对话框并获取配置文件 // 显示文件选择对话框并获取配置文件
File file = SingletonUtil.getAppConfigController().getConfigPath().toFile(); File file = AppConfigController.getInstance().getConfigPath().toFile();
LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能, {}", file); LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能, {}", file);
// 创建打开文件的任务并启动线程执行任务 // 创建打开文件的任务并启动线程执行任务
openFile(file); openFile(file);

View File

@ -5,10 +5,10 @@ import javafx.event.EventHandler;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
import org.jcnc.jnotepad.common.constants.TextConstants; 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.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory; import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.util.LogUtil;
import org.jcnc.jnotepad.util.SingletonUtil;
import org.jcnc.jnotepad.util.UiUtil; 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.CenterTab;
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane;
@ -55,7 +55,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
// 如果该文件是配置文件则刷新快捷键 // 如果该文件是配置文件则刷新快捷键
if (CONFIG_NAME.equals(selectedTab.getText())) { if (CONFIG_NAME.equals(selectedTab.getText())) {
// 重新加载语言包和快捷键 // 重新加载语言包和快捷键
SingletonUtil.getAppConfigController().loadConfig(); AppConfigController.getInstance().loadConfig();
TopMenuBar.getInstance().initShortcutKeys(); TopMenuBar.getInstance().initShortcutKeys();
LocalizationController.initLocal(); LocalizationController.initLocal();
logger.info("已刷新语言包!"); logger.info("已刷新语言包!");

View File

@ -1,8 +1,8 @@
package org.jcnc.jnotepad.controller.i18n; package org.jcnc.jnotepad.controller.i18n;
import org.jcnc.jnotepad.LunchApp; import org.jcnc.jnotepad.LunchApp;
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.util.SingletonUtil;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@ -40,7 +40,7 @@ public class LocalizationController {
private final AppConfigController appConfigController; private final AppConfigController appConfigController;
private LocalizationController() { private LocalizationController() {
this.appConfigController = SingletonUtil.getAppConfigController(); this.appConfigController = AppConfigController.getInstance();
} }
/** /**
@ -70,7 +70,7 @@ public class LocalizationController {
} }
Locale.setDefault(locale); Locale.setDefault(locale);
SingletonUtil.getUiResourceBundle().resetLocal(getCurrentLocal()); UiResourceBundle.getInstance().resetLocal(getCurrentLocal());
LOCALIZATION_CONFIG.setLanguage(SUPPORT_LANGUAGES.get(locale)); LOCALIZATION_CONFIG.setLanguage(SUPPORT_LANGUAGES.get(locale));
} }

View File

@ -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;
}
}

View File

@ -3,8 +3,8 @@ package org.jcnc.jnotepad.ui.module;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.scene.control.TextArea; import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.util.LogUtil; 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.bottom.status.BottomStatusBox;
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane;
@ -58,7 +58,7 @@ public class LineNumberTextArea extends BorderPane {
*/ */
public LineNumberTextArea() { public LineNumberTextArea() {
// 设置主文本区域是否自动换行根据应用配置决定 // 设置主文本区域是否自动换行根据应用配置决定
mainTextArea.setWrapText(SingletonUtil.getAppConfigController().getAutoLineConfig()); mainTextArea.setWrapText(AppConfigController.getInstance().getAutoLineConfig());
// 设置行号区域不可编辑 // 设置行号区域不可编辑
lineNumberArea.setEditable(false); lineNumberArea.setEditable(false);

View File

@ -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;
/**
* 单例工具
*
* <p>封装了除UI组件外项目中所有需要的单例组件以减少单例带来的代码的复杂性</p>
*
* @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;
}
}

View File

@ -1,8 +1,8 @@
package org.jcnc.jnotepad.views.root.center.main.center.tab; package org.jcnc.jnotepad.views.root.center.main.center.tab;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
import org.jcnc.jnotepad.util.SingletonUtil;
import java.io.File; import java.io.File;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@ -38,7 +38,7 @@ public class CenterTab extends Tab {
super(tabTitle); super(tabTitle);
lineNumberTextArea = textArea; lineNumberTextArea = textArea;
this.setContent(lineNumberTextArea); this.setContent(lineNumberTextArea);
setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); setAutoLine(AppConfigController.getInstance().getAutoLineConfig());
this.charset = charset; this.charset = charset;
} }

View File

@ -1,7 +1,7 @@
package org.jcnc.jnotepad.views.root.center.main.center.tab; package org.jcnc.jnotepad.views.root.center.main.center.tab;
import javafx.scene.control.TabPane; 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.center.main.bottom.status.BottomStatusBox;
import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar; import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar;
@ -71,7 +71,7 @@ public class CenterTabPane extends TabPane {
*/ */
public void fireTabSelected() { public void fireTabSelected() {
CenterTab selectedTab = getSelected(); CenterTab selectedTab = getSelected();
selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); selectedTab.setAutoLine(AppConfigController.getInstance().getAutoLineConfig());
BottomStatusBox.getInstance().updateWhenTabSelected(); BottomStatusBox.getInstance().updateWhenTabSelected();
} }
} }

View File

@ -4,12 +4,12 @@ import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.KeyCombination; import javafx.scene.input.KeyCombination;
import javafx.stage.Stage; 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.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.util.SetBtn; import org.jcnc.jnotepad.controller.event.handler.util.SetBtn;
import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.model.ShortcutKey;
import org.jcnc.jnotepad.plugin.PluginDemo; import org.jcnc.jnotepad.plugin.PluginDemo;
import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.util.LogUtil;
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
@ -156,9 +156,9 @@ public class TopMenuBar extends MenuBar {
* 初始化快捷键 * 初始化快捷键
*/ */
public void initShortcutKeys() { public void initShortcutKeys() {
List<AppConfig.ShortcutKey> shortcutKeyConfigs = appConfigController.getShortcutKey(); List<ShortcutKey> shortcutKeyConfigs = appConfigController.getShortcutKey();
//FIXME: 如果shortcutKey不存在需要解绑已绑定的快捷键 //FIXME: 如果shortcutKey不存在需要解绑已绑定的快捷键
for (AppConfig.ShortcutKey shortcutKey : shortcutKeyConfigs) { for (ShortcutKey shortcutKey : shortcutKeyConfigs) {
// 保证json的key必须和变量名一致 // 保证json的key必须和变量名一致
MenuItem menuItem = this.itemMap.get(shortcutKey.getButtonName()); MenuItem menuItem = this.itemMap.get(shortcutKey.getButtonName());
String shortKeyValue = shortcutKey.getShortcutKeyValue(); String shortKeyValue = shortcutKey.getShortcutKeyValue();