From 5cda1ddf876e17f25281cdd8fda0deaa7d08b353 Mon Sep 17 00:00:00 2001
From: gewuyou <1063891901@qq.com>
Date: Tue, 29 Aug 2023 14:22:54 +0800
Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A9=20=E6=B7=BB=E5=8A=A0=E4=BD=BF?=
=?UTF-8?q?=E7=94=A8=E7=B3=BB=E7=BB=9F=E6=96=87=E4=BB=B6=E9=80=89=E6=8B=A9?=
=?UTF-8?q?=E5=99=A8=E6=97=B6=E6=98=BE=E7=A4=BA=E5=BA=94=E7=94=A8=E5=9B=BE?=
=?UTF-8?q?=E6=A0=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 -
src/main/java/module-info.java | 3 +
.../Interface/ControllerInterface.java | 3 -
src/main/java/org/jcnc/jnotepad/LunchApp.java | 2 -
.../config/AppConfigController.java | 7 +-
.../controller/event/handler/NewFile.java | 6 +-
.../controller/event/handler/OpenFile.java | 3 +-
.../controller/event/handler/SaveFile.java | 12 +--
.../java/org/jcnc/jnotepad/tool/JsonUtil.java | 1 -
.../java/org/jcnc/jnotepad/tool/UiUtil.java | 102 ++++++++++++++++++
.../jcnc/jnotepad/ui/tab/JNotepadTabPane.java | 9 +-
11 files changed, 126 insertions(+), 24 deletions(-)
create mode 100644 src/main/java/org/jcnc/jnotepad/tool/UiUtil.java
diff --git a/pom.xml b/pom.xml
index ded11a0..6feefc6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,8 +13,6 @@
UTF-8
5.9.2
-
-
io.github.mkpaz
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 13e0e4f..fc04115 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -22,5 +22,8 @@ module org.jcnc.jnotepad {
exports org.jcnc.jnotepad.constants;
exports org.jcnc.jnotepad.ui;
exports org.jcnc.jnotepad.controller.i18n;
+ exports org.jcnc.jnotepad.ui.tab;
+ exports org.jcnc.jnotepad.ui.status;
+ exports org.jcnc.jnotepad.ui.menu;
opens org.jcnc.jnotepad.app.config;
}
\ No newline at end of file
diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java
index c0f68f7..004d939 100644
--- a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java
+++ b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java
@@ -1,8 +1,5 @@
package org.jcnc.jnotepad.Interface;
-import org.jcnc.jnotepad.ui.LineNumberTextArea;
-
-import java.io.File;
import java.util.List;
/**
diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java
index 9186ceb..089b152 100644
--- a/src/main/java/org/jcnc/jnotepad/LunchApp.java
+++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java
@@ -43,8 +43,6 @@ public class LunchApp extends Application {
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
scene.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/css/styles.css")).toExternalForm());
initUiComponents();
-
-
UIResourceBundle.bindStringProperty(primaryStage.titleProperty(), TextConstants.TITLE);
primaryStage.setWidth(width);
primaryStage.setHeight(length);
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 99cfcdc..3b605f3 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java
@@ -15,6 +15,11 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
+/**
+ * 应用程序配置控制器
+ *
+ * @author songdragon
+ */
public class AppConfigController {
private static final Logger logger = LogUtil.getLogger(AppConfigController.class);
@@ -104,7 +109,7 @@ public class AppConfigController {
/**
* 获取当前配置文件所在目录
*
- * @return
+ * @return 所在目录
*/
public String getDir() {
return dir;
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java
index 9bc2952..a0bc2ea 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java
@@ -4,8 +4,8 @@ import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import org.jcnc.jnotepad.app.i18n.UIResourceBundle;
import org.jcnc.jnotepad.constants.TextConstants;
+import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
-import org.jcnc.jnotepad.ui.status.JNotepadStatusBox;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
import org.jcnc.jnotepad.view.manager.ViewManager;
@@ -37,13 +37,13 @@ public class NewFile implements EventHandler {
// 设置当前标签页与本地文件无关联
textArea.setRelevance(false);
// TODO: refactor:统一TextArea新建、绑定监听器入口
- ViewManager viewManager = ViewManager.getInstance();
+ ViewManager viewManager = UiUtil.getViewManager();
// 将Tab页添加到TabPane中
JNotepadTabPane.getInstance().addNewTab(new JNotepadTab(UIResourceBundle.getContent(TextConstants.NEW_FILE)
+ viewManager.selfIncreaseAndGetTabIndex(),
textArea));
// 更新编码信息
- JNotepadStatusBox.getInstance().updateEncodingLabel();
+ UiUtil.getStatusBox().updateEncodingLabel();
}
}
\ No newline at end of file
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenFile.java
index c7e12ee..ba676e6 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenFile.java
@@ -8,6 +8,7 @@ import javafx.stage.FileChooser;
import org.jcnc.jnotepad.manager.ThreadPoolManager;
import org.jcnc.jnotepad.tool.EncodingDetector;
import org.jcnc.jnotepad.tool.LogUtil;
+import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
@@ -39,7 +40,7 @@ public class OpenFile implements EventHandler {
// 创建文件选择器
FileChooser fileChooser = new FileChooser();
// 显示文件选择对话框,并获取选中的文件
- File file = fileChooser.showOpenDialog(null);
+ File file = fileChooser.showOpenDialog(UiUtil.getAppWindow());
if (file != null) {
openFile(file);
}
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveFile.java
index 4f2db0f..50173af 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveFile.java
@@ -6,10 +6,9 @@ import javafx.stage.FileChooser;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.tool.LogUtil;
+import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
-import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
-import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
import org.slf4j.Logger;
import java.io.File;
@@ -33,7 +32,7 @@ public class SaveFile implements EventHandler {
@Override
public void handle(ActionEvent actionEvent) {
// 获取当前tab页
- JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
+ JNotepadTab selectedTab = UiUtil.getJnotepadtab();
if (selectedTab == null) {
return;
}
@@ -51,7 +50,7 @@ public class SaveFile implements EventHandler {
if (CONFIG_NAME.equals(selectedTab.getText())) {
// 重新加载语言包和快捷键
AppConfigController.getInstance().loadConfig();
- JNotepadMenuBar.getMenuBar().initShortcutKeys();
+ UiUtil.getMenuBar().initShortcutKeys();
LocalizationController.initLocal();
logger.info("已刷新语言包!");
logger.info("已刷新快捷键!");
@@ -67,7 +66,7 @@ public class SaveFile implements EventHandler {
* @see LogUtil
*/
protected void saveTab(Class> currentClass) {
- JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
+ JNotepadTab selectedTab = UiUtil.getJnotepadtab();
if (selectedTab != null) {
// 创建一个文件窗口
FileChooser fileChooser = new FileChooser();
@@ -75,7 +74,8 @@ public class SaveFile implements EventHandler {
fileChooser.setInitialFileName(selectedTab.getText());
// 设置保存文件类型
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("文本文档", "*.txt"));
- File file = fileChooser.showSaveDialog(null);
+ // 获取应用窗口并绑定
+ File file = fileChooser.showSaveDialog(UiUtil.getAppWindow());
if (file != null) {
LogUtil.getLogger(currentClass).info("正在保存文件:{}", file.getName());
selectedTab.save();
diff --git a/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java b/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java
index 59f920e..b865755 100644
--- a/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java
+++ b/src/main/java/org/jcnc/jnotepad/tool/JsonUtil.java
@@ -1,7 +1,6 @@
package org.jcnc.jnotepad.tool;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.PrettyPrinter;
import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java
new file mode 100644
index 0000000..9f2c3e9
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java
@@ -0,0 +1,102 @@
+package org.jcnc.jnotepad.tool;
+
+import javafx.stage.Window;
+import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
+import org.jcnc.jnotepad.ui.status.JNotepadStatusBox;
+import org.jcnc.jnotepad.ui.tab.JNotepadTab;
+import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
+import org.jcnc.jnotepad.view.manager.ViewManager;
+
+/**
+ * UI工具
+ * 封装了项目所有的UI组件,以减少组件单例模式造成代码的复杂性
+ *
+ * @author gewuyou
+ */
+public class UiUtil {
+ private UiUtil() {
+ }
+
+ /**
+ * 标签页布局组件
+ */
+ private static final JNotepadTabPane TAB_PANE = JNotepadTabPane.getInstance();
+ /**
+ * 视图管理组件
+ */
+ private static final ViewManager VIEW_MANAGER = ViewManager.getInstance();
+ /**
+ * 状态栏组件
+ */
+ private static final JNotepadStatusBox STATUS_BOX = JNotepadStatusBox.getInstance();
+ /**
+ * 菜单栏组件
+ */
+ private static final JNotepadMenuBar MENU_BAR = JNotepadMenuBar.getMenuBar();
+
+ /**
+ * 获取标签页布局组件
+ *
+ * @return org.jcnc.jnotepad.ui.tab.JNotepadTabPane
+ * @apiNote JNotepadTabPane.getInstance()
+ * @see JNotepadTabPane
+ */
+
+ public static JNotepadTabPane getJnotepadTabPane() {
+ return TAB_PANE;
+ }
+
+ /**
+ * 获取标签页组件
+ *
+ * @return org.jcnc.jnotepad.ui.tab.JNotepadTab
+ * @apiNote JNotepadTabPane.getInstance().getSelected()
获取当前选中的标签页
+ * @see JNotepadTabPane
+ */
+
+ public static JNotepadTab getJnotepadtab() {
+ return TAB_PANE.getSelected();
+ }
+
+ /**
+ * 获取应用窗口
+ *
+ * @return javafx.stage.Window
+ * @apiNote JNotepadTabPane.getInstance().getSelected().getTabPane().getScene().getWindow()
+ * @since 2023/8/29 14:12
+ */
+ public static Window getAppWindow() {
+ return TAB_PANE.getSelected().getTabPane().getScene().getWindow();
+ }
+
+ /**
+ * 获取视图管理组件
+ *
+ * @return org.jcnc.jnotepad.view.manager.ViewManager
+ * @apiNote ViewManager.getInstance()
+ * @since 2023/8/29 14:13
+ */
+ public static ViewManager getViewManager() {
+ return VIEW_MANAGER;
+ }
+
+ /**
+ * 获取状态栏组件
+ *
+ * @return org.jcnc.jnotepad.ui.status.JNotepadStatusBox
+ * @since 2023/8/29 14:14
+ */
+ public static JNotepadStatusBox getStatusBox() {
+ return STATUS_BOX;
+ }
+
+ /**
+ * 获取菜单栏组件
+ *
+ * @return org.jcnc.jnotepad.ui.menu.JNotepadMenuBar
+ * @since 2023/8/29 14:15
+ */
+ public static JNotepadMenuBar getMenuBar() {
+ return MENU_BAR;
+ }
+}
diff --git a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java b/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java
index ea509a8..c149d70 100644
--- a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java
+++ b/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java
@@ -2,8 +2,7 @@ package org.jcnc.jnotepad.ui.tab;
import javafx.scene.control.TabPane;
import org.jcnc.jnotepad.controller.config.AppConfigController;
-import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
-import org.jcnc.jnotepad.ui.status.JNotepadStatusBox;
+import org.jcnc.jnotepad.tool.UiUtil;
/**
* 标签页布局组件封装。
@@ -27,10 +26,10 @@ public class JNotepadTabPane extends TabPane {
(ov, from, to) -> {
if (to != null) {
// 更新菜单栏中与tab相关设置
- JNotepadMenuBar.getMenuBar().updateMenuStatusBySelectedTab();
+ UiUtil.getMenuBar().updateMenuStatusBySelectedTab();
}
// 更新状态标签
- JNotepadStatusBox.getInstance().updateWhenTabSelected();
+ UiUtil.getStatusBox().updateWhenTabSelected();
}
);
}
@@ -69,6 +68,6 @@ public class JNotepadTabPane extends TabPane {
public void fireTabSelected() {
JNotepadTab selectedTab = getSelected();
selectedTab.setAutoLine(AppConfigController.getInstance().getAutoLineConfig());
- JNotepadStatusBox.getInstance().updateWhenTabSelected();
+ UiUtil.getStatusBox().updateWhenTabSelected();
}
}