diff --git a/jnotepadConfig.json b/jnotepadConfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..fa3bb37b615b34a33e7a4df6842d32d8eb5e8b30
--- /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 e6fde4c234c128e741e5388077ca21058ab26a38..1ccdeacf385e5f8afb0dd3e399ce0d4473cad7de 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 c4adc8ce20db19558fe2c33f73133f05e009b16a..6f6d22454e27dbdbccbc0b6eeff5ee2c7387ecf3 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 db1f719ec882414fb43d1dc784f5224c220de00c..a927a039c08333c390960229f4da0d34fcebfcf5 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 0000000000000000000000000000000000000000..ccc861366aed9794af27b94caad4176eaebf612c
--- /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 2f8c52eb87632ab0eae2d856852408f316cef91d..0000000000000000000000000000000000000000
--- 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 f635f848e4b346e9c318b87e7d1f8ae0318b5d49..486d2abf98409a471024fe320b9bbb1d70f98c5c 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 0000000000000000000000000000000000000000..db66ccdd4a7dd44075eeb67d2da81f524d3bb58c
--- /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