From 3e04aa09da01d5ebd6089644764e5f58c81bb759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E8=BD=B2?= Date: Sat, 2 Sep 2023 13:25:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/module-info.java | 5 -- src/main/java/org/jcnc/jnotepad/LunchApp.java | 10 ++- .../event/handler/menubar/NewFile.java | 15 ++-- .../event/handler/menubar/OpenFile.java | 18 ++-- .../event/handler/menubar/RenameFile.java | 9 +- .../event/handler/menubar/SaveFile.java | 10 ++- .../controller/event/handler/tool/SetBtn.java | 2 +- .../jcnc/jnotepad/root/RootBorderPane.java | 18 ++-- .../bottom/RootBottomSideBarVerticalBox.java | 10 +-- .../root/center/main/MainBorderPane.java | 13 +-- ...izontalBox.java => JNotepadStatusBox.java} | 22 ++--- .../tab/{MainTab.java => JNotepadTab.java} | 8 +- ...{MainTabPane.java => JNotepadTabPane.java} | 16 ++-- .../right/RootRightSideBarVerticalBox.java | 25 ++++-- .../jnotepad/root/top/RootTopBorderPane.java | 18 ++-- .../root/top/menu/JNotepadMenuBar.java | 10 +-- .../java/org/jcnc/jnotepad/tool/UiUtil.java | 85 +------------------ .../ui/module/LineNumberTextArea.java | 12 +-- 18 files changed, 123 insertions(+), 183 deletions(-) rename src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/{StatusHorizontalBox.java => JNotepadStatusBox.java} (87%) rename src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/{MainTab.java => JNotepadTab.java} (89%) rename src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/{MainTabPane.java => JNotepadTabPane.java} (81%) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 974122b..6091e0e 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -23,11 +23,6 @@ module org.jcnc.jnotepad { exports org.jcnc.jnotepad.controller.event.handler.menubar; exports org.jcnc.jnotepad.tool; exports org.jcnc.jnotepad.interfaces; - exports org.jcnc.jnotepad.ui.module; - exports org.jcnc.jnotepad.ui.setstage; - exports org.jcnc.jnotepad.root.center.main.center.tab; - exports org.jcnc.jnotepad.root.top.menu; - exports org.jcnc.jnotepad.view.manager; opens org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad.root.center.main.bottom.status; diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index a0b2c19..598c667 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -27,10 +27,7 @@ import java.util.concurrent.ExecutorService; * @author 许轲 */ public class LunchApp extends Application { - /** - * 线程池 - */ - private final ExecutorService threadPool = ThreadPoolManager.getThreadPool(); + private static final Pane ROOT = new Pane(); private static final Scene SCENE; @@ -40,6 +37,11 @@ public class LunchApp extends Application { SCENE = new Scene(ROOT, width, length); } + /** + * 线程池 + */ + private final ExecutorService threadPool = ThreadPoolManager.getThreadPool(); + /** * 应用程序的入口点,启动 JavaFX 应用程序。 * diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java index 998e670..994646c 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java @@ -4,8 +4,9 @@ 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.root.center.main.center.tab.MainTab; -import org.jcnc.jnotepad.tool.UiUtil; +import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.view.manager.ViewManager; @@ -35,17 +36,17 @@ public class NewFile implements EventHandler { // 创建一个新的文本编辑区 LineNumberTextArea textArea = new LineNumberTextArea(); // TODO: refactor:统一TextArea新建、绑定监听器入口 - ViewManager viewManager = UiUtil.getViewManager(); + ViewManager viewManager = ViewManager.getInstance(); // 创建标签页 - MainTab mainTab = new MainTab( + JNotepadTab JNotepadTab = new JNotepadTab( UiResourceBundle.getContent(TextConstants.NEW_FILE) + viewManager.selfIncreaseAndGetTabIndex(), textArea); // 设置当前标签页与本地文件无关联 - mainTab.setRelevance(false); + JNotepadTab.setRelevance(false); // 将Tab页添加到TabPane中 - UiUtil.getJnotepadTabPane().addNewTab(mainTab); + JNotepadTabPane.getInstance().addNewTab(JNotepadTab); // 更新编码信息 - UiUtil.getStatusBox().updateEncodingLabel(); + JNotepadStatusBox.getInstance().updateEncodingLabel(); } } diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java index 2674779..bf01dab 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java @@ -9,8 +9,8 @@ import javafx.stage.FileChooser; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; import org.jcnc.jnotepad.manager.ThreadPoolManager; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.tool.EncodingDetector; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.UiUtil; @@ -83,9 +83,9 @@ public class OpenFile implements EventHandler { */ public void openFile(File file) { // 获取标签页集合 - MainTabPane jnotepadMainTabPane = UiUtil.getJnotepadTabPane(); + JNotepadTabPane jnotepadTabPane = JNotepadTabPane.getInstance(); // 遍历标签页,查找匹配的标签页 - for (Tab tab : jnotepadMainTabPane.getTabs()) { + for (Tab tab : jnotepadTabPane.getTabs()) { // 获取绑定的文件 File tabFile = (File) tab.getUserData(); if (tabFile == null) { @@ -93,7 +93,7 @@ public class OpenFile implements EventHandler { } if (file.getPath().equals((tabFile).getPath())) { // 找到匹配的标签页,设置为选中状态并跳转 - jnotepadMainTabPane.getSelectionModel().select(tab); + jnotepadTabPane.getSelectionModel().select(tab); return; } } @@ -119,11 +119,11 @@ public class OpenFile implements EventHandler { LogUtil.getLogger(this.getClass()).info("已调用读取文件功能"); Platform.runLater(() -> { textArea.getMainTextArea().setText(text); - MainTab tab = createNewTab(file.getName(), textArea, encoding); + JNotepadTab tab = createNewTab(file.getName(), textArea, encoding); // 设置当前标签页关联本地文件 tab.setRelevance(true); tab.setUserData(file); - UiUtil.getJnotepadTabPane().addNewTab(tab); + JNotepadTabPane.getInstance().addNewTab(tab); }); } catch (IOException ignored) { LogUtil.getLogger(this.getClass()).info("已忽视IO异常!"); @@ -146,7 +146,7 @@ public class OpenFile implements EventHandler { * @param textArea 文本区域 * @return 新的标签页 */ - private MainTab createNewTab(String tabName, LineNumberTextArea textArea, Charset charset) { - return new MainTab(tabName, textArea, charset); + private JNotepadTab createNewTab(String tabName, LineNumberTextArea textArea, Charset charset) { + return new JNotepadTab(tabName, textArea, charset); } } diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java index a867d3c..883b205 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java @@ -7,7 +7,8 @@ import javafx.scene.input.KeyCode; import javafx.stage.FileChooser; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory; @@ -29,7 +30,7 @@ public class RenameFile implements EventHandler { @Override public void handle(ActionEvent actionEvent) { // 获取当前标签页 - MainTab jnotepadtab = UiUtil.getJnotepadtab(); + JNotepadTab jnotepadtab = JNotepadTabPane.getInstance().getSelected(); if (jnotepadtab == null || jnotepadtab.getText().isEmpty()) { return; } @@ -49,7 +50,7 @@ public class RenameFile implements EventHandler { * * @param jnotepadtab 标签页组件 */ - private void handleRenameTab(MainTab jnotepadtab) { + private void handleRenameTab(JNotepadTab jnotepadtab) { TextField textField = new TextField(jnotepadtab.getText()); textField.getStyleClass().add("tab-title-editable"); // 清空标签页名称 @@ -87,7 +88,7 @@ public class RenameFile implements EventHandler { * * @param jnotepadtab 标签页组件 */ - private void handleRenameRelevanceFile(MainTab jnotepadtab) { + private void handleRenameRelevanceFile(JNotepadTab jnotepadtab) { // 获取原始文件对象 File file = (File) jnotepadtab.getUserData(); // 获取应用窗口并绑定 diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java index c408e41..15e386f 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java @@ -6,7 +6,9 @@ import javafx.stage.FileChooser; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; import org.jcnc.jnotepad.controller.i18n.LocalizationController; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; +import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.UiUtil; @@ -38,7 +40,7 @@ public class SaveFile implements EventHandler { @Override public void handle(ActionEvent actionEvent) { // 获取当前tab页 - MainTab selectedTab = UiUtil.getJnotepadtab(); + JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected(); if (selectedTab == null) { return; } @@ -54,7 +56,7 @@ public class SaveFile implements EventHandler { if (CONFIG_NAME.equals(selectedTab.getText())) { // 重新加载语言包和快捷键 SingletonUtil.getAppConfigController().loadConfig(); - UiUtil.getMenuBar().initShortcutKeys(); + JNotepadMenuBar.getInstance().initShortcutKeys(); LocalizationController.initLocal(); logger.info("已刷新语言包!"); logger.info("已刷新快捷键!"); @@ -70,7 +72,7 @@ public class SaveFile implements EventHandler { * @see LogUtil */ protected void saveTab(Class currentClass) { - MainTab selectedTab = UiUtil.getJnotepadtab(); + JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected(); if (selectedTab == null) { return; } diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java index 8478165..d426114 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java @@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.event.handler.tool; import javafx.event.ActionEvent; import javafx.event.EventHandler; -import org.jcnc.jnotepad.ui.setStage.SetStage; +import org.jcnc.jnotepad.ui.setstage.SetStage; /** * 设置按钮事件的事件处理程序。 diff --git a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java index 769c851..cb64913 100644 --- a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java @@ -24,6 +24,15 @@ public class RootBorderPane extends AbstractBorderPane { initRootBorderPane(); } + /** + * 获取 RootBorderPane 的单例实例。 + * + * @return RootBorderPane 的单例实例 + */ + public static RootBorderPane getInstance() { + return INSTANCE; + } + /** * 初始化 RootBorderPane。 * @@ -43,12 +52,5 @@ public class RootBorderPane extends AbstractBorderPane { setBottomComponent(RootBottomSideBarVerticalBox.getInstance()); } - /** - * 获取 RootBorderPane 的单例实例。 - * - * @return RootBorderPane 的单例实例 - */ - public static RootBorderPane getInstance() { - return INSTANCE; - } + } diff --git a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVerticalBox.java b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVerticalBox.java index 0076185..8a50557 100644 --- a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVerticalBox.java +++ b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVerticalBox.java @@ -1,6 +1,6 @@ package org.jcnc.jnotepad.root.bottom; -import org.jcnc.jnotepad.root.center.main.bottom.status.StatusHorizontalBox; +import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox; import org.jcnc.jnotepad.ui.module.AbstractVerticalBox; /** @@ -18,10 +18,6 @@ public class RootBottomSideBarVerticalBox extends AbstractVerticalBox { initSidebarVerticalBox(); } - private void initSidebarVerticalBox() { - getChildren().addAll(StatusHorizontalBox.getInstance()); - } - /** * 获取 RootBottomSideBarVerticalBox 的唯一实例。 * @@ -30,4 +26,8 @@ public class RootBottomSideBarVerticalBox extends AbstractVerticalBox { public static RootBottomSideBarVerticalBox getInstance() { return INSTANCE; } + + private void initSidebarVerticalBox() { + getChildren().addAll(JNotepadStatusBox.getInstance()); + } } diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java index f5b13bc..115eefb 100644 --- a/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/center/main/MainBorderPane.java @@ -1,6 +1,6 @@ package org.jcnc.jnotepad.root.center.main; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.ui.module.AbstractBorderPane; /** @@ -18,11 +18,6 @@ public class MainBorderPane extends AbstractBorderPane { initRootBorderPane(); } - private void initRootBorderPane() { - // 文本框 - setCenterComponent(MainTabPane.getInstance()); - } - /** * 获取 MainBorderPane 的唯一实例。 * @@ -31,4 +26,10 @@ public class MainBorderPane extends AbstractBorderPane { public static MainBorderPane getInstance() { return INSTANCE; } + + private void initRootBorderPane() { + // 文本框 + setCenterComponent(JNotepadTabPane.getInstance()); + } + } diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/StatusHorizontalBox.java b/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/JNotepadStatusBox.java similarity index 87% rename from src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/StatusHorizontalBox.java rename to src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/JNotepadStatusBox.java index c6f1134..0626a24 100644 --- a/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/StatusHorizontalBox.java +++ b/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/JNotepadStatusBox.java @@ -6,8 +6,8 @@ import javafx.scene.control.Label; import javafx.scene.control.TextArea; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.ui.module.AbstractHorizontalBox; import java.nio.charset.Charset; @@ -19,9 +19,9 @@ import java.nio.charset.Charset; * * @author songdragon */ -public class StatusHorizontalBox extends AbstractHorizontalBox { +public class JNotepadStatusBox extends AbstractHorizontalBox { - private static final StatusHorizontalBox STATUS_BOX = new StatusHorizontalBox(); + private static final JNotepadStatusBox STATUS_BOX = new JNotepadStatusBox(); private static final String STATUS_LABEL_FORMAT = "%s : %d \t%s: %d \t%s: %d \t"; /** * 字数统计及光标 @@ -33,11 +33,11 @@ public class StatusHorizontalBox extends AbstractHorizontalBox { private Label encodingLabel; - private StatusHorizontalBox() { + private JNotepadStatusBox() { initStatusBox(); } - public static StatusHorizontalBox getInstance() { + public static JNotepadStatusBox getInstance() { return STATUS_BOX; } @@ -89,7 +89,7 @@ public class StatusHorizontalBox extends AbstractHorizontalBox { * 更新字数统计 */ public void updateWordCountStatusLabel() { - MainTabPane instance = MainTabPane.getInstance(); + JNotepadTabPane instance = JNotepadTabPane.getInstance(); if (instance.getSelected() == null) { return; } @@ -107,12 +107,12 @@ public class StatusHorizontalBox extends AbstractHorizontalBox { *
2. 状态栏更新当前选中tab的字符编码 */ public void updateWhenTabSelected() { - MainTabPane instance = MainTabPane.getInstance(); + JNotepadTabPane instance = JNotepadTabPane.getInstance(); if (instance.getSelected() != null) { updateWordCountStatusLabel(); - MainTab mainTab = instance.getSelected(); - if (mainTab != null) { - updateEncodingLabel(mainTab.getCharset().name()); + JNotepadTab JNotepadTab = instance.getSelected(); + if (JNotepadTab != null) { + updateEncodingLabel(JNotepadTab.getCharset().name()); } } } diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTab.java b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java similarity index 89% rename from src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTab.java rename to src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java index 90ada80..2d3007e 100644 --- a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTab.java +++ b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java @@ -13,7 +13,7 @@ import java.nio.charset.Charset; * * @author songdragon */ -public class MainTab extends Tab { +public class JNotepadTab extends Tab { private final LineNumberTextArea lineNumberTextArea; /** @@ -26,15 +26,15 @@ public class MainTab extends Tab { private boolean isRelevance = false; private Charset charset = Charset.defaultCharset(); - public MainTab(String tabTitle) { + public JNotepadTab(String tabTitle) { this(tabTitle, new LineNumberTextArea()); } - public MainTab(String tabTitle, LineNumberTextArea textArea) { + public JNotepadTab(String tabTitle, LineNumberTextArea textArea) { this(tabTitle, textArea, Charset.defaultCharset()); } - public MainTab(String tabTitle, LineNumberTextArea textArea, Charset charset) { + public JNotepadTab(String tabTitle, LineNumberTextArea textArea, Charset charset) { super(tabTitle); lineNumberTextArea = textArea; this.setContent(lineNumberTextArea); diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTabPane.java b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java similarity index 81% rename from src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTabPane.java rename to src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java index f9c6e8b..ff8f613 100644 --- a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/MainTabPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java @@ -10,15 +10,15 @@ import org.jcnc.jnotepad.tool.SingletonUtil; * * @author songdragon */ -public class MainTabPane extends TabPane { +public class JNotepadTabPane extends TabPane { - private static final MainTabPane TAB_PANE = new MainTabPane(); + private static final JNotepadTabPane TAB_PANE = new JNotepadTabPane(); - private MainTabPane() { + private JNotepadTabPane() { initListeners(); } - public static MainTabPane getInstance() { + public static JNotepadTabPane getInstance() { return TAB_PANE; } @@ -44,7 +44,7 @@ public class MainTabPane extends TabPane { * * @param tab 新标签页 */ - public void addNewTab(MainTab tab) { + public void addNewTab(JNotepadTab tab) { if (tab == null) { return; } @@ -61,8 +61,8 @@ public class MainTabPane extends TabPane { * * @return 当前选中的标签页 */ - public MainTab getSelected() { - return (MainTab) this.getSelectionModel().getSelectedItem(); + public JNotepadTab getSelected() { + return (JNotepadTab) this.getSelectionModel().getSelectedItem(); } /** @@ -70,7 +70,7 @@ public class MainTabPane extends TabPane { * 应用当前菜单上选中的自动换行设置。 */ public void fireTabSelected() { - MainTab selectedTab = getSelected(); + JNotepadTab selectedTab = getSelected(); selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); JNotepadStatusBox.getInstance().updateWhenTabSelected(); } diff --git a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVerticalBox.java b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVerticalBox.java index 5ba00ce..377a2cd 100644 --- a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVerticalBox.java +++ b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVerticalBox.java @@ -3,21 +3,36 @@ package org.jcnc.jnotepad.root.right; import org.jcnc.jnotepad.ui.module.AbstractVerticalBox; /** - * @author 许轲 + * 右侧边栏的垂直布局容器类。 + * + *

该类用于管理右侧边栏的布局和内容。

+ * + * @Author 许轲 */ public class RootRightSideBarVerticalBox extends AbstractVerticalBox { + /** + * 唯一的 RootRightSideBarVerticalBox 实例,使用单例模式 + */ private static final RootRightSideBarVerticalBox INSTANCE = new RootRightSideBarVerticalBox(); private RootRightSideBarVerticalBox() { initSidebarVerticalBox(); } - private void initSidebarVerticalBox() { - - } - + /** + * 获取 RootRightSideBarVerticalBox 的唯一实例。 + * + * @return RootRightSideBarVerticalBox 的实例 + */ public static RootRightSideBarVerticalBox getInstance() { return INSTANCE; } + + /** + * 初始化右侧边栏的垂直布局。 + */ + private void initSidebarVerticalBox() { + // 在此添加右侧边栏布局和内容的初始化代码 + } } diff --git a/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java index 9944572..080ac1b 100644 --- a/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java @@ -21,21 +21,21 @@ public class RootTopBorderPane extends AbstractBorderPane { } /** - * 初始化 RootTopBorderPane。 + * 获取 RootTopBorderPane 的单例实例。 * - *

在顶部区域添加了 JNotepadMenuBar 的单例实例。

+ * @return RootTopBorderPane 的单例实例 */ - private void initRootBorderPane() { - // 在顶部区域添加菜单栏 - setTopComponent(JNotepadMenuBar.getInstance()); + public static RootTopBorderPane getInstance() { + return INSTANCE; } /** - * 获取 RootTopBorderPane 的单例实例。 + * 初始化 RootTopBorderPane。 * - * @return RootTopBorderPane 的单例实例 + *

在顶部区域添加了 JNotepadMenuBar 的单例实例。

*/ - public static RootTopBorderPane getInstance() { - return INSTANCE; + private void initRootBorderPane() { + // 在顶部区域添加菜单栏 + setTopComponent(JNotepadMenuBar.getInstance()); } } diff --git a/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java b/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java index 004cc8c..580dee1 100644 --- a/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/root/top/menu/JNotepadMenuBar.java @@ -10,8 +10,8 @@ import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.event.handler.menubar.*; import org.jcnc.jnotepad.controller.event.handler.tool.SetBtn; import org.jcnc.jnotepad.controller.i18n.LocalizationController; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.root.left.sidebar.tools.ToolBar; import org.jcnc.jnotepad.tool.LogUtil; import org.slf4j.Logger; @@ -35,7 +35,7 @@ public class JNotepadMenuBar extends MenuBar { /** * 标签页布局组件封装。 */ - MainTabPane mainTabPane = MainTabPane.getInstance(); + JNotepadTabPane JNotepadTabPane = org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane.getInstance(); AppConfigController appConfigController = AppConfigController.getInstance(); Logger logger = LogUtil.getLogger(this.getClass()); /** @@ -289,7 +289,7 @@ public class JNotepadMenuBar extends MenuBar { // 1. 更新全局配置 AppConfigController.getInstance().setAutoLineConfig(after); // 2. 对当前tab生效配置 - mainTabPane.fireTabSelected(); + JNotepadTabPane.fireTabSelected(); }); topItem.selectedProperty().addListener((observableValue, before, after) -> { // 获取窗口容器 @@ -322,7 +322,7 @@ public class JNotepadMenuBar extends MenuBar { * 根据当前选中tab,更新菜单选项 */ public void updateMenuStatusBySelectedTab() { - MainTab selectedTab = mainTabPane.getSelected(); + JNotepadTab selectedTab = JNotepadTabPane.getSelected(); lineFeedItem.selectedProperty().setValue(selectedTab.isAutoLine()); } } diff --git a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java index 92f0daa..fe8ad8b 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java @@ -2,13 +2,8 @@ package org.jcnc.jnotepad.tool; import javafx.scene.image.Image; import javafx.stage.Window; +import org.jcnc.jnotepad.LunchApp; import org.jcnc.jnotepad.constants.AppConstants; -import org.jcnc.jnotepad.root.center.main.bottom.status.StatusHorizontalBox; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTabPane; -import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar; -import org.jcnc.jnotepad.ui.setstage.SetStage; -import org.jcnc.jnotepad.view.manager.ViewManager; import java.util.Objects; @@ -20,42 +15,14 @@ import java.util.Objects; * @author gewuyou */ public class UiUtil { - /** - * 标签页布局组件 - */ - private static final MainTabPane TAB_PANE = MainTabPane.getInstance(); - /** - * 视图管理组件 - */ - private static final ViewManager VIEW_MANAGER = ViewManager.getInstance(); - /** - * 状态栏组件 - */ - private static final StatusHorizontalBox STATUS_BOX = StatusHorizontalBox.getInstance(); - /** - * 菜单栏组件 - */ - private static final JNotepadMenuBar MENU_BAR = JNotepadMenuBar.getInstance(); /** * 应用程序图标 */ private static final Image ICON = new Image(Objects.requireNonNull(UiUtil.class.getResource(AppConstants.APP_ICON)).toString()); - /** - * 设置窗口 - */ - private static final SetStage SET_STAGE = SetStage.getInstance(); private UiUtil() { } - /** - * 获取设置窗口。 - * - * @return org.jcnc.jnotepad.ui.setStage.SetStage 设置窗口对象 - */ - public static SetStage getSetStage() { - return SET_STAGE; - } /** * 获取应用程序图标。 @@ -66,28 +33,6 @@ public class UiUtil { return ICON; } - /** - * 获取标签页布局组件。 - * - * @return org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane 标签页布局组件对象 - * @apiNote JNotepadTabPane.getInstance() - * @see MainTabPane - */ - public static MainTabPane getJnotepadTabPane() { - return TAB_PANE; - } - - /** - * 获取标签页组件。 - * - * @return org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab 标签页组件对象 - * @apiNote JNotepadTabPane.getInstance().getSelected()
获取当前选中的标签页 - * @see MainTabPane - */ - public static MainTab getJnotepadtab() { - return TAB_PANE.getSelected(); - } - /** * 获取应用窗口。 * @@ -95,34 +40,8 @@ public class UiUtil { * @apiNote JNotepadTabPane.getInstance().getSelected().getTabPane().getScene().getWindow() */ public static Window getAppWindow() { - return TAB_PANE.getSelected().getTabPane().getScene().getWindow(); - } - - /** - * 获取视图管理组件。 - * - * @return org.jcnc.jnotepad.view.manager.ViewManager 视图管理组件对象 - * @apiNote ViewManager.getInstance() - */ - public static ViewManager getViewManager() { - return VIEW_MANAGER; + return LunchApp.getWindow(); } - /** - * 获取状态栏组件。 - * - * @return org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox 状态栏组件对象 - */ - public static StatusHorizontalBox getStatusBox() { - return STATUS_BOX; - } - /** - * 获取菜单栏组件。 - * - * @return org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar 菜单栏组件对象 - */ - public static JNotepadMenuBar getMenuBar() { - return MENU_BAR; - } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java index d68b7ae..b48e770 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java @@ -3,7 +3,9 @@ package org.jcnc.jnotepad.ui.module; import javafx.beans.property.StringProperty; import javafx.scene.control.TextArea; import javafx.scene.layout.BorderPane; -import org.jcnc.jnotepad.root.center.main.center.tab.MainTab; +import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.UiUtil; @@ -23,9 +25,9 @@ import java.io.IOException; */ public class LineNumberTextArea extends BorderPane { - private static final Logger logger = LogUtil.getLogger(LineNumberTextArea.class); static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE}; + private static final Logger logger = LogUtil.getLogger(LineNumberTextArea.class); private static final int MIN_LINE_NUMBER_WIDTH = 30; private final TextArea mainTextArea; private final TextArea lineNumberArea; @@ -61,12 +63,12 @@ public class LineNumberTextArea extends BorderPane { lineNumberArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberWidth()); - this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> UiUtil.getStatusBox().updateWordCountStatusLabel()); + this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> JNotepadStatusBox.getInstance().updateWordCountStatusLabel()); this.textProperty().addListener((observable, oldValue, newValue) -> { // 更新行号 updateLineNumberArea(); // 更新状态栏 - UiUtil.getStatusBox().updateWordCountStatusLabel(); + JNotepadStatusBox.getInstance().updateWordCountStatusLabel(); // 自动保存 save(); }); @@ -76,7 +78,7 @@ public class LineNumberTextArea extends BorderPane { * 以原文件编码格式写回文件 */ public void save() { - MainTab tab = UiUtil.getJnotepadtab(); + JNotepadTab tab = JNotepadTabPane.getInstance().getSelected(); if (tab == null) { return; } -- Gitee From bc26c69bb815b8c9db25d826b3486fe7f29a5fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E8=BD=B2?= Date: Sat, 2 Sep 2023 13:33:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jnotepad/controller/event/handler/menubar/SaveFile.java | 4 ++-- .../root/center/main/center/tab/JNotepadTabPane.java | 6 +++--- .../org/jcnc/jnotepad/ui/module/LineNumberTextArea.java | 1 - 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java index 15e386f..1b0d4ca 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java @@ -8,7 +8,7 @@ import org.jcnc.jnotepad.constants.TextConstants; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; -import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar; +import org.jcnc.jnotepad.root.top.menu.TopMenuBar; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.UiUtil; @@ -56,7 +56,7 @@ public class SaveFile implements EventHandler { if (CONFIG_NAME.equals(selectedTab.getText())) { // 重新加载语言包和快捷键 SingletonUtil.getAppConfigController().loadConfig(); - JNotepadMenuBar.getInstance().initShortcutKeys(); + TopMenuBar.getInstance().initShortcutKeys(); LocalizationController.initLocal(); logger.info("已刷新语言包!"); logger.info("已刷新快捷键!"); diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java index 44df745..d0a6406 100644 --- a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTabPane.java @@ -1,7 +1,7 @@ package org.jcnc.jnotepad.root.center.main.center.tab; import javafx.scene.control.TabPane; -import org.jcnc.jnotepad.root.center.main.bottom.status.StatusHorizontalBox; +import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox; import org.jcnc.jnotepad.root.top.menu.TopMenuBar; import org.jcnc.jnotepad.tool.SingletonUtil; @@ -34,7 +34,7 @@ public class JNotepadTabPane extends TabPane { TopMenuBar.getInstance().updateMenuStatusBySelectedTab(); } // 更新状态标签 - StatusHorizontalBox.getInstance().updateWhenTabSelected(); + JNotepadStatusBox.getInstance().updateWhenTabSelected(); } ); } @@ -72,6 +72,6 @@ public class JNotepadTabPane extends TabPane { public void fireTabSelected() { JNotepadTab selectedTab = getSelected(); selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); - StatusHorizontalBox.getInstance().updateWhenTabSelected(); + JNotepadStatusBox.getInstance().updateWhenTabSelected(); } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java index b48e770..a7c9e97 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java @@ -8,7 +8,6 @@ import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.SingletonUtil; -import org.jcnc.jnotepad.tool.UiUtil; import org.slf4j.Logger; import java.io.BufferedWriter; -- Gitee