diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index c0fec9e524fafc1587ea10de8379a17e8fcd1f34..8cefcaad530ff3909332959730a9fec1e4e939bd 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -47,5 +47,6 @@ module org.jcnc.jnotepad { exports org.jcnc.jnotepad.component.module.hbox; exports org.jcnc.jnotepad.component.stage.topmenu.help; exports org.jcnc.jnotepad.component.stage.topmenu.plugin; + exports org.jcnc.jnotepad.component.module.vbox.components; } \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/common/constants/SplitPaneItemConstants.java b/src/main/java/org/jcnc/jnotepad/common/constants/SplitPaneItemConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..abb36efb75c9ee2bb50becd939d8fa2e7b24f6d1 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/common/constants/SplitPaneItemConstants.java @@ -0,0 +1,25 @@ +package org.jcnc.jnotepad.common.constants; + +/** + * SplitPane常量类 + * * + *
用于记录SplitPane中子组件的索引
+ * + * @author cccqyu + */ +public class SplitPaneItemConstants { + + // rootSplitPane + + // 上部 + public static final int ROOT_SPLIT_PANE_TOP_SPLIT_PANE = 0; + // 底部 + public static final int ROOT_SPLIT_PANE_CMDBox = 1; + + // rootSplitPane中的上部面板 + // 左侧 + public static final int TOP_SPLIT_PANE_DIRECTORY_SIDEBAR_PANE = 0; + // 右侧 + public static final int TOP_SPLIT_PANE_CENTER_TAB_PANE = 1; + +} diff --git a/src/main/java/org/jcnc/jnotepad/component/module/vbox/BuildPanel.java b/src/main/java/org/jcnc/jnotepad/component/module/vbox/BuildPanel.java new file mode 100644 index 0000000000000000000000000000000000000000..11702466d968ded851ec6795fe1c0f0fdd81d737 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/component/module/vbox/BuildPanel.java @@ -0,0 +1,58 @@ +package org.jcnc.jnotepad.component.module.vbox; + +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; +import org.jcnc.jnotepad.component.module.vbox.components.DebugBox; +import org.jcnc.jnotepad.component.module.vbox.components.CmdTerminalBox; +import org.jcnc.jnotepad.component.module.vbox.components.RunBox; + +/** + * 底部Run,Debug,Cmd面板 + * + * + * @author cccqyu + */ +public class BuildPanel extends TabPane { + + private static BuildPanel instance = null; + + public static BuildPanel getInstance() { + + if (instance == null) { + instance = new BuildPanel(); + } + return instance; + } + + private final CmdTerminalBox cmdTerminalBox; + private final RunBox runBox; + private final DebugBox debugBox; + + private BuildPanel() { + cmdTerminalBox = new CmdTerminalBox(); + runBox = new RunBox(); + debugBox = new DebugBox(); + + Tab runTab = new Tab("运行",runBox); + runTab.setClosable(false); + + Tab buildTab = new Tab("构建", debugBox); + buildTab.setClosable(false); + + Tab cmdTab = new Tab("控制台",cmdTerminalBox); + cmdTab.setClosable(false); + this.getTabs().addAll(runTab,buildTab,cmdTab); + } + + public CmdTerminalBox getCmdTerminalBox() { + return cmdTerminalBox; + } + + public RunBox getRunBox() { + return runBox; + } + + public DebugBox getBuildBox() { + return debugBox; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/component/module/vbox/CmdTerminalBox.java b/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/CmdTerminalBox.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/component/module/vbox/CmdTerminalBox.java rename to src/main/java/org/jcnc/jnotepad/component/module/vbox/components/CmdTerminalBox.java index fe1f1dd756657d2563a17c1cee3f093c283ce108..3d7951adff16651e0765c118fe03ba00bf5fd18c 100644 --- a/src/main/java/org/jcnc/jnotepad/component/module/vbox/CmdTerminalBox.java +++ b/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/CmdTerminalBox.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.component.module.vbox; +package org.jcnc.jnotepad.component.module.vbox.components; import javafx.animation.KeyFrame; import javafx.animation.Timeline; diff --git a/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/DebugBox.java b/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/DebugBox.java new file mode 100644 index 0000000000000000000000000000000000000000..f6d59e5459013e65f363a61780398abc08b80940 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/DebugBox.java @@ -0,0 +1,20 @@ +package org.jcnc.jnotepad.component.module.vbox.components; + +import org.jcnc.jnotepad.component.module.TextCodeArea; + +/** + * Debug终端界面。 + * + * + * @author cccqyu + */ +public class DebugBox extends TextCodeArea { + public DebugBox() { + super(); + this.setEditable(false); + } + + public void setText(String text) { + this.appendText(text); + } +} diff --git a/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/RunBox.java b/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/RunBox.java new file mode 100644 index 0000000000000000000000000000000000000000..a35cea1f4f733128f817b213c8416ab171e02f10 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/component/module/vbox/components/RunBox.java @@ -0,0 +1,23 @@ +package org.jcnc.jnotepad.component.module.vbox.components; + +import org.jcnc.jnotepad.component.module.TextCodeArea; + +/** + * Run终端界面。 + * + * + * @author cccqyu + */ +public class RunBox extends TextCodeArea { + + + public RunBox() { + super(); + this.setEditable(false); + } + + public void setText(String text) { + this.appendText(text); + } + +} diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/toolbar/RunBtn.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/toolbar/RunBtn.java index 3c917cc1f766d49fd2c58ebca0733d5c21d50dfa..2548596cdd9e35175d590bf15d867b3dc2f6d0df 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/toolbar/RunBtn.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/toolbar/RunBtn.java @@ -3,15 +3,20 @@ package org.jcnc.jnotepad.controller.event.handler.toolbar; import javafx.event.ActionEvent; import javafx.event.EventHandler; +import org.jcnc.jnotepad.views.manager.BuildPanelManager; /** - * @author luke + * 终端处理器 + * + * + * @author cccqyu */ public class RunBtn implements EventHandler管理构建三大菜单操作
+ * + * @author cccqyu + */ +public class BuildPanelManager { + + private BuildPanelManager() { + } + + /** + * 单例模式,保证只有一个 BuildPanelManager 实例 + */ + private static final BuildPanelManager INSTANCE = new BuildPanelManager(); + + + public static BuildPanelManager getInstance() { + return INSTANCE; + } + + + private static final MainBorderPane MAIN_BORDER_PANE = MainBorderPane.getInstance(); + private static boolean isShow = false; + + /** + * 控制终端显示 + */ + public void controlShow() { + + // 获取root分割面板 + SplitPane root = (SplitPane) MAIN_BORDER_PANE.getCenter(); + + if (isShow) { + root.setDividerPositions(1); + } else { + // 展开分割条,文件树 + root.setDividerPositions(0.7); + } + isShow = !isShow; + } + + public void controlShow(boolean bool) { + + // 获取root分割面板 + SplitPane root = (SplitPane) MAIN_BORDER_PANE.getCenter(); + + if (!bool) { + root.setDividerPositions(1); + } else { + // 展开分割条,文件树 + root.setDividerPositions(0.7); + } + isShow = !isShow; + } + + public void setText(TextCodeArea textCodeArea, String text) { + textCodeArea.appendText(text); + } + +} diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java index dc93ca024f65b61f639bc9d192b9958bce2bff92..ac8473bc5c20947a153ee868727be6d3dcf79227 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java @@ -3,6 +3,7 @@ package org.jcnc.jnotepad.views.manager; import javafx.beans.value.ChangeListener; import javafx.scene.control.SplitPane; import javafx.scene.control.TreeItem; +import org.jcnc.jnotepad.common.constants.SplitPaneItemConstants; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.controller.event.handler.toolbar.OpenDirectory; import org.jcnc.jnotepad.model.entity.DirFileModel; @@ -44,26 +45,25 @@ public class DirectorySidebarManager { private static final double LAST_DIVIDER_POSITION = 0.3; + private static boolean isShow = false; + /** * 控制文件树显示 */ public void controlShow() { - // 获取分割面板 - SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter(); - // 获取分割条位置 - double dividerPosition = center.getDividerPositions()[0]; - // 保留分割条位置一位小数 - String formattedNumber = String.format("%.1f", dividerPosition); - double roundedNumber = Double.parseDouble(formattedNumber); - - // 分割条位置不等于 代表展开 - if (Double.compare(roundedNumber, 0.0) != 0) { - // 收缩分割条 收缩文件树 - center.setDividerPositions(0.0); + // 获取root分割面板 + SplitPane root = (SplitPane) MAIN_BORDER_PANE.getCenter(); + + // 获取root的上部分割面板 + SplitPane topSplitPane = (SplitPane) root.getItems().get(SplitPaneItemConstants.ROOT_SPLIT_PANE_TOP_SPLIT_PANE); + + if (isShow) { + topSplitPane.setDividerPositions(0); } else { // 展开分割条,文件树 - center.setDividerPositions(LAST_DIVIDER_POSITION); + topSplitPane.setDividerPositions(LAST_DIVIDER_POSITION); } + isShow = !isShow; } /** @@ -74,10 +74,13 @@ public class DirectorySidebarManager { public void controlShow(boolean bool) { if (bool) { // 获取分割面板 - SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter(); - center.setDividerPositions(LAST_DIVIDER_POSITION); - } + SplitPane root = (SplitPane) MAIN_BORDER_PANE.getCenter(); + // 获取root的上部分割面板 + SplitPane topSplitPane = (SplitPane) root.getItems().get(SplitPaneItemConstants.ROOT_SPLIT_PANE_TOP_SPLIT_PANE); + topSplitPane.setDividerPositions(LAST_DIVIDER_POSITION); + isShow = true; + } } /** diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/MainBorderPaneManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/MainBorderPaneManager.java index bf0e08c5b11c36a7b9d14e2c551db36a88a588a2..449888baa1cd6898cfa67f97f47c71deecbcf661 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/MainBorderPaneManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/MainBorderPaneManager.java @@ -1,6 +1,9 @@ package org.jcnc.jnotepad.views.manager; +import javafx.geometry.Orientation; import javafx.scene.control.SplitPane; +import org.jcnc.jnotepad.common.constants.SplitPaneItemConstants; +import org.jcnc.jnotepad.component.module.vbox.BuildPanel; import org.jcnc.jnotepad.views.root.center.main.MainBorderPane; import org.jcnc.jnotepad.views.root.center.main.center.directory.DirectorySidebarPane; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; @@ -17,7 +20,8 @@ public class MainBorderPaneManager { private static final DirectorySidebarPane DIRECTORY_SIDEBAR_PANE = DirectorySidebarPane.getInstance(); // 默认分割条位置 - private static final double defaultDividerPositions = 0.3; + private static final double TOP_SPLIT_PANEL_DEFAULT_DIVIDER_POSITIONS = 0.3; + private MainBorderPaneManager() { } @@ -27,13 +31,30 @@ public class MainBorderPaneManager { } public void initMainBorderPane() { + // 总分割面板 + SplitPane rootSplitPane = new SplitPane(); + // 设置上下布局 + rootSplitPane.setOrientation(Orientation.VERTICAL); + rootSplitPane.setDividerPositions(1); + + + // 上部面板 // 文件树和文本框的布局 - SplitPane splitPane = new SplitPane(); - splitPane.getItems().add(0, DIRECTORY_SIDEBAR_PANE); - splitPane.getItems().add(1, CenterTabPane.getInstance()); - splitPane.setDividerPositions(defaultDividerPositions); + SplitPane topSplitPane = new SplitPane(); + topSplitPane.getItems().add(SplitPaneItemConstants.TOP_SPLIT_PANE_DIRECTORY_SIDEBAR_PANE, DIRECTORY_SIDEBAR_PANE); + topSplitPane.getItems().add(SplitPaneItemConstants.TOP_SPLIT_PANE_CENTER_TAB_PANE, CenterTabPane.getInstance()); + topSplitPane.setDividerPositions(TOP_SPLIT_PANEL_DEFAULT_DIVIDER_POSITIONS); + + // 下部 + // 构建三大菜单 + BuildPanel buildPanel = BuildPanel.getInstance(); + + rootSplitPane.getItems().add(SplitPaneItemConstants.ROOT_SPLIT_PANE_TOP_SPLIT_PANE, topSplitPane); + rootSplitPane.getItems().add(SplitPaneItemConstants.ROOT_SPLIT_PANE_CMDBox, buildPanel); + + // 将总分割面板设置在布局中部 + MAIN_BORDER_PANE.setCenterComponent(rootSplitPane); + - // 将文件树以及文本框设置在布局中部 - MAIN_BORDER_PANE.setCenterComponent(splitPane); } } diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java index 90a508c49e68353fcf20662858bf836c0d0caadd..010c100b795fae11d65f38670403749a5de85677 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java @@ -54,10 +54,13 @@ public class SidebarToolBarManager extends AbstractManager