From 69922ea84661354f6bc3968fbf36c6a9e4e0efc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E8=BD=B2?= Date: Wed, 30 Aug 2023 04:12:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E7=BD=AE=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/module-info.java | 9 ++--- .../jnotepad/Interface/BorderPaneAble.java | 19 ++++++++++ ...llerInterface.java => ControllerAble.java} | 2 +- .../org/jcnc/jnotepad/Interface/HBoxAble.java | 12 +++++++ .../org/jcnc/jnotepad/Interface/VBoxAble.java | 13 +++++++ .../controller/event/handler/NewFile.java | 4 +-- .../controller/event/handler/OpenFile.java | 4 +-- .../controller/event/handler/RenameFile.java | 2 +- .../controller/event/handler/SaveFile.java | 2 +- .../controller/manager/Controller.java | 4 +-- .../java/org/jcnc/jnotepad/tool/UiUtil.java | 18 +++++----- .../ui/module/AbstractBorderPane.java | 34 ++++++++++++++++++ .../jcnc/jnotepad/ui/module/AbstractHBox.java | 28 +++++++++++++++ .../jcnc/jnotepad/ui/module/AbstractVBox.java | 29 +++++++++++++++ .../ui/{ => module}/LineNumberTextArea.java | 8 ++--- .../bottom}/status/JNotepadStatusBox.java | 10 +++--- .../ui/{ => root/center}/tab/JNotepadTab.java | 4 +-- .../center}/tab/JNotepadTabPane.java | 2 +- .../jnotepad/ui/root/top/RootTopVBox.java | 21 +++++++++++ .../{ => root/top}/menu/JNotepadMenuBar.java | 8 ++--- .../ui/root/top/tools/JNotepadToolBar.java | 33 +++++++++++++++++ .../ui/root/top/tools/ToolBorderPane.java | 19 ++++++++++ .../jnotepad/ui/root/top/tools/ToolHBox.java | 23 ++++++++++++ .../jnotepad/view/manager/ViewManager.java | 9 ++--- src/main/resources/tools.gif | Bin 0 -> 6824 bytes src/main/resources/tools.png | Bin 0 -> 1126 bytes 26 files changed, 275 insertions(+), 42 deletions(-) create mode 100644 src/main/java/org/jcnc/jnotepad/Interface/BorderPaneAble.java rename src/main/java/org/jcnc/jnotepad/Interface/{ControllerInterface.java => ControllerAble.java} (92%) create mode 100644 src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java create mode 100644 src/main/java/org/jcnc/jnotepad/Interface/VBoxAble.java create mode 100644 src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java create mode 100644 src/main/java/org/jcnc/jnotepad/ui/module/AbstractHBox.java create mode 100644 src/main/java/org/jcnc/jnotepad/ui/module/AbstractVBox.java rename src/main/java/org/jcnc/jnotepad/ui/{ => module}/LineNumberTextArea.java (95%) rename src/main/java/org/jcnc/jnotepad/ui/{ => root/bottom}/status/JNotepadStatusBox.java (94%) rename src/main/java/org/jcnc/jnotepad/ui/{ => root/center}/tab/JNotepadTab.java (94%) rename src/main/java/org/jcnc/jnotepad/ui/{ => root/center}/tab/JNotepadTabPane.java (97%) create mode 100644 src/main/java/org/jcnc/jnotepad/ui/root/top/RootTopVBox.java rename src/main/java/org/jcnc/jnotepad/ui/{ => root/top}/menu/JNotepadMenuBar.java (97%) create mode 100644 src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java create mode 100644 src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolBorderPane.java create mode 100644 src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java create mode 100644 src/main/resources/tools.gif create mode 100644 src/main/resources/tools.png diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index fc04115..78fba9b 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -20,10 +20,11 @@ module org.jcnc.jnotepad { exports org.jcnc.jnotepad.controller.manager; exports org.jcnc.jnotepad.view.manager; 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; + exports org.jcnc.jnotepad.ui.root.center.tab; + exports org.jcnc.jnotepad.ui.root.bottom.status; + exports org.jcnc.jnotepad.ui.root.top.menu; opens org.jcnc.jnotepad.app.config; + exports org.jcnc.jnotepad.ui.module; + exports org.jcnc.jnotepad.ui.root.top.tools; } \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/Interface/BorderPaneAble.java b/src/main/java/org/jcnc/jnotepad/Interface/BorderPaneAble.java new file mode 100644 index 0000000..2e0162b --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/Interface/BorderPaneAble.java @@ -0,0 +1,19 @@ +package org.jcnc.jnotepad.Interface; + +import javafx.scene.Node; + + +public interface BorderPaneAble { + + void setTopComponent(Node node); + + void setBottomComponent(Node node); + + void setLeftComponent(Node node); + + void setRightComponent(Node node); + + void setCenterComponent(Node node); + + +} diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java b/src/main/java/org/jcnc/jnotepad/Interface/ControllerAble.java similarity index 92% rename from src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java rename to src/main/java/org/jcnc/jnotepad/Interface/ControllerAble.java index 004d939..af551b8 100644 --- a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java +++ b/src/main/java/org/jcnc/jnotepad/Interface/ControllerAble.java @@ -7,7 +7,7 @@ import java.util.List; * * @author 许轲 */ -public interface ControllerInterface { +public interface ControllerAble { /** * 打开关联文件并创建 TextArea diff --git a/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java b/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java new file mode 100644 index 0000000..8bdf62b --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/Interface/HBoxAble.java @@ -0,0 +1,12 @@ +package org.jcnc.jnotepad.Interface; + +import javafx.scene.Node; +import javafx.scene.layout.HBox; + +public interface HBoxAble { + + void addChild(Node node); + + void addChild(Node... nodes); + HBox getHBox(); +} diff --git a/src/main/java/org/jcnc/jnotepad/Interface/VBoxAble.java b/src/main/java/org/jcnc/jnotepad/Interface/VBoxAble.java new file mode 100644 index 0000000..0d94912 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/Interface/VBoxAble.java @@ -0,0 +1,13 @@ +package org.jcnc.jnotepad.Interface; + +import javafx.scene.Node; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; + +public interface VBoxAble { + void addChild(Node node); + + void addChild(Node... nodes); + + VBox getVBox(); +} 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 e0cee15..66cacca 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 @@ -5,8 +5,8 @@ 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.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.module.LineNumberTextArea; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import org.jcnc.jnotepad.view.manager.ViewManager; 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 68343e8..cad3294 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 @@ -9,8 +9,8 @@ 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.module.LineNumberTextArea; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import java.io.BufferedReader; import java.io.File; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/RenameFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/RenameFile.java index 0658ae7..68a0ea6 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/RenameFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/RenameFile.java @@ -7,7 +7,7 @@ import javafx.scene.input.KeyCode; import javafx.stage.FileChooser; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.UiUtil; -import org.jcnc.jnotepad.ui.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import org.slf4j.Logger; import java.io.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 8f464de..62f77c9 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 @@ -7,7 +7,7 @@ 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.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import org.slf4j.Logger; import java.io.File; diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java index f1ff88f..332cf5d 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -1,6 +1,6 @@ package org.jcnc.jnotepad.controller.manager; -import org.jcnc.jnotepad.Interface.ControllerInterface; +import org.jcnc.jnotepad.Interface.ControllerAble; import org.jcnc.jnotepad.controller.event.handler.NewFile; import org.jcnc.jnotepad.controller.event.handler.OpenFile; @@ -13,7 +13,7 @@ import java.util.List; * * @author 许轲 */ -public class Controller implements ControllerInterface { +public class Controller implements ControllerAble { private static final Controller INSTANCE = new Controller(); diff --git a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java index 9f2c3e9..41f15fd 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java +++ b/src/main/java/org/jcnc/jnotepad/tool/UiUtil.java @@ -1,10 +1,10 @@ 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.ui.root.top.menu.JNotepadMenuBar; +import org.jcnc.jnotepad.ui.root.bottom.status.JNotepadStatusBox; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; import org.jcnc.jnotepad.view.manager.ViewManager; /** @@ -32,12 +32,12 @@ public class UiUtil { /** * 菜单栏组件 */ - private static final JNotepadMenuBar MENU_BAR = JNotepadMenuBar.getMenuBar(); + private static final JNotepadMenuBar MENU_BAR = JNotepadMenuBar.getInstance(); /** * 获取标签页布局组件 * - * @return org.jcnc.jnotepad.ui.tab.JNotepadTabPane + * @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane * @apiNote JNotepadTabPane.getInstance() * @see JNotepadTabPane */ @@ -49,7 +49,7 @@ public class UiUtil { /** * 获取标签页组件 * - * @return org.jcnc.jnotepad.ui.tab.JNotepadTab + * @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab * @apiNote JNotepadTabPane.getInstance().getSelected()
获取当前选中的标签页 * @see JNotepadTabPane */ @@ -83,7 +83,7 @@ public class UiUtil { /** * 获取状态栏组件 * - * @return org.jcnc.jnotepad.ui.status.JNotepadStatusBox + * @return org.jcnc.jnotepad.ui.root.bottom.status.JNotepadStatusBox * @since 2023/8/29 14:14 */ public static JNotepadStatusBox getStatusBox() { @@ -93,7 +93,7 @@ public class UiUtil { /** * 获取菜单栏组件 * - * @return org.jcnc.jnotepad.ui.menu.JNotepadMenuBar + * @return org.jcnc.jnotepad.ui.root.top.menu.JNotepadMenuBar * @since 2023/8/29 14:15 */ public static JNotepadMenuBar getMenuBar() { diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java new file mode 100644 index 0000000..8ceef05 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractBorderPane.java @@ -0,0 +1,34 @@ +package org.jcnc.jnotepad.ui.module; + +import javafx.scene.Node; +import javafx.scene.layout.BorderPane; +import org.jcnc.jnotepad.Interface.BorderPaneAble; + +public abstract class AbstractBorderPane extends BorderPane implements BorderPaneAble { + + @Override + public void setTopComponent(Node node) { + setTop(node); + } + + @Override + public void setBottomComponent(Node node) { + setBottom(node); + } + + @Override + public void setLeftComponent(Node node) { + setLeft(node); + } + + @Override + public void setRightComponent(Node node) { + setRight(node); + } + + @Override + public void setCenterComponent(Node node) { + setCenter(node); + } + +} diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractHBox.java b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractHBox.java new file mode 100644 index 0000000..189ee44 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractHBox.java @@ -0,0 +1,28 @@ +package org.jcnc.jnotepad.ui.module; + +import javafx.scene.Node; +import javafx.scene.layout.HBox; +import org.jcnc.jnotepad.Interface.HBoxAble; + +public abstract class AbstractHBox extends HBox implements HBoxAble { + private final HBox hBox; + + public AbstractHBox() { + hBox = new HBox(); + } + + @Override + public void addChild(Node node) { + hBox.getChildren().add(node); + } + + @Override + public void addChild(Node... nodes) { + hBox.getChildren().addAll(nodes); + } + + @Override + public HBox getHBox() { + return hBox; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/AbstractVBox.java b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractVBox.java new file mode 100644 index 0000000..71341e1 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/module/AbstractVBox.java @@ -0,0 +1,29 @@ +package org.jcnc.jnotepad.ui.module; + +import javafx.scene.Node; +import javafx.scene.layout.VBox; +import org.jcnc.jnotepad.Interface.VBoxAble; + +public abstract class AbstractVBox extends VBox implements VBoxAble { + + private final VBox vBox; + + public AbstractVBox() { + vBox = new VBox(); + } + + @Override + public void addChild(Node node) { + vBox.getChildren().add(node); + } + + @Override + public void addChild(Node... nodes) { + vBox.getChildren().addAll(nodes); + } + + @Override + public VBox getVBox() { + return vBox; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java similarity index 95% rename from src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java rename to src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java index be20b93..b64c6b8 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java @@ -1,13 +1,13 @@ -package org.jcnc.jnotepad.ui; +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.controller.config.AppConfigController; import org.jcnc.jnotepad.tool.LogUtil; -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.ui.root.bottom.status.JNotepadStatusBox; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; import java.io.BufferedWriter; import java.io.File; diff --git a/src/main/java/org/jcnc/jnotepad/ui/status/JNotepadStatusBox.java b/src/main/java/org/jcnc/jnotepad/ui/root/bottom/status/JNotepadStatusBox.java similarity index 94% rename from src/main/java/org/jcnc/jnotepad/ui/status/JNotepadStatusBox.java rename to src/main/java/org/jcnc/jnotepad/ui/root/bottom/status/JNotepadStatusBox.java index e1bba2b..ef0c0cd 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/status/JNotepadStatusBox.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/bottom/status/JNotepadStatusBox.java @@ -1,13 +1,13 @@ -package org.jcnc.jnotepad.ui.status; +package org.jcnc.jnotepad.ui.root.bottom.status; import javafx.geometry.Insets; import javafx.scene.control.Label; import javafx.scene.control.TextArea; -import javafx.scene.layout.HBox; import org.jcnc.jnotepad.app.i18n.UIResourceBundle; import org.jcnc.jnotepad.constants.TextConstants; -import org.jcnc.jnotepad.ui.tab.JNotepadTab; -import org.jcnc.jnotepad.ui.tab.JNotepadTabPane; +import org.jcnc.jnotepad.ui.module.AbstractHBox; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; import java.nio.charset.Charset; @@ -18,7 +18,7 @@ import java.nio.charset.Charset; * * @author songdragon */ -public class JNotepadStatusBox extends HBox { +public class JNotepadStatusBox extends AbstractHBox { private static final JNotepadStatusBox STATUS_BOX = new JNotepadStatusBox(); /** diff --git a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTab.java b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java similarity index 94% rename from src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTab.java rename to src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java index 1747960..711e315 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTab.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java @@ -1,8 +1,8 @@ -package org.jcnc.jnotepad.ui.tab; +package org.jcnc.jnotepad.ui.root.center.tab; import javafx.scene.control.Tab; import org.jcnc.jnotepad.controller.config.AppConfigController; -import org.jcnc.jnotepad.ui.LineNumberTextArea; +import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import java.nio.charset.Charset; diff --git a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTabPane.java similarity index 97% rename from src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java rename to src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTabPane.java index c149d70..c922108 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTabPane.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.ui.tab; +package org.jcnc.jnotepad.ui.root.center.tab; import javafx.scene.control.TabPane; import org.jcnc.jnotepad.controller.config.AppConfigController; diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/RootTopVBox.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/RootTopVBox.java new file mode 100644 index 0000000..bda4622 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/RootTopVBox.java @@ -0,0 +1,21 @@ +package org.jcnc.jnotepad.ui.root.top; + +import javafx.scene.layout.VBox; +import org.jcnc.jnotepad.ui.root.top.menu.JNotepadMenuBar; +import org.jcnc.jnotepad.ui.root.top.tools.ToolBorderPane; +import org.jcnc.jnotepad.ui.root.top.tools.ToolHBox; + +public class RootTopVBox extends VBox { + private static final RootTopVBox INSTANCE = new RootTopVBox(); + + private RootTopVBox() { + // 在构造函数中初始化 + getChildren().add(JNotepadMenuBar.getInstance()); + getChildren().add(ToolBorderPane.getInstance()); + } + + public static RootTopVBox getInstance() { + return INSTANCE; + } + +} diff --git a/src/main/java/org/jcnc/jnotepad/ui/menu/JNotepadMenuBar.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java similarity index 97% rename from src/main/java/org/jcnc/jnotepad/ui/menu/JNotepadMenuBar.java rename to src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java index faf0077..999dea3 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/menu/JNotepadMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.ui.menu; +package org.jcnc.jnotepad.ui.root.top.menu; import javafx.event.ActionEvent; import javafx.scene.control.*; @@ -10,8 +10,8 @@ import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.event.handler.*; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.tool.LogUtil; -import org.jcnc.jnotepad.ui.tab.JNotepadTab; -import org.jcnc.jnotepad.ui.tab.JNotepadTabPane; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; import org.slf4j.Logger; import java.util.*; @@ -264,7 +264,7 @@ public class JNotepadMenuBar extends MenuBar { pluginMenu.getItems().addAll(addItem, countItem); } - public static JNotepadMenuBar getMenuBar() { + public static JNotepadMenuBar getInstance() { return MENU_BAR; } diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java new file mode 100644 index 0000000..40bb0c1 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java @@ -0,0 +1,33 @@ +package org.jcnc.jnotepad.ui.root.top.tools; + +import javafx.scene.control.Button; +import javafx.scene.control.ToolBar; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.Priority; + +import static javafx.scene.layout.HBox.setHgrow; + +public class JNotepadToolBar extends ToolBar { + private static final JNotepadToolBar INSTANCE = new JNotepadToolBar(); + private JNotepadToolBar() { + // 创建工具栏上的按钮 + Image image = new Image("tools.png"); // 替换为你的图片文件路径 + ImageView imageView = new ImageView(image); + imageView.setFitWidth(10); + imageView.setFitHeight(10); + imageView.setScaleX(2.5); // 设置水平缩放比例 + imageView.setScaleY(2.5); // 设置垂直缩放比例 + // 设置缩放比例 + Button setButton = new Button(); + setButton.setGraphic(imageView); + + // 将按钮添加到工具栏 + getItems().addAll(setButton); + + } + + public static JNotepadToolBar getInstance() { + return INSTANCE; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolBorderPane.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolBorderPane.java new file mode 100644 index 0000000..71a902c --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolBorderPane.java @@ -0,0 +1,19 @@ +package org.jcnc.jnotepad.ui.root.top.tools; + +import org.jcnc.jnotepad.ui.module.AbstractBorderPane; +import org.jcnc.jnotepad.ui.root.top.menu.JNotepadMenuBar; + +public class ToolBorderPane extends AbstractBorderPane { + + private static final ToolBorderPane ToolBorderPane = new ToolBorderPane(); + + public ToolBorderPane() { + + setRightComponent(ToolHBox.getInstance()); + + } + + public static ToolBorderPane getInstance() { + return ToolBorderPane; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java new file mode 100644 index 0000000..ecb462c --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java @@ -0,0 +1,23 @@ +package org.jcnc.jnotepad.ui.root.top.tools; + +import javafx.geometry.Pos; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; + +public class ToolHBox extends HBox { + private static final ToolHBox INSTANCE = new ToolHBox(); + + + private ToolHBox() { + setHgrow(this, Priority.ALWAYS); + + HBox.setHgrow(JNotepadToolBar.getInstance(), Priority.ALWAYS); // 设置子节点水平拉伸 + + getChildren().add(JNotepadToolBar.getInstance()); + } + + public static ToolHBox getInstance() { + return INSTANCE; + } + +} diff --git a/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java b/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java index 111769a..7a16a3c 100644 --- a/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java +++ b/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java @@ -3,9 +3,9 @@ package org.jcnc.jnotepad.view.manager; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; import org.jcnc.jnotepad.exception.AppException; -import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar; -import org.jcnc.jnotepad.ui.status.JNotepadStatusBox; -import org.jcnc.jnotepad.ui.tab.JNotepadTabPane; +import org.jcnc.jnotepad.ui.root.top.RootTopVBox; +import org.jcnc.jnotepad.ui.root.bottom.status.JNotepadStatusBox; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; /** @@ -78,7 +78,8 @@ public class ViewManager { // 创建主界面布局 root = new BorderPane(); - root.setTop(JNotepadMenuBar.getMenuBar()); + + root.setTop(RootTopVBox.getInstance()); // 创建标签页和文本编辑区域 root.setCenter(JNotepadTabPane.getInstance()); diff --git a/src/main/resources/tools.gif b/src/main/resources/tools.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e7d8afc3d84e303f48654ab003e1451b919090e GIT binary patch literal 6824 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 G*!>$pyR`=Z literal 0 HcmV?d00001 diff --git a/src/main/resources/tools.png b/src/main/resources/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..063840dbdf50d8fcac1932938df17abc66042910 GIT binary patch literal 1126 zcmV-s1eyDZP)ZYu$MZMBRi?D@%KxI3jLZp3J^gBxn zYEx^;tPH|J^JQhNlD4H8k-kL{ChhxSM2jeB*H7x9_Ts=9_&D4dXXed&7`zV-4CmZ? z=bU@bocrB7KpAC}ktEIo$N|Xvh}gQZfRPJu-jhFA0H}26R)%oilNBMyOdN{=i~^Vg z&;uYvwr+B;&(XJ^>|LZ!0l1`Nj_5mz0vR}KW^zgcnIPR?0Gk~BH=DlW+IPz6v&9I) z<-DKV3K-{h$T6}>2H|o(1K_RE%>d|~Czr)`1;DK7`y0R=O(Rb?kwg$K=g+9ELQ|y; zKr4XS2;pV(9Doip<`%L~`b=8vRXAv7o}HJf)JXPDvUM5< zd4^}rN*pHJ1tb8THK{gU&U4y41+dig^9uml_8Hl~(l@c&tY&PiH1uGGO65&6^Va$K z0`P*ErZ(4AU#IV4+9AFaOo@Bx1zc@hv|$^7m()g{w>sKw@tL5jg;4RF4?U=)57*N_ zcJ%KHs5~x`_k`>nRKkbiQgQpjjmADk_5;S&8lrseGJOt_O*T%(Cc|R$Q3G&+Ina7z zdrr2y09L6ClU_bvM!nf<;`kJ)F;|}@#`cSBY0{@jFVupuglykS9YD3QeF+hOv|&`2 zI)FE1uO}zEO#zU!S*$fX0+o!W{`_CvvacyKD0IWkqtk7I_?Uc+kMJ_ukQV^dRms?Y;XkGcBrZVzBqg3~FiNZRns^O2JG8u1|(D$VT5 zy^SBz%I96x$yIGKW~a6oFsl^%-gJZpnhSBQQmZK;o82oaqpy@{9-~s}hchN%ySXKL zvDHWyTl3xbFzU40wCNZXKF%j{#prjnIPFM{tGbK&p-S7>RC{agf)aB+Cs3(=5@UbwjrO=|$w2?m2_eCk3=O9M3GT0v+=OX;z5PIMtrGdzp_lxO#v41gD sU;*I2`N6h~_hrbN~PV07*qoM6N<$g3?46VgLXD literal 0 HcmV?d00001