diff --git a/pom.xml b/pom.xml
index 98ef1f3..e8734e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,6 +73,12 @@
system
${project.basedir}/libs/icu4j-73.2.jar
+
+ org.projectlombok
+ lombok
+ 1.18.28
+ compile
+
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 4b3e2af..5e5e832 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -15,8 +15,9 @@ module org.jcnc.jnotepad {
requires org.kordamp.ikonli.core;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.antdesignicons;
+ requires lombok;
exports org.jcnc.jnotepad;
- exports org.jcnc.jnotepad.model;
+ exports org.jcnc.jnotepad.model.enums;
exports org.jcnc.jnotepad.app.config;
exports org.jcnc.jnotepad.app.i18n;
exports org.jcnc.jnotepad.common.constants;
@@ -30,5 +31,7 @@ module org.jcnc.jnotepad {
opens org.jcnc.jnotepad.app.config;
exports org.jcnc.jnotepad.views.root.center.main.bottom.status;
exports org.jcnc.jnotepad.ui.dialog;
+ exports org.jcnc.jnotepad.ui.dialog.interfaces;
+ exports org.jcnc.jnotepad.model.entity;
}
\ No newline at end of file
diff --git a/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java
index e47c1bd..2af7e70 100644
--- a/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java
+++ b/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java
@@ -1,7 +1,8 @@
package org.jcnc.jnotepad.app.config;
import com.fasterxml.jackson.annotation.JsonIgnore;
-import org.jcnc.jnotepad.model.ShortcutKey;
+import lombok.Data;
+import org.jcnc.jnotepad.model.entity.ShortcutKey;
import java.util.ArrayList;
import java.util.List;
@@ -13,6 +14,7 @@ import static org.jcnc.jnotepad.common.constants.TextConstants.CHINESE;
*
* @author 许轲
*/
+@Data
public class AppConfig {
private static final String CTRL_N = "ctrl+n";
private static final String CTRL_O = "ctrl+o";
@@ -61,29 +63,4 @@ public class AppConfig {
shortcutKey.setShortcutKeyValue(shortcutKeyValue);
return shortcutKey;
}
-
- public String getLanguage() {
- return language;
- }
-
- public void setLanguage(String language) {
- this.language = language;
- }
-
- public List getShortcutKey() {
- return shortcutKey;
- }
-
- public void setShortcutKey(List shortcutKey) {
- this.shortcutKey = shortcutKey;
- }
-
- public boolean isTextWrap() {
- return textWrap;
- }
-
- public void setTextWrap(boolean textWrap) {
- this.textWrap = textWrap;
- }
-
}
diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
index ac42585..ec9fd73 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
@@ -1,8 +1,9 @@
package org.jcnc.jnotepad.controller.config;
+import lombok.Data;
import org.jcnc.jnotepad.app.config.AppConfig;
import org.jcnc.jnotepad.exception.AppException;
-import org.jcnc.jnotepad.model.ShortcutKey;
+import org.jcnc.jnotepad.model.entity.ShortcutKey;
import org.jcnc.jnotepad.util.JsonUtil;
import org.jcnc.jnotepad.util.LogUtil;
import org.jcnc.jnotepad.util.PopUpUtil;
@@ -23,6 +24,7 @@ import java.util.List;
*
* @author songdragon
*/
+@Data
public class AppConfigController {
/**
@@ -119,22 +121,6 @@ public class AppConfigController {
return AppConfig.generateDefaultAppConfig();
}
- /**
- * 获取当前配置文件所在目录。
- *
- * @return 所在目录
- */
- public String getDir() {
- return dir;
- }
-
- public void setDir(String dir) {
- this.dir = dir;
- }
-
- private AppConfig getAppConfig() {
- return appConfig;
- }
/**
* 获取自动换行设置,默认自动换行。
diff --git a/src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java b/src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java
deleted file mode 100644
index 3bb2523..0000000
--- a/src/main/java/org/jcnc/jnotepad/model/ShortcutKey.java
+++ /dev/null
@@ -1,27 +0,0 @@
-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;
- }
-}
diff --git a/src/main/java/org/jcnc/jnotepad/model/entity/Plugins.java b/src/main/java/org/jcnc/jnotepad/model/entity/Plugins.java
new file mode 100644
index 0000000..40e1dc2
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/model/entity/Plugins.java
@@ -0,0 +1,28 @@
+package org.jcnc.jnotepad.model.entity;
+
+import lombok.Data;
+
+/**
+ * 插件类
+ *
+ * @author gewuyou
+ */
+@Data
+public class Plugins {
+ /**
+ * 插件名称
+ */
+ private String pluginName;
+ /**
+ * 插件版本
+ */
+ private String version;
+ /**
+ * 作者
+ */
+ private String author;
+ /**
+ * 插件描述
+ */
+ private String description;
+}
diff --git a/src/main/java/org/jcnc/jnotepad/model/entity/ShortcutKey.java b/src/main/java/org/jcnc/jnotepad/model/entity/ShortcutKey.java
new file mode 100644
index 0000000..28de5ff
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/model/entity/ShortcutKey.java
@@ -0,0 +1,20 @@
+package org.jcnc.jnotepad.model.entity;
+
+import lombok.Data;
+
+/**
+ * 快捷键信息类
+ *
+ * @author gewuyou
+ */
+@Data
+public class ShortcutKey {
+ /**
+ * 按钮名称
+ */
+ private String buttonName;
+ /**
+ * 快捷键值
+ */
+ private String shortcutKeyValue;
+}
diff --git a/src/main/java/org/jcnc/jnotepad/model/enums/DialogType.java b/src/main/java/org/jcnc/jnotepad/model/enums/DialogType.java
new file mode 100644
index 0000000..1f4cecc
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/model/enums/DialogType.java
@@ -0,0 +1,29 @@
+package org.jcnc.jnotepad.model.enums;
+
+/**
+ * 对话框类型
+ *
+ * @author gewuyou
+ */
+public enum DialogType {
+ /**
+ * 信息
+ */
+ INFO,
+ /**
+ * 警告
+ */
+ WARNING,
+ /**
+ * 错误
+ */
+ ERROR,
+ /**
+ * 成功
+ */
+ SUCCESS,
+ /**
+ * 疑问
+ */
+ QUESTION
+}
diff --git a/src/main/java/org/jcnc/jnotepad/plugin/ButtonPlugin.java b/src/main/java/org/jcnc/jnotepad/plugin/ButtonPlugin.java
index 3e0266b..06f8765 100644
--- a/src/main/java/org/jcnc/jnotepad/plugin/ButtonPlugin.java
+++ b/src/main/java/org/jcnc/jnotepad/plugin/ButtonPlugin.java
@@ -1,5 +1,6 @@
package org.jcnc.jnotepad.plugin;
+import org.jcnc.jnotepad.plugin.interfaces.Plugin;
import org.jcnc.jnotepad.util.LogUtil;
/**
@@ -19,6 +20,14 @@ public class ButtonPlugin implements Plugin {
return "新按钮";
}
+ /**
+ * 初始化插件
+ */
+ @Override
+ public void initialize() {
+ LogUtil.getLogger(this.getClass()).info("新按钮插件初始化了!");
+ }
+
@Override
public void execute() {
// 在这里实现新按钮插件的逻辑
diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginDemo.java b/src/main/java/org/jcnc/jnotepad/plugin/PluginDemo.java
index 9d4fcb0..af42ec7 100644
--- a/src/main/java/org/jcnc/jnotepad/plugin/PluginDemo.java
+++ b/src/main/java/org/jcnc/jnotepad/plugin/PluginDemo.java
@@ -29,7 +29,7 @@ public class PluginDemo {
* @param primaryStage JavaFX的主舞台
*/
public void start(Stage primaryStage) {
- PluginManager pluginManager = new PluginManager();
+ PluginManager pluginManager = PluginManager.getInstance();
FileChooser fileChooser = BasicFileChooserFactory.getInstance().createFileChooser(
"选择插件",
diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginManager.java b/src/main/java/org/jcnc/jnotepad/plugin/PluginManager.java
index eb8f1e8..8eaa31e 100644
--- a/src/main/java/org/jcnc/jnotepad/plugin/PluginManager.java
+++ b/src/main/java/org/jcnc/jnotepad/plugin/PluginManager.java
@@ -1,5 +1,6 @@
package org.jcnc.jnotepad.plugin;
+import org.jcnc.jnotepad.plugin.interfaces.Plugin;
import org.jcnc.jnotepad.util.LogUtil;
import org.slf4j.Logger;
@@ -22,16 +23,17 @@ import java.util.Map;
* @author luke
*/
public class PluginManager {
+ private static final PluginManager INSTANCE = new PluginManager();
Logger logger = LogUtil.getLogger(this.getClass());
- private final List plugins;
- private final Map> categories;
+ private final List plugins = new ArrayList<>();
+ private final Map> categories = new HashMap<>();
- /**
- * 构造方法,初始化插件列表和类别映射
- */
- public PluginManager() {
- plugins = new ArrayList<>();
- categories = new HashMap<>();
+ private PluginManager() {
+
+ }
+
+ public static PluginManager getInstance() {
+ return INSTANCE;
}
/**
@@ -41,7 +43,6 @@ public class PluginManager {
*/
public void loadPlugins(String pluginFilePath) {
File file = new File(pluginFilePath);
-
if (file.exists() && file.isFile()) {
// 创建URLClassLoader以加载Jar文件中的类
Class> pluginClass = null;
@@ -73,10 +74,31 @@ public class PluginManager {
String displayName = plugin.getDisplayName();
categories.computeIfAbsent(categoryName, k -> new ArrayList<>()).add(displayName);
} else {
- LogUtil.getLogger(this.getClass()).info("Plugin file not found: {}", pluginFilePath);
+ LogUtil.getLogger(this.getClass()).info("Plugins file not found: {}", pluginFilePath);
}
}
+ /**
+ * 卸载插件
+ *
+ * @param pluginClassName 插件类名
+ * @since 2023/9/11 12:28
+ */
+ public void unloadPlugin(String pluginClassName) {
+ //todo Unload the plugin and remove it from the list
+ }
+
+ /**
+ * 禁用插件
+ *
+ * @param pluginClassName 禁用某个插件
+ * @apiNote
+ * @since 2023/9/11 12:34
+ */
+ public void disablePlugIn(String pluginClassName) {
+ //todo Disable the plugin
+ }
+
/**
* 执行加载的插件
*/
diff --git a/src/main/java/org/jcnc/jnotepad/plugin/Plugin.java b/src/main/java/org/jcnc/jnotepad/plugin/interfaces/Plugin.java
similarity index 75%
rename from src/main/java/org/jcnc/jnotepad/plugin/Plugin.java
rename to src/main/java/org/jcnc/jnotepad/plugin/interfaces/Plugin.java
index f3ac557..c97d53a 100644
--- a/src/main/java/org/jcnc/jnotepad/plugin/Plugin.java
+++ b/src/main/java/org/jcnc/jnotepad/plugin/interfaces/Plugin.java
@@ -1,4 +1,4 @@
-package org.jcnc.jnotepad.plugin;
+package org.jcnc.jnotepad.plugin.interfaces;
/**
* 插件接口
@@ -16,6 +16,11 @@ public interface Plugin extends PluginCategory {
*/
String getDisplayName();
+ /**
+ * 初始化插件
+ */
+ void initialize();
+
/**
* 执行插件的逻辑
*/
diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginCategory.java b/src/main/java/org/jcnc/jnotepad/plugin/interfaces/PluginCategory.java
similarity index 84%
rename from src/main/java/org/jcnc/jnotepad/plugin/PluginCategory.java
rename to src/main/java/org/jcnc/jnotepad/plugin/interfaces/PluginCategory.java
index c5c40f7..ff37651 100644
--- a/src/main/java/org/jcnc/jnotepad/plugin/PluginCategory.java
+++ b/src/main/java/org/jcnc/jnotepad/plugin/interfaces/PluginCategory.java
@@ -1,4 +1,4 @@
-package org.jcnc.jnotepad.plugin;
+package org.jcnc.jnotepad.plugin.interfaces;
/**
* 插件类别接口
diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialog.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialog.java
index c7dfbd8..d72800b 100644
--- a/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialog.java
+++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialog.java
@@ -1,18 +1,12 @@
package org.jcnc.jnotepad.ui.dialog;
-import javafx.geometry.Insets;
-import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
-import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
-import javafx.stage.Modality;
import javafx.stage.Stage;
-import org.jcnc.jnotepad.util.UiUtil;
-import org.kordamp.ikonli.javafx.FontIcon;
/**
* 应用对话框
@@ -27,16 +21,16 @@ public class AppDialog extends Stage {
*
* @param builder 提示框构建器
*/
- private AppDialog(
+ public AppDialog(
AppDialogBuilder builder) {
// 设置窗口图标
- this.getIcons().add(builder.appIcon);
- setTitle(builder.title);
- setResizable(builder.isResizable);
- initModality(builder.modality);
+ this.getIcons().add(builder.getAppIcon());
+ setTitle(builder.getTitle());
+ setResizable(builder.isResizable());
+ initModality(builder.getModality());
BorderPane borderPane = createLayout(builder);
- Scene scene = new Scene(borderPane, builder.width, builder.height);
+ Scene scene = new Scene(borderPane, builder.getWidth(), builder.getHeight());
setScene(scene);
}
@@ -49,22 +43,22 @@ public class AppDialog extends Stage {
private BorderPane createLayout(
AppDialogBuilder builder) {
BorderPane borderPane = new BorderPane();
- HBox iconBox = new HBox(builder.icon);
- iconBox.setPadding(builder.iconCoxPaddingInsets);
- VBox vbox = new VBox(builder.hBoxSpacing);
- vbox.setAlignment(builder.vboxPos);
+ HBox iconBox = new HBox(builder.getIcon());
+ iconBox.setPadding(builder.getIconCoxPaddingInsets());
+ VBox vbox = new VBox(builder.getHBoxSpacing());
+ vbox.setAlignment(builder.getVboxPos());
- Label label = new Label(builder.headerText);
+ Label label = new Label(builder.getHeaderText());
// 自定义文本
- Label customTextLabel = new Label(builder.customText);
+ Label customTextLabel = new Label(builder.getCustomText());
- Button confirmButton = createButton(builder.leftBtnText, builder.leftBtnAction::handleAction);
- Button cancelButton = createButton(builder.rightBtnText, builder.rightBtnAction::handleAction);
+ Button confirmButton = createButton(builder.getLeftBtnText(), builder.getLeftBtnAction()::handleAction);
+ Button cancelButton = createButton(builder.getRightBtnText(), builder.getRightBtnAction()::handleAction);
- HBox hBox = new HBox(builder.hBoxSpacing, confirmButton, cancelButton);
- hBox.setAlignment(builder.hboxPos);
- hBox.setPadding(builder.hBoxPaddingInsets);
+ HBox hBox = new HBox(builder.getHBoxSpacing(), confirmButton, cancelButton);
+ hBox.setAlignment(builder.getHboxPos());
+ hBox.setPadding(builder.getHBoxPaddingInsets());
vbox.getChildren().addAll(label, customTextLabel, hBox);
borderPane.setLeft(iconBox);
@@ -86,269 +80,4 @@ public class AppDialog extends Stage {
button.setOnAction(e -> action.run());
return button;
}
-
- public enum DialogType {
- /**
- * 信息
- */
- INFO,
- /**
- * 警告
- */
- WARNING,
- /**
- * 错误
- */
- ERROR,
- /**
- * 成功
- */
- SUCCESS,
- /**
- * 疑问
- */
- QUESTION
- }
-
-
- public interface ButtonAction {
- /**
- * 处理按钮的操作。子类必须实现此方法以定义按钮的行为
- *
- * @apiNote
- * @since 2023/9/3 22:53
- */
-
- void handleAction();
- }
-
- public static class AppDialogBuilder {
- private AppDialog appDialog;
- private Image appIcon = UiUtil.getAppIcon();
- private String title;
- private String headerText;
- private String customText;
- private double width = 350;
- private double height = 150;
- private FontIcon icon;
-
- private ButtonAction leftBtnAction = () -> appDialog.close();
-
- private ButtonAction rightBtnAction = () -> appDialog.close();
-
- private String leftBtnText = "确定";
-
- private String rightBtnText = "取消";
-
- private Insets iconCoxPaddingInsets = new Insets(10, 10, 10, 10);
- private Insets hBoxPaddingInsets = new Insets(10, 10, 10, 10);
- private boolean isResizable = false;
- private double hBoxSpacing = 10;
- private Pos vboxPos = Pos.CENTER;
- private Pos hboxPos = Pos.CENTER_RIGHT;
- private Modality modality = Modality.APPLICATION_MODAL;
-
- /**
- * 设置默认的对话框构造
- *
- * @param type 对话框类型
- * @return org.jcnc.jnotepad.ui.dialog.AppDialog.AppDialogBuilder
- * @apiNote 该方法只会设置默认的对话框配置,标题、图标,头文本和自定义文本需要自行设置
- * @since 2023/9/3 22:24
- */
- public AppDialogBuilder setDialogType(DialogType type) {
- switch (type) {
- case INFO ->
- // 设置默认的对话框配置
- {
- return setTitle("信息").
- setIcon(UiUtil.getInfoIcon());
- }
- case WARNING ->
- // 设置默认的对话框配置
- {
- return setTitle("警告").
- setIcon(UiUtil.getWarningIcon());
- }
- case ERROR ->
- // 设置默认的对话框配置
- {
- return setTitle("错误").
- setIcon(UiUtil.getErrorIcon());
- }
- case QUESTION ->
- // 设置默认的对话框配置
- {
- return setTitle("问题").
- setIcon(UiUtil.getQuestionIcon());
- }
- case SUCCESS ->
- // 设置默认的对话框配置
- {
- return setTitle("成功").
- setIcon(UiUtil.getSuccessIcon());
- }
- default -> {
- return this;
- }
- }
- }
-
- /**
- * 设置应用图标
- */
- public AppDialogBuilder setAppIcon(Image appIcon) {
- this.appIcon = appIcon;
- return this;
- }
-
-
- /**
- * 设置对话框标题
- */
- public AppDialogBuilder setTitle(String title) {
- this.title = title;
- return this;
- }
-
-
- /**
- * 设置对话框头部文本
- */
- public AppDialogBuilder setHeaderText(String headerText) {
- this.headerText = headerText;
- return this;
- }
-
- /**
- * 设置自定义文本
- */
- public AppDialogBuilder setCustomText(String customText) {
- this.customText = customText;
- return this;
- }
-
- /**
- * 设置对话框宽度
- */
- public AppDialogBuilder setWidth(double width) {
- this.width = width;
- return this;
- }
-
- /**
- * 设置对话框高度
- */
- public AppDialogBuilder setHeight(double height) {
- this.height = height;
- return this;
- }
-
- /**
- * 设置对话框左侧图标
- */
- public AppDialogBuilder setIcon(FontIcon icon) {
- this.icon = icon;
- return this;
- }
-
- /**
- * 设置左按钮操作
- */
- public AppDialogBuilder setLeftBtnAction(ButtonAction leftBtnAction) {
- if (leftBtnAction != null) {
- this.leftBtnAction = leftBtnAction;
- }
- return this;
- }
-
- /**
- * 设置右按钮操作
- */
- public AppDialogBuilder setRightBtnAction(ButtonAction rightBtnAction) {
- if (rightBtnAction != null) {
- this.rightBtnAction = rightBtnAction;
- }
- return this;
- }
-
- /**
- * 设置左按钮文本
- */
- public AppDialogBuilder setLeftBtnText(String leftBtnText) {
- this.leftBtnText = leftBtnText;
- return this;
- }
-
- /**
- * 设置右按钮文本
- */
- public AppDialogBuilder setRightBtnText(String rightBtnText) {
- this.rightBtnText = rightBtnText;
- return this;
- }
-
- /**
- * 设置图标边距
- */
- public AppDialogBuilder setIconCoxPaddingInsets(Insets iconCoxPaddingInsets) {
- this.iconCoxPaddingInsets = iconCoxPaddingInsets;
- return this;
- }
-
- /**
- * 设置水平盒子边距
- */
- public AppDialogBuilder setHorizontalBoxPaddingInsets(Insets hBoxPaddingInsets) {
- this.hBoxPaddingInsets = hBoxPaddingInsets;
- return this;
- }
-
- /**
- * 设置是否可调整大小
- */
- public AppDialogBuilder setResizable(boolean resizable) {
- isResizable = resizable;
- return this;
- }
-
- /**
- * 设置水平盒子间距
- */
- public AppDialogBuilder setHorizontalBoxSpacing(double hBoxSpacing) {
- this.hBoxSpacing = hBoxSpacing;
- return this;
- }
-
- /**
- * 设置垂直盒子位置
- */
- public AppDialogBuilder setVboxPos(Pos vboxPos) {
- this.vboxPos = vboxPos;
- return this;
- }
-
- /**
- * 设置水平盒子位置
- */
- public AppDialogBuilder setHorizontalBoxPos(Pos hboxPos) {
- this.hboxPos = hboxPos;
- return this;
- }
-
- /**
- * 设置模态性
- */
- public AppDialogBuilder setModality(Modality modality) {
- this.modality = modality;
- return this;
- }
-
-
- public AppDialog build() {
- appDialog = new AppDialog(this);
- return appDialog;
- }
- }
-
}
diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialogBuilder.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialogBuilder.java
new file mode 100644
index 0000000..a372e43
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialogBuilder.java
@@ -0,0 +1,246 @@
+package org.jcnc.jnotepad.ui.dialog;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.image.Image;
+import javafx.stage.Modality;
+import lombok.Data;
+import org.jcnc.jnotepad.model.enums.DialogType;
+import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
+import org.jcnc.jnotepad.util.UiUtil;
+import org.kordamp.ikonli.javafx.FontIcon;
+
+/**
+ * 应用对话框建造者类
+ *
+ * @author gewuyou
+ */
+@Data
+public class AppDialogBuilder {
+ private AppDialog appDialog;
+ private Image appIcon = UiUtil.getAppIcon();
+ private String title;
+ private String headerText;
+ private String customText;
+ private double width = 350;
+ private double height = 150;
+ private FontIcon icon;
+
+ private DialogButtonAction leftBtnAction = () -> appDialog.close();
+
+ private DialogButtonAction rightBtnAction = () -> appDialog.close();
+
+ private String leftBtnText = "确定";
+
+ private String rightBtnText = "取消";
+
+ private Insets iconCoxPaddingInsets = new Insets(10, 10, 10, 10);
+ private Insets hBoxPaddingInsets = new Insets(10, 10, 10, 10);
+ private boolean isResizable = false;
+ private double hBoxSpacing = 10;
+ private Pos vboxPos = Pos.CENTER;
+ private Pos hboxPos = Pos.CENTER_RIGHT;
+ private Modality modality = Modality.APPLICATION_MODAL;
+
+ /**
+ * 设置默认的对话框构造
+ *
+ * @param type 对话框类型
+ * @return org.jcnc.jnotepad.ui.dialog.AppDialogBuilder
+ * @apiNote 该方法只会设置默认的对话框配置,标题、图标,头文本和自定义文本需要自行设置
+ * @since 2023/9/3 22:24
+ */
+ public AppDialogBuilder setDialogType(DialogType type) {
+ switch (type) {
+ case INFO ->
+ // 设置默认的对话框配置
+ {
+ return setTitle("信息").
+ setIcon(UiUtil.getInfoIcon());
+ }
+ case WARNING ->
+ // 设置默认的对话框配置
+ {
+ return setTitle("警告").
+ setIcon(UiUtil.getWarningIcon());
+ }
+ case ERROR ->
+ // 设置默认的对话框配置
+ {
+ return setTitle("错误").
+ setIcon(UiUtil.getErrorIcon());
+ }
+ case QUESTION ->
+ // 设置默认的对话框配置
+ {
+ return setTitle("问题").
+ setIcon(UiUtil.getQuestionIcon());
+ }
+ case SUCCESS ->
+ // 设置默认的对话框配置
+ {
+ return setTitle("成功").
+ setIcon(UiUtil.getSuccessIcon());
+ }
+ default -> {
+ return this;
+ }
+ }
+ }
+
+ /**
+ * 设置应用图标
+ */
+ public AppDialogBuilder setAppIcon(Image appIcon) {
+ this.appIcon = appIcon;
+ return this;
+ }
+
+
+ /**
+ * 设置对话框标题
+ */
+ public AppDialogBuilder setTitle(String title) {
+ this.title = title;
+ return this;
+ }
+
+
+ /**
+ * 设置对话框头部文本
+ */
+ public AppDialogBuilder setHeaderText(String headerText) {
+ this.headerText = headerText;
+ return this;
+ }
+
+ /**
+ * 设置自定义文本
+ */
+ public AppDialogBuilder setCustomText(String customText) {
+ this.customText = customText;
+ return this;
+ }
+
+ /**
+ * 设置对话框宽度
+ */
+ public AppDialogBuilder setWidth(double width) {
+ this.width = width;
+ return this;
+ }
+
+ /**
+ * 设置对话框高度
+ */
+ public AppDialogBuilder setHeight(double height) {
+ this.height = height;
+ return this;
+ }
+
+ /**
+ * 设置对话框左侧图标
+ */
+ public AppDialogBuilder setIcon(FontIcon icon) {
+ this.icon = icon;
+ return this;
+ }
+
+ /**
+ * 设置左按钮操作
+ */
+ public AppDialogBuilder setLeftBtnAction(DialogButtonAction leftBtnAction) {
+ if (leftBtnAction != null) {
+ this.leftBtnAction = leftBtnAction;
+ }
+ return this;
+ }
+
+ /**
+ * 设置右按钮操作
+ */
+ public AppDialogBuilder setRightBtnAction(DialogButtonAction rightBtnAction) {
+ if (rightBtnAction != null) {
+ this.rightBtnAction = rightBtnAction;
+ }
+ return this;
+ }
+
+ /**
+ * 设置左按钮文本
+ */
+ public AppDialogBuilder setLeftBtnText(String leftBtnText) {
+ this.leftBtnText = leftBtnText;
+ return this;
+ }
+
+ /**
+ * 设置右按钮文本
+ */
+ public AppDialogBuilder setRightBtnText(String rightBtnText) {
+ this.rightBtnText = rightBtnText;
+ return this;
+ }
+
+ /**
+ * 设置图标边距
+ */
+ public AppDialogBuilder setIconCoxPaddingInsets(Insets iconCoxPaddingInsets) {
+ this.iconCoxPaddingInsets = iconCoxPaddingInsets;
+ return this;
+ }
+
+ /**
+ * 设置水平盒子边距
+ */
+ public AppDialogBuilder setHorizontalBoxPaddingInsets(Insets hBoxPaddingInsets) {
+ this.hBoxPaddingInsets = hBoxPaddingInsets;
+ return this;
+ }
+
+ /**
+ * 设置是否可调整大小
+ */
+ public AppDialogBuilder setResizable(boolean resizable) {
+ isResizable = resizable;
+ return this;
+ }
+
+ /**
+ * 设置水平盒子间距
+ */
+ public AppDialogBuilder setHorizontalBoxSpacing(double hBoxSpacing) {
+ this.hBoxSpacing = hBoxSpacing;
+ return this;
+ }
+
+ /**
+ * 设置垂直盒子位置
+ */
+ public AppDialogBuilder setVboxPos(Pos vboxPos) {
+ this.vboxPos = vboxPos;
+ return this;
+ }
+
+ /**
+ * 设置水平盒子位置
+ */
+ public AppDialogBuilder setHorizontalBoxPos(Pos hboxPos) {
+ this.hboxPos = hboxPos;
+ return this;
+ }
+
+ /**
+ * 设置模态性
+ */
+ public AppDialogBuilder setModality(Modality modality) {
+ this.modality = modality;
+ return this;
+ }
+
+
+ public AppDialog build() {
+ appDialog = new AppDialog(this);
+ return appDialog;
+ }
+}
diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/interfaces/DialogButtonAction.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/interfaces/DialogButtonAction.java
new file mode 100644
index 0000000..e7a4d9a
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/interfaces/DialogButtonAction.java
@@ -0,0 +1,17 @@
+package org.jcnc.jnotepad.ui.dialog.interfaces;
+
+/**
+ * 对话框按钮点击事件接口
+ *
+ * @author gewuyou
+ */
+public interface DialogButtonAction {
+ /**
+ * 处理按钮的操作。子类必须实现此方法以定义按钮的行为
+ *
+ * @apiNote
+ * @since 2023/9/3 22:53
+ */
+
+ void handleAction();
+}
diff --git a/src/main/java/org/jcnc/jnotepad/ui/titlebar/CustomTitleBar.java b/src/main/java/org/jcnc/jnotepad/ui/titlebar/CustomTitleBar.java
index b1aa68e..b243079 100644
--- a/src/main/java/org/jcnc/jnotepad/ui/titlebar/CustomTitleBar.java
+++ b/src/main/java/org/jcnc/jnotepad/ui/titlebar/CustomTitleBar.java
@@ -103,6 +103,7 @@ public class CustomTitleBar extends HBox {
}
private static class Delta {
- double x, y;
+ double x;
+ double y;
}
}
diff --git a/src/main/java/org/jcnc/jnotepad/util/PopUpUtil.java b/src/main/java/org/jcnc/jnotepad/util/PopUpUtil.java
index a3df941..b329514 100644
--- a/src/main/java/org/jcnc/jnotepad/util/PopUpUtil.java
+++ b/src/main/java/org/jcnc/jnotepad/util/PopUpUtil.java
@@ -1,6 +1,8 @@
package org.jcnc.jnotepad.util;
-import org.jcnc.jnotepad.ui.dialog.AppDialog;
+import org.jcnc.jnotepad.model.enums.DialogType;
+import org.jcnc.jnotepad.ui.dialog.AppDialogBuilder;
+import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
/**
* 弹窗工具类
@@ -25,9 +27,9 @@ public class PopUpUtil {
*/
public static void errorAlert(
String title, String headerText, String message,
- AppDialog.ButtonAction leftBtnAction, AppDialog.ButtonAction rightBtnAction) {
+ DialogButtonAction leftBtnAction, DialogButtonAction rightBtnAction) {
getCustomDialog()
- .setDialogType(AppDialog.DialogType.ERROR)
+ .setDialogType(DialogType.ERROR)
.setTitle(title)
.setHeaderText(headerText)
.setCustomText(message)
@@ -49,9 +51,9 @@ public class PopUpUtil {
*/
public static void infoAlert(
String title, String headerText, String message,
- AppDialog.ButtonAction leftBtnAction, AppDialog.ButtonAction rightBtnAction) {
+ DialogButtonAction leftBtnAction, DialogButtonAction rightBtnAction) {
getCustomDialog()
- .setDialogType(AppDialog.DialogType.INFO)
+ .setDialogType(DialogType.INFO)
.setTitle(title)
.setHeaderText(headerText)
.setCustomText(message)
@@ -73,9 +75,9 @@ public class PopUpUtil {
*/
public static void warningAlert(
String title, String headerText, String message,
- AppDialog.ButtonAction leftBtnAction, AppDialog.ButtonAction rightBtnAction) {
+ DialogButtonAction leftBtnAction, DialogButtonAction rightBtnAction) {
getCustomDialog()
- .setDialogType(AppDialog.DialogType.WARNING)
+ .setDialogType(DialogType.WARNING)
.setTitle(title)
.setHeaderText(headerText)
.setCustomText(message)
@@ -97,9 +99,9 @@ public class PopUpUtil {
*/
public static void questionAlert(
String title, String headerText, String message,
- AppDialog.ButtonAction leftBtnAction, AppDialog.ButtonAction rightBtnAction) {
+ DialogButtonAction leftBtnAction, DialogButtonAction rightBtnAction) {
getCustomDialog()
- .setDialogType(AppDialog.DialogType.QUESTION)
+ .setDialogType(DialogType.QUESTION)
.setTitle(title)
.setHeaderText(headerText)
.setCustomText(message)
@@ -110,9 +112,9 @@ public class PopUpUtil {
public static void successAlert(
String title, String headerText, String message,
- AppDialog.ButtonAction leftBtnAction, AppDialog.ButtonAction rightBtnAction) {
+ DialogButtonAction leftBtnAction, DialogButtonAction rightBtnAction) {
getCustomDialog()
- .setDialogType(AppDialog.DialogType.SUCCESS)
+ .setDialogType(DialogType.SUCCESS)
.setTitle(title)
.setHeaderText(headerText)
.setCustomText(message)
@@ -128,7 +130,7 @@ public class PopUpUtil {
* @apiNote 使用此方法会返回原始的应用对话框建造者类,以实现自定义弹窗
* @since 2023/9/3 11:54
*/
- public static AppDialog.AppDialogBuilder getCustomDialog() {
- return new AppDialog.AppDialogBuilder();
+ public static AppDialogBuilder getCustomDialog() {
+ return new AppDialogBuilder();
}
}
diff --git a/src/main/java/org/jcnc/jnotepad/views/root/right/RootRightSideBarVerticalBox.java b/src/main/java/org/jcnc/jnotepad/views/root/right/RootRightSideBarVerticalBox.java
index 1d81e15..f5236ed 100644
--- a/src/main/java/org/jcnc/jnotepad/views/root/right/RootRightSideBarVerticalBox.java
+++ b/src/main/java/org/jcnc/jnotepad/views/root/right/RootRightSideBarVerticalBox.java
@@ -7,7 +7,7 @@ import org.jcnc.jnotepad.ui.module.AbstractVerticalBox;
*
* 该类用于管理右侧边栏的布局和内容。
*
- * @Author 许轲
+ * @author 许轲
*/
public class RootRightSideBarVerticalBox extends AbstractVerticalBox {
diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java
index c091166..caa2ced 100644
--- a/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java
+++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java
@@ -9,7 +9,7 @@ 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.model.entity.ShortcutKey;
import org.jcnc.jnotepad.plugin.PluginDemo;
import org.jcnc.jnotepad.util.LogUtil;
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;