From 29c3a59b3497742abdf17baaa8baddae258f6d53 Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Sat, 2 Sep 2023 00:06:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=20=E7=A7=BB=E9=99=A4Ui=E5=8D=95=E4=BE=8B?= =?UTF-8?q?=E4=BA=8EUi=E5=B7=A5=E5=85=B7=E7=B1=BB?= 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 | 9 +- .../config/AppConfigController.java | 1 + .../event/handler/menuBar/NewFile.java | 9 +- .../event/handler/menuBar/OpenFile.java | 4 +- .../event/handler/menuBar/RenameFile.java | 5 +- .../event/handler/menuBar/SaveFile.java | 8 +- .../controller/event/handler/tool/SetBtn.java | 4 +- .../jcnc/jnotepad/root/RootBorderPane.java | 9 +- .../root/bottom/RootBottomSideBarVBox.java | 8 +- .../root/center/main/MainBorderPane.java | 8 +- .../center/main/center/tab/JNotepadTab.java | 1 + .../main/center/tab/JNotepadTabPane.java | 9 +- .../root/right/RootRightSideBarVBox.java | 8 +- .../jnotepad/root/top/RootTopBorderPane.java | 8 +- .../org/jcnc/jnotepad/tool/SingletonUtil.java | 2 +- .../java/org/jcnc/jnotepad/tool/UiUtil.java | 97 +------------------ .../factory/impl/TextFileChooserFactory.java | 4 +- .../ui/module/LineNumberTextArea.java | 11 ++- 19 files changed, 62 insertions(+), 148 deletions(-) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 3843aa4..dbfe06e 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.Interface; - 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 393ae10..179db04 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -27,10 +27,6 @@ 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 +36,10 @@ public class LunchApp extends Application { SCENE = new Scene(ROOT, width, length); } + /** + * 线程池 + */ + private final ExecutorService threadPool = ThreadPoolManager.getThreadPool(); public static void main(String[] args) { launch(args); @@ -48,6 +48,7 @@ public class LunchApp extends Application { public static Window getWindow() { return SCENE.getWindow(); } + @Override public void start(Stage primaryStage) { Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet()); 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 b9e11bc..ef0148e 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java @@ -30,6 +30,7 @@ public class AppConfigController { private static final AppConfigController INSTANCE = new AppConfigController(); private AppConfig appConfig; private String dir; + private AppConfigController() { setDir(Paths.get(System.getProperty("user.home"), ".jnotepad").toString()); loadConfig(); 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 a81cbc5..26c2a83 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.bottom.status.JNotepadStatusBox; import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab; -import org.jcnc.jnotepad.tool.UiUtil; +import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.view.manager.ViewManager; @@ -33,7 +34,7 @@ public class NewFile implements EventHandler { // 创建一个新的文本编辑区 LineNumberTextArea textArea = new LineNumberTextArea(); // TODO: refactor:统一TextArea新建、绑定监听器入口 - ViewManager viewManager = UiUtil.getViewManager(); + ViewManager viewManager = ViewManager.getInstance(); // 创建标签页 JNotepadTab jNotepadTab = new JNotepadTab( UiResourceBundle.getContent(TextConstants.NEW_FILE) @@ -42,8 +43,8 @@ public class NewFile implements EventHandler { // 设置当前标签页与本地文件无关联 jNotepadTab.setRelevance(false); // 将Tab页添加到TabPane中 - UiUtil.getJnotepadTabPane().addNewTab(jNotepadTab); + JNotepadTabPane.getInstance().addNewTab(jNotepadTab); // 更新编码信息 - UiUtil.getStatusBox().updateEncodingLabel(); + JNotepadStatusBox.getInstance().updateEncodingLabel(); } } \ No newline at end of file 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 d69b0be..f73dc37 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 @@ -84,7 +84,7 @@ public class OpenFile implements EventHandler { */ public void openFile(File file) { // 获取标签页集合 - JNotepadTabPane jnotepadTabPane = UiUtil.getJnotepadTabPane(); + JNotepadTabPane jnotepadTabPane = JNotepadTabPane.getInstance(); // 遍历标签页,查找匹配的标签页 for (Tab tab : jnotepadTabPane.getTabs()) { // 获取绑定的文件 @@ -124,7 +124,7 @@ public class OpenFile implements EventHandler { // 设置当前标签页关联本地文件 tab.setRelevance(true); tab.setUserData(file); - UiUtil.getJnotepadTabPane().addNewTab(tab); + JNotepadTabPane.getInstance().addNewTab(tab); }); } catch (IOException ignored) { LogUtil.getLogger(this.getClass()).info("已忽视IO异常!"); 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 c152b44..247e7a6 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 @@ -8,6 +8,7 @@ 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.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; @@ -26,7 +27,7 @@ public class RenameFile implements EventHandler { @Override public void handle(ActionEvent actionEvent) { // 获取当前标签页 - JNotepadTab jnotepadtab = UiUtil.getJnotepadtab(); + JNotepadTab jnotepadtab = JNotepadTabPane.getInstance().getSelected(); if (jnotepadtab == null || jnotepadtab.getText().isEmpty()) { return; } @@ -90,7 +91,7 @@ public class RenameFile implements EventHandler { // 获取原始文件对象 File file = (File) jnotepadtab.getUserData(); // 获取应用窗口并绑定 - File newFile = TextFileChooserFactory.getInstance() + File newFile = TextFileChooserFactory.getInstance() .createFileChooser( UiResourceBundle.getContent(TextConstants.RENAME), jnotepadtab.getText(), 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 5eff265..d21d170 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 @@ -7,6 +7,8 @@ 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.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; @@ -34,7 +36,7 @@ public class SaveFile implements EventHandler { @Override public void handle(ActionEvent actionEvent) { // 获取当前tab页 - JNotepadTab selectedTab = UiUtil.getJnotepadtab(); + JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected(); if (selectedTab == null) { return; } @@ -50,7 +52,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("已刷新快捷键!"); @@ -66,7 +68,7 @@ public class SaveFile implements EventHandler { * @see LogUtil */ protected void saveTab(Class currentClass) { - JNotepadTab 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 f46891b..4d36719 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.tool.UiUtil; +import org.jcnc.jnotepad.ui.setStage.SetStage; /** @@ -21,7 +21,7 @@ public class SetBtn implements EventHandler { */ @Override public void handle(ActionEvent event) { - UiUtil.getSetStage().openSetStage(); + SetStage.getInstance().openSetStage(); } diff --git a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java index 62ea0ee..1cb4fb9 100644 --- a/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/RootBorderPane.java @@ -9,6 +9,7 @@ import org.jcnc.jnotepad.ui.module.AbstractBorderPane; /** * 根舞台下的Root主布局 + * * @author 许轲 */ public class RootBorderPane extends AbstractBorderPane { @@ -19,6 +20,10 @@ public class RootBorderPane extends AbstractBorderPane { initRootBorderPane(); } + public static RootBorderPane getInstance() { + return INSTANCE; + } + private void initRootBorderPane() { //中间,用于显示Main主布局 setCenterComponent(MainBorderPane.getInstance()); @@ -31,10 +36,6 @@ public class RootBorderPane extends AbstractBorderPane { //主布局的下面 setBottomComponent(RootBottomSideBarVBox.getInstance()); } - - public static RootBorderPane getInstance() { - return INSTANCE; - } } diff --git a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java index 8a02199..bb57713 100644 --- a/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java +++ b/src/main/java/org/jcnc/jnotepad/root/bottom/RootBottomSideBarVBox.java @@ -11,11 +11,11 @@ public class RootBottomSideBarVBox extends AbstractVBox { initSidebarVBox(); } - private void initSidebarVBox() { - getChildren().addAll(JNotepadStatusBox.getInstance()); - } - public static RootBottomSideBarVBox getInstance() { return INSTANCE; } + + private void initSidebarVBox() { + 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 8d679a7..8525402 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 @@ -16,15 +16,15 @@ public class MainBorderPane extends AbstractBorderPane { initRootBorderPane(); } + public static MainBorderPane getInstance() { + return INSTANCE; + } + private void initRootBorderPane() { //文本框 setCenterComponent(JNotepadTabPane.getInstance()); } - - public static MainBorderPane getInstance() { - return INSTANCE; - } } diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java index 00e7c0f..2d3007e 100644 --- a/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java +++ b/src/main/java/org/jcnc/jnotepad/root/center/main/center/tab/JNotepadTab.java @@ -80,6 +80,7 @@ public class JNotepadTab extends Tab { /** * 保存为指定文件 + * * @param file 新文件 */ public void save(File file) { 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 df2e03e..ff8f613 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,8 +1,9 @@ package org.jcnc.jnotepad.root.center.main.center.tab; import javafx.scene.control.TabPane; +import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox; +import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar; import org.jcnc.jnotepad.tool.SingletonUtil; -import org.jcnc.jnotepad.tool.UiUtil; /** * 标签页布局组件封装。 @@ -30,10 +31,10 @@ public class JNotepadTabPane extends TabPane { (ov, from, to) -> { if (to != null) { // 更新菜单栏中与tab相关设置 - UiUtil.getMenuBar().updateMenuStatusBySelectedTab(); + JNotepadMenuBar.getInstance().updateMenuStatusBySelectedTab(); } // 更新状态标签 - UiUtil.getStatusBox().updateWhenTabSelected(); + JNotepadStatusBox.getInstance().updateWhenTabSelected(); } ); } @@ -71,6 +72,6 @@ public class JNotepadTabPane extends TabPane { public void fireTabSelected() { JNotepadTab selectedTab = getSelected(); selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig()); - UiUtil.getStatusBox().updateWhenTabSelected(); + JNotepadStatusBox.getInstance().updateWhenTabSelected(); } } diff --git a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java index 72426fc..d4e34c1 100644 --- a/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java +++ b/src/main/java/org/jcnc/jnotepad/root/right/RootRightSideBarVBox.java @@ -10,11 +10,11 @@ public class RootRightSideBarVBox extends AbstractVBox { initSidebarVBox(); } - private void initSidebarVBox() { - - } - public static RootRightSideBarVBox getInstance() { return INSTANCE; } + + private void initSidebarVBox() { + + } } 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 9ef19dd..7e8bd80 100644 --- a/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/root/top/RootTopBorderPane.java @@ -17,14 +17,14 @@ public class RootTopBorderPane extends AbstractBorderPane { initRootBorderPane(); } + public static RootTopBorderPane getInstance() { + return INSTANCE; + } + private void initRootBorderPane() { //文本框上面 setTopComponent(JNotepadMenuBar.getInstance()); } - - public static RootTopBorderPane getInstance() { - return INSTANCE; - } } diff --git a/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java index 22e1a7d..ee986bb 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/SingletonUtil.java @@ -52,7 +52,7 @@ public class SingletonUtil { } /** - * 获取UI资源绑定组件I + * 获取UI资源绑定组件 * * @return org.jcnc.jnotepad.app.i18n.UiResourceBundle * @since 2023/8/30 12:45 diff --git a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java index b114473..bd4caef 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java @@ -2,61 +2,25 @@ 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.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.root.top.menu.JNotepadMenuBar; -import org.jcnc.jnotepad.ui.setStage.SetStage; -import org.jcnc.jnotepad.view.manager.ViewManager; import java.util.Objects; /** - * UI工具
- * 封装了项目所有的UI组件,以减少组件单例模式造成代码的复杂性 + * UI工具 * * @author gewuyou */ public class 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.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 - * @since 2023/8/30 12:39 - */ - public static SetStage getSetStage() { - return SET_STAGE; - } - /** * 获取应用程序图标 * @@ -67,30 +31,6 @@ public class UiUtil { return ICON; } - /** - * 获取标签页布局组件 - * - * @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane - * @apiNote JNotepadTabPane.getInstance() - * @see JNotepadTabPane - */ - - public static JNotepadTabPane getJnotepadTabPane() { - return TAB_PANE; - } - - /** - * 获取标签页组件 - * - * @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab - * @apiNote JNotepadTabPane.getInstance().getSelected()
获取当前选中的标签页 - * @see JNotepadTabPane - */ - - public static JNotepadTab getJnotepadtab() { - return TAB_PANE.getSelected(); - } - /** * 获取应用窗口 * @@ -99,37 +39,6 @@ public class UiUtil { * @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.root.bottom.status.JNotepadStatusBox - * @since 2023/8/29 14:14 - */ - public static JNotepadStatusBox getStatusBox() { - return STATUS_BOX; - } - - /** - * 获取菜单栏组件 - * - * @return org.jcnc.jnotepad.ui.root.top.menu.JNotepadMenuBar - * @since 2023/8/29 14:15 - */ - public static JNotepadMenuBar getMenuBar() { - return MENU_BAR; + return LunchApp.getWindow(); } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java index c072569..dbe126f 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java +++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/TextFileChooserFactory.java @@ -13,12 +13,12 @@ import java.io.File; */ public class TextFileChooserFactory implements FileChooserFactory { + private static final TextFileChooserFactory INSTANCE = new TextFileChooserFactory(); + private TextFileChooserFactory() { } - private static final TextFileChooserFactory INSTANCE = new TextFileChooserFactory(); - public static TextFileChooserFactory getInstance() { return INSTANCE; } 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 cfe2d63..fbb47a0 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java @@ -3,10 +3,11 @@ 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.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; import org.slf4j.Logger; import java.io.BufferedWriter; @@ -19,9 +20,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; @@ -59,12 +60,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(); }); @@ -74,7 +75,7 @@ public class LineNumberTextArea extends BorderPane { * 以原文件编码格式写回文件 */ public void save() { - JNotepadTab tab = UiUtil.getJnotepadtab(); + JNotepadTab tab = JNotepadTabPane.getInstance().getSelected(); if (tab == null) { return; } -- Gitee From 730d2492d976c3fb580b0a083613dc802049c17b Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Sat, 2 Sep 2023 00:10:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitee/ISSUE_TEMPLATE/bug.yml | 2 +- .gitee/ISSUE_TEMPLATE/feature.yml | 2 +- .gitee/ISSUE_TEMPLATE/refactor.yml | 2 +- README.md | 28 ++++++++++------- ...00\345\217\221\346\214\207\345\215\227.md" | 31 +++++++++++++++---- pom.xml | 4 +-- tool/package.md | 21 ++++++++++--- 7 files changed, 63 insertions(+), 27 deletions(-) diff --git a/.gitee/ISSUE_TEMPLATE/bug.yml b/.gitee/ISSUE_TEMPLATE/bug.yml index 21556cf..3906921 100644 --- a/.gitee/ISSUE_TEMPLATE/bug.yml +++ b/.gitee/ISSUE_TEMPLATE/bug.yml @@ -1,7 +1,7 @@ name: Bug 反馈 description: 当你在代码中发现了一个 Bug,导致应用崩溃或抛出异常,或者有一个组件存在问题,或者某些地方看起来不对劲。 title: "[Bug]: " -labels: ["bug"] +labels: [ "bug" ] body: - type: markdown attributes: diff --git a/.gitee/ISSUE_TEMPLATE/feature.yml b/.gitee/ISSUE_TEMPLATE/feature.yml index 6291f2f..59bc7a0 100644 --- a/.gitee/ISSUE_TEMPLATE/feature.yml +++ b/.gitee/ISSUE_TEMPLATE/feature.yml @@ -1,7 +1,7 @@ name: 功能建议 description: 对本项目提出一个功能建议 title: "[功能建议]: " -labels: ["feature"] +labels: [ "feature" ] body: - type: markdown attributes: diff --git a/.gitee/ISSUE_TEMPLATE/refactor.yml b/.gitee/ISSUE_TEMPLATE/refactor.yml index 94cff32..c07bd8f 100644 --- a/.gitee/ISSUE_TEMPLATE/refactor.yml +++ b/.gitee/ISSUE_TEMPLATE/refactor.yml @@ -1,7 +1,7 @@ name: 重构 description: 对本项目提出一个功能建议 title: "[重构]: " -labels: ["refactor"] +labels: [ "refactor" ] body: - type: textarea id: related-problem diff --git a/README.md b/README.md index 983c795..c43ae95 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ ![](https://img.shields.io/badge/Ubuntu-Passing-49%2C198%2C84.svg?style=falt&logo=Ubuntu) ![](https://img.shields.io/badge/MacOS-Passing-49%2C198%2C84.svg?style=falt&logo=Apple) +JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨在提供用户友好的界面和丰富的功能。无论你是在Linux、Windows还是macOS系统上使用,JNotepad都能满足你对文本编辑和查看的需求。 +JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。 -JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨在提供用户友好的界面和丰富的功能。无论你是在Linux、Windows还是macOS系统上使用,JNotepad都能满足你对文本编辑和查看的需求。 JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。 ## 功能介绍 - 文本编辑和查看:JNotepad提供了完善的文本编辑和查看功能,使你能够轻松创建、编辑和浏览各种类型的文本文件。 @@ -16,31 +17,32 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨 - 基于Java:JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。 - ## 安装教程 -1. Windows 平台,可以直接使用我编译好的可执行程序或自己编译 +1. Windows 平台,可以直接使用我编译好的可执行程序或自己编译 [gitee-download]: https://gitee.com/jcnc-org/JNotepad/releases -[java-download]: https://www.oracle.com/cn/java/technologies/downloads/ -[qq-url]: http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=zOfwWb1lcle68cbEdJCjSIp3Itx0nEC0&authKey=bOsZFT9OVYZpZQbS6IYO4onBQoeBorF5nanMEi1G%2FgPbzmUkOweXBo9qB0G34R5K&noverify=0&group_code=386279455 +[java-download]: https://www.oracle.com/cn/java/technologies/downloads/ +[qq-url]: http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=zOfwWb1lcle68cbEdJCjSIp3Itx0nEC0&authKey=bOsZFT9OVYZpZQbS6IYO4onBQoeBorF5nanMEi1G%2FgPbzmUkOweXBo9qB0G34R5K&noverify=0&group_code=386279455 - [下载][gitee-download] 2. Linux/MacOS 平台,查看入门指南 - ## 入门指南 要使用 JNotepad,请按照以下步骤进行: 1. 下载并安装 Java(如果尚未安装)。 + - [下载][gitee-download] 2. 克隆或下载 JNotepad 项目。 +
git clone https://gitee.com/jcnc-org/JNotepad.git
+ 3. 在您偏好的 Java IDE 中打开项目。 ## 使用方法 @@ -48,10 +50,12 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨 1. 运行 `JNotepad` 类以启动应用程序。 2. 主窗口将显示菜单栏、标签区域和状态栏。 3. 使用菜单栏执行各种操作: - - `文件 > 新建`:创建一个带有空白文本区域的新标签。 - - `文件 > 打开`:打开现有文本文件进行编辑。 - - `文件 > 保存`:将当前活动标签的内容保存到关联文件中。 - - `文件 > 另存为`:将当前活动标签的内容保存为新文件。 + +- `文件 > 新建`:创建一个带有空白文本区域的新标签。 +- `文件 > 打开`:打开现有文本文件进行编辑。 +- `文件 > 保存`:将当前活动标签的内容保存到关联文件中。 +- `文件 > 另存为`:将当前活动标签的内容保存为新文件。 + 4. 在每个标签的文本区域中编辑内容。 5. 状态栏将显示有关光标位置和文本统计信息的信息。 @@ -64,7 +68,9 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨 17.0.1 - ## 软件运行截图 + +## 软件运行截图 + - Windows 平台 ![Windows](screenshot/windows-1.png) - MacOS 平台 diff --git "a/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md" "b/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md" index db0eecf..ac8389d 100644 --- "a/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md" +++ "b/docs/\345\274\200\345\217\221\346\214\207\345\215\227.md" @@ -1,19 +1,31 @@ # 1. 开发流程 + 基于**AoneFlow**开发流程,具体请阅读:[在阿里,我们如何管理代码分支?](https://developer.aliyun.com/article/573549) + ## 1.1 IDEA IDE版 -### 步骤一 Fork JCNC/JNotepad或同步JCNC/JNotepad到个人仓库 + +### 步骤一 Fork JCNC/JNotepad或同步JCNC/JNotepad到个人仓库 + #### 首次开发,进行Fork操作 + ![输入图片说明](https://foruda.gitee.com/images/1693230738686081312/d1f9178e_341872.png "屏幕截图") + #### 非首次开发,进行同步操作 + ![输入图片说明](https://foruda.gitee.com/images/1693230711005054075/9d8adb17_341872.png "屏幕截图") ### 步骤二 clone个人仓库或fetch + #### 首次开发,clone个人仓库 + ![输入图片说明](https://foruda.gitee.com/images/1693230809903750175/da0d73b5_341872.png "屏幕截图") + #### 非首次开发,执行fetch + ![输入图片说明](https://foruda.gitee.com/images/1693231554501661630/308a9783_341872.png "屏幕截图") ### 步骤三 从remote下的master分支创建本地开发分支。 + **特殊情况:开发依赖release分支已提交内容,或是对已提交内容进行修改,那么需要从release分支上进行拉取。** ![输入图片说明](https://foruda.gitee.com/images/1693231016998001511/7a6a6f3d_341872.png "屏幕截图") ![输入图片说明](https://foruda.gitee.com/images/1693231347247142683/17ff5fd4_341872.png "屏幕截图") @@ -23,12 +35,15 @@ ### 步骤四 推送本地分支到远程 ### 步骤五 发起Pull Request(PR) + ![输入图片说明](https://foruda.gitee.com/images/1693232191273920333/65665291_341872.png "屏幕截图") **注意:目标分支选择预期要发布的release分支** ## 1.2 GIT命令行版本 + 步骤一、步骤二、步骤五同1.1操作 + ```shell # 步骤三 git fetch @@ -38,24 +53,28 @@ git push origin feature-demo ``` ## 1.3 分支命名规则 -|issue类别|分支名格式|示例| -|--------|--------|----| -|功能/优化/文档修改|feature-issue编号|feature-I7W9LX| -|bug fix| fix-issue编号| fix-I7W9LX| -|代码重构|refactor-issue编号|refactor-I7W9LX| + +| issue类别 | 分支名格式 | 示例 | +|------------|------------------|-----------------| +| 功能/优化/文档修改 | feature-issue编号 | feature-I7W9LX | +| bug fix | fix-issue编号 | fix-I7W9LX | +| 代码重构 | refactor-issue编号 | refactor-I7W9LX | # 2. IDEA插件配置 + * 安装Resource Bundle插件 ![输入图片说明](https://foruda.gitee.com/images/1693125995274955090/9efa2d4c_341872.png "屏幕截图") * 安装成功后,打开i18n.properties,可以看到Resource Bundle tab ![输入图片说明](https://foruda.gitee.com/images/1693126057242554469/10667419_341872.png "屏幕截图") # Q&A + Q: 本地开发时,主仓库合并了新代码,如何处理? A: 继续完成本地开发,发起PR时再解决冲突。 Q: 解决冲突步骤是什么? A: 一般按如下步骤。 + 1. 先同步主仓库 2. 本地仓库进行fetch 3. 本地开发分支merge/pull/rebase更新的release分支 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 48e1b7e..83da650 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/tool/package.md b/tool/package.md index ddba997..112b99c 100644 --- a/tool/package.md +++ b/tool/package.md @@ -1,30 +1,41 @@ # 打包 + ## 准备 + 1. 下载maven 3.8.8, [Download](https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.zip) 2. 下载GraalVM。在[GraalVM下载页](https://www.graalvm.org/downloads/#)选择Java17,操作系统后,点击Download下载。 # Windows下基于GraalVM的打包 + ## 配置maven和GraalVM + 1. 将下载的压缩包解压到目录,例如:d:\tools\maven,D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1 2. 配置环境变量 + ``` GRAALVM_HOME=D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1 M2_HOME=d:\tools\maven ``` + ![env.png](images%2Fenv.png) + 3. 配置PATH环境变量 -![path.png](images%2Fpath.png) + ![path.png](images%2Fpath.png) 4. 安装visual studio build tools -安装说明:https://www.graalvm.org/latest/docs/getting-started/windows/ -a) 下载安装程序:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16 -b) 参考网页中的安装步骤 + 安装说明:https://www.graalvm.org/latest/docs/getting-started/windows/ + a) 下载安装程序:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16 + b) 参考网页中的安装步骤 5. 验证安装成功 -使用下面命令启动编译环境 + 使用下面命令启动编译环境 + ``` cmd.exe /k F:\vs\ide\VC\Auxiliary\Build\vcvars64.bat ``` + 需要把F:\vs\ide替换为本地的visual stuido安装路径。 + 6. 进入项目tool目录,执行build.bat进行打包,生成可执行文件。 + ``` build.bat ``` \ No newline at end of file -- Gitee