diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java index fb8c1f1..6b4eb98 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java @@ -17,9 +17,11 @@ import org.jcnc.jnotepad.views.manager.DirectorySidebarManager; import java.io.File; /** - * @author : cccqyu - * @createTime 2023/10/2 1:29 - * @description 当用户选择打开文件夹时,将创建一个左侧树型结构目录。 + * 打开文件夹處理器 + * + *
当用户选择打开文件夹时,将创建一个左侧树型结构目录。
+ * + * @author cccqyu */ public class OpenDirectory implements EventHandler文件树按钮事件的事件处理程序。
+ * + * @author cccqyu */ public class DirTreeBtn implements EventHandler用于存储文件夹结构
+ * + * @author cccqyu */ public class DirFileModel { private String path; @@ -22,11 +25,7 @@ public class DirFileModel { public List文件夹选择对话框工厂,该工厂接口用于创建文件夹选择对话框,包括原始和详细两种类型。
+ * + * @author cccqyu */ public interface DirectoryChooserFactory { /** diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/BasicDirectoryChooserFactory.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/BasicDirectoryChooserFactory.java index 20fb574..acf4298 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/BasicDirectoryChooserFactory.java +++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/impl/BasicDirectoryChooserFactory.java @@ -6,9 +6,11 @@ import org.jcnc.jnotepad.ui.dialog.factory.DirectoryChooserFactory; import java.io.File; /** - * @author : cccqyu@outlook.com - * @createTime 2023/10/2 1:54 - * @description 基本文件夹选择对话框 + * 文件夹选择对话框 + * + *基本文件夹选择对话框的封装
+ * + * @author cccqyu */ public class BasicDirectoryChooserFactory implements DirectoryChooserFactory { 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 3dc35b5..50da325 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java @@ -1,5 +1,6 @@ package org.jcnc.jnotepad.views.manager; +import javafx.scene.control.SplitPane; import javafx.scene.control.TreeItem; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.util.FileUtil; @@ -12,9 +13,11 @@ import java.io.File; import java.util.List; /** - * @author : cccqyu - * @createTime 2023/10/2 20:33 - * @description 文件树管理类 + * 文件树管理类 + * + *管理文件树,处理文件树操作
+ * + * @author cccqyu */ public class DirectorySidebarManager { @@ -37,20 +40,31 @@ public class DirectorySidebarManager { private static final DirectorySidebarPane DIRECTORY_SIDEBAR_PANE = DirectorySidebarPane.getInstance(); + + private static final double lastDividerPosition = 0.3; + /** * 控制文件树显示 */ public void controlShow() { - boolean isVisible = DIRECTORY_SIDEBAR_PANE.isVisible(); - // 设置自身显示 - DIRECTORY_SIDEBAR_PANE.setVisible(!isVisible); - if (isVisible) { - // 布局中移除 - MAIN_BORDER_PANE.setLeft(null); - } else { - MAIN_BORDER_PANE.setLeft(DIRECTORY_SIDEBAR_PANE); - } + // 获取分割面板 + SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter(); + // 获取分割条位置 + double dividerPosition = center.getDividerPositions()[0]; + // 保留分割条位置一位小数 + String formattedNumber = String.format("%.1f", dividerPosition); + double roundedNumber = Double.parseDouble(formattedNumber); + // 分割条位置不等于 代表展开 + if (roundedNumber != 0.0) { + // 收缩分割条 收缩文件树 + center.setDividerPositions(0.0); + + } else { + // 展开分割条,文件树 + center.setDividerPositions(lastDividerPosition); + + } } /** @@ -59,12 +73,11 @@ public class DirectorySidebarManager { * @param bool 打开 */ public void controlShow(boolean bool) { - // 设置自身显示 - DIRECTORY_SIDEBAR_PANE.setVisible(bool); - if (!MAIN_BORDER_PANE.getChildren().contains(DIRECTORY_SIDEBAR_PANE)) { - MAIN_BORDER_PANE.setLeft(DIRECTORY_SIDEBAR_PANE); + if (bool) { + // 获取分割面板 + SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter(); + center.setDividerPositions(lastDividerPosition); } - } /** 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 a527423..bf0e08c 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,8 @@ package org.jcnc.jnotepad.views.manager; +import javafx.scene.control.SplitPane; 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; /** @@ -12,7 +14,10 @@ public class MainBorderPaneManager { private static final MainBorderPaneManager INSTANCE = new MainBorderPaneManager(); private static final MainBorderPane MAIN_BORDER_PANE = MainBorderPane.getInstance(); + private static final DirectorySidebarPane DIRECTORY_SIDEBAR_PANE = DirectorySidebarPane.getInstance(); + // 默认分割条位置 + private static final double defaultDividerPositions = 0.3; private MainBorderPaneManager() { } @@ -22,7 +27,13 @@ public class MainBorderPaneManager { } public void initMainBorderPane() { - // 文本框 - MAIN_BORDER_PANE.setCenterComponent(CenterTabPane.getInstance()); + // 文件树和文本框的布局 + SplitPane splitPane = new SplitPane(); + splitPane.getItems().add(0, DIRECTORY_SIDEBAR_PANE); + splitPane.getItems().add(1, CenterTabPane.getInstance()); + splitPane.setDividerPositions(defaultDividerPositions); + + // 将文件树以及文本框设置在布局中部 + MAIN_BORDER_PANE.setCenterComponent(splitPane); } } diff --git a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java index 823951c..6ac1d0b 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java @@ -1,9 +1,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.directory; -import javafx.event.EventHandler; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; -import javafx.scene.input.MouseEvent; import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; import org.jcnc.jnotepad.model.entity.DirFileModel; @@ -12,31 +10,28 @@ import java.util.Objects; /** - * @author : cccqyu - * @createTime 2023/10/2 20:34 - * @description TreeView封装 + * 目录树ui + * + *TreeView封装
+ * + * @author cccqyu */ public class DirectorySidebarPane extends TreeView用于toolbar的垂直布局
+ * + * @author cccqyu */ public class ToolVerticalBox extends AbstractVerticalBox { /**