!85 ♻️ 重构代码 初步重构项目结构
Merge pull request !85 from 格物方能致知/refactor-I7ZZHP
This commit is contained in:
commit
5be9a5543c
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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("已刷新语言包!");
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
|
||||
27
src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java
Normal file
27
src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user