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