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(); } }