!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.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;

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.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<String> rawParameters = getParameters().getRaw();
SingletonUtil.getController().openAssociatedFileAndCreateTextArea(rawParameters);
Controller.getInstance().openAssociatedFileAndCreateTextArea(rawParameters);
}
@Override

View File

@ -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<AppConfig.ShortcutKey> shortcutKeys = new ArrayList<>();
List<ShortcutKey> 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;
}
}
}

View File

@ -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<AppConfig.ShortcutKey> getShortcutKey() {
public List<ShortcutKey> getShortcutKey() {
return this.appConfig.getShortcutKey();
}
}

View File

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

View File

@ -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<ActionEvent> {
// 如果该文件是配置文件则刷新快捷键
if (CONFIG_NAME.equals(selectedTab.getText())) {
// 重新加载语言包和快捷键
SingletonUtil.getAppConfigController().loadConfig();
AppConfigController.getInstance().loadConfig();
TopMenuBar.getInstance().initShortcutKeys();
LocalizationController.initLocal();
logger.info("已刷新语言包!");

View File

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

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.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);

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

View File

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

View File

@ -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<AppConfig.ShortcutKey> shortcutKeyConfigs = appConfigController.getShortcutKey();
List<ShortcutKey> 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();