From 709293c2469835cf9c9487da83b6a0ed322995b5 Mon Sep 17 00:00:00 2001 From: kb <769801958@qq.com> Date: Mon, 21 Aug 2023 01:11:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E5=BF=AB?= =?UTF-8?q?=E6=8D=B7=E9=94=AE=E9=80=9A=E7=94=A8=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jnotepadConfig.json | 32 +++++ pom.xml | 12 +- src/main/java/module-info.java | 5 +- .../Interface/ControllerInterface.java | 6 + .../Interface/LoadJnotepadConfig.java | 118 ++++++++++++++++++ .../Interface/ShortcutKeyInterface.java | 10 -- src/main/java/org/jcnc/jnotepad/LunchApp.java | 3 +- .../jcnc/jnotepad/config/JnotepadConfig.java | 36 ++++++ .../org/jcnc/jnotepad/config/ShortcutKey.java | 35 ++++++ .../java/org/jcnc/jnotepad/config/Style.java | 35 ++++++ .../jnotepad/constant/JnotepadConstants.java | 11 ++ .../controller/event/handler/OpenConfig.java | 56 +++++++++ .../controller/manager/Controller.java | 10 +- .../controller/manager/ShortcutKey.java | 69 ---------- .../controller/manager/loadConfig.java | 64 ++++++++++ .../jcnc/jnotepad/ui/LineNumberTextArea.java | 5 + .../org/jcnc/jnotepad/view/init/View.java | 7 +- .../jnotepad/view/manager/ViewManager.java | 7 +- tool/jpackage.txt | 8 ++ 19 files changed, 435 insertions(+), 94 deletions(-) create mode 100644 jnotepadConfig.json create mode 100644 src/main/java/org/jcnc/jnotepad/Interface/LoadJnotepadConfig.java delete mode 100644 src/main/java/org/jcnc/jnotepad/Interface/ShortcutKeyInterface.java create mode 100644 src/main/java/org/jcnc/jnotepad/config/JnotepadConfig.java create mode 100644 src/main/java/org/jcnc/jnotepad/config/ShortcutKey.java create mode 100644 src/main/java/org/jcnc/jnotepad/config/Style.java create mode 100644 src/main/java/org/jcnc/jnotepad/constant/JnotepadConstants.java create mode 100644 src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenConfig.java delete mode 100644 src/main/java/org/jcnc/jnotepad/controller/manager/ShortcutKey.java create mode 100644 src/main/java/org/jcnc/jnotepad/controller/manager/loadConfig.java diff --git a/jnotepadConfig.json b/jnotepadConfig.json new file mode 100644 index 0000000..fa3bb37 --- /dev/null +++ b/jnotepadConfig.json @@ -0,0 +1,32 @@ +{ + "shortcutKey": [ + { + "buttonName": "newItem", + "shortcutKeyValue": "ctrl+n" + }, + { + "buttonName": "openItem", + "shortcutKeyValue": "ctrl+o" + }, + { + "buttonName": "saveAsItem", + "shortcutKeyValue": "ctrl+shift+s" + }, + { + "buttonName": "lineFeedItem", + "shortcutKeyValue": "" + }, + { + "buttonName": "openConfig", + "shortcutKeyValue": "alt+s" + }, + { + "buttonName": "addItem", + "shortcutKeyValue": "" + }, + { + "buttonName": "countItem", + "shortcutKeyValue": "" + } + ] + } diff --git a/pom.xml b/pom.xml index e6fde4c..1ccdeac 100644 --- a/pom.xml +++ b/pom.xml @@ -32,12 +32,18 @@ ${junit.version} test + + + + + - com.google.code.gson - gson - 2.10.1 + com.fasterxml.jackson.core + jackson-databind + 2.12.7.1 + diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index c4adc8c..6f6d224 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -3,7 +3,10 @@ module org.jcnc.jnotepad { requires atlantafx.base; // requires cn.hutool.json; // requires cn.hutool.core; - requires com.google.gson; +// requires com.google.gson; + requires com.fasterxml.jackson.core; + requires com.fasterxml.jackson.databind; + requires com.fasterxml.jackson.annotation; exports org.jcnc.jnotepad; exports org.jcnc.jnotepad.tool; exports org.jcnc.jnotepad.Interface; diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java index db1f719..a927a03 100644 --- a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java +++ b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java @@ -43,6 +43,12 @@ public interface ControllerInterface { */ EventHandler getOpenFileEventHandler(); + /** + * 获取打开配置文件处理事件处理程序 + * + * @return 打开配置文件处理事件处理程序 + */ + EventHandler getOpenConfigEventHandler(); /** * 获取另存为文件处理事件处理程序 * diff --git a/src/main/java/org/jcnc/jnotepad/Interface/LoadJnotepadConfig.java b/src/main/java/org/jcnc/jnotepad/Interface/LoadJnotepadConfig.java new file mode 100644 index 0000000..ccc8613 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/Interface/LoadJnotepadConfig.java @@ -0,0 +1,118 @@ +package org.jcnc.jnotepad.Interface; + +import javafx.scene.control.Alert; +import javafx.scene.control.MenuItem; +import javafx.scene.input.KeyCombination; +import org.jcnc.jnotepad.config.JnotepadConfig; +import org.jcnc.jnotepad.config.ShortcutKey; +import org.jcnc.jnotepad.view.manager.ViewManager; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import static org.jcnc.jnotepad.constant.JnotepadConstants.CONFIG_NAME; + +/** + * 模板方法,空出了加载文件的具体实现 + * @author 一个大转盘 + * @date 2023/8/20 + */ +public abstract class LoadJnotepadConfig { + public final void load() { + // 判断是否存在这个配置文件 + try (InputStream inputStream = new FileInputStream(CONFIG_NAME)) { + // 存在则加载 + loadConfig(inputStream); + } catch (IOException e) { + // 不存在则创建 + createConfig(); + } + + + } + + void createConfig() { + List shortcutKeyList = new ArrayList<>(); + // 打开文件 + ShortcutKey shortcutKeyOfOpen = new ShortcutKey("openItem", "ctrl+o"); + + // 新建 + ShortcutKey shortcutKeyOfNew = new ShortcutKey("newItem", "ctrl+n"); + + // 保存作为 + ShortcutKey shortcutKeyOfSaveAs = new ShortcutKey("saveAsItem", "ctrl+shift+s"); + + // 打开配置文件 + ShortcutKey shortcutKeyOfOpenConfig = new ShortcutKey("openConfig", "alt+s"); + + shortcutKeyList.add(shortcutKeyOfOpen); + shortcutKeyList.add(shortcutKeyOfNew); + shortcutKeyList.add(shortcutKeyOfSaveAs); + shortcutKeyList.add(shortcutKeyOfOpenConfig); + JnotepadConfig.getInstance().shortcutKeyList = shortcutKeyList; + for (ShortcutKey shortcutKey : shortcutKeyList) { + // 保证json的key必须和变量名一致 + MenuItem menuItem = ViewManager.itemMap.get(shortcutKey.getButtonName()); + String shortKeyValue = shortcutKey.getShortcutKeyValue(); + + if ("".equals(shortKeyValue) || Objects.isNull(menuItem)) { + continue; + } + // 动态添加快捷键 + menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue)); + } + try (BufferedWriter writer = new BufferedWriter(new FileWriter(CONFIG_NAME))) { + writer.write(""" + { + "shortcutKey": [ + { + "buttonName": "newItem", + "shortcutKeyValue": "ctrl+n" + }, + { + "buttonName": "openItem", + "shortcutKeyValue": "ctrl+o" + }, + { + "buttonName": "saveAsItem", + "shortcutKeyValue": "ctrl+shift+s" + }, + { + "buttonName": "lineFeedItem", + "shortcutKeyValue": "" + }, + { + "buttonName": "openConfig", + "shortcutKeyValue": "alt+s" + }, + { + "buttonName": "addItem", + "shortcutKeyValue": "" + }, + { + "buttonName": "countItem", + "shortcutKeyValue": "" + } + ] + } + + + """); + } catch (IOException e) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("错误"); + alert.setHeaderText("文件读写错误"); + alert.setContentText("文件读写错误"); + alert.showAndWait(); + } + } + + /** + * 加载配置文件 + * @date 2023/8/20 22:52 + * @param inputStream 配置文件的输入流 + */ + protected abstract void loadConfig(InputStream inputStream); +} diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ShortcutKeyInterface.java b/src/main/java/org/jcnc/jnotepad/Interface/ShortcutKeyInterface.java deleted file mode 100644 index 2f8c52e..0000000 --- a/src/main/java/org/jcnc/jnotepad/Interface/ShortcutKeyInterface.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.jcnc.jnotepad.Interface; - -/** - * @author 一个大转盘 - * @date 2023/8/18 - */ -public interface ShortcutKeyInterface { - public void createShortcutKeyByConfig(); - -} diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index f635f84..486d2ab 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -10,6 +10,7 @@ import javafx.scene.layout.Pane; import javafx.stage.Stage; import org.jcnc.jnotepad.constants.Constants; import org.jcnc.jnotepad.controller.manager.Controller; +import org.jcnc.jnotepad.controller.manager.loadConfig; import org.jcnc.jnotepad.ui.LineNumberTextArea; import org.jcnc.jnotepad.view.init.View; import org.jcnc.jnotepad.view.manager.ViewManager; @@ -57,7 +58,7 @@ public class LunchApp extends Application { // 初始化菜单项和标签栏 view.initItem(); view.initTabPane(); - view.initShortcutKey(); + view.initShortcutKey(new loadConfig()); if (isRelevance) { diff --git a/src/main/java/org/jcnc/jnotepad/config/JnotepadConfig.java b/src/main/java/org/jcnc/jnotepad/config/JnotepadConfig.java new file mode 100644 index 0000000..db66ccd --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/config/JnotepadConfig.java @@ -0,0 +1,36 @@ +package org.jcnc.jnotepad.config; + +import java.util.List; + +/** + * 一个总的配置类,通过读取json文件获取值 + * @author 一个大转盘 + * @date 2023/8/20 + */ +public class JnotepadConfig { + /** + * 快捷键列表 + */ + public List shortcutKeyList; + + /** + * 样式列表 TODO + */ + public List