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