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 fb8c1f1820d4b167fac11af7a63e43865e4be2a0..6b4eb98351ded4a249a05d6810aa71c7f582ff05 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 { diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/setting/DirTreeBtn.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/setting/DirTreeBtn.java index 335a3a5ef6966bf98a0ad79065db9b6f0bd15362..82436b7032718f2d0dbe7c1fe25039574b673dc9 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/setting/DirTreeBtn.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/setting/DirTreeBtn.java @@ -4,10 +4,13 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import org.jcnc.jnotepad.views.manager.DirectorySidebarManager; + /** - * @author : cccqyu - * @createTime 2023/10/2 17:24 - * @description 文件树按钮事件的事件处理程序。 + * 文件树按钮 + * + *

文件树按钮事件的事件处理程序。

+ * + * @author cccqyu */ public class DirTreeBtn implements EventHandler { diff --git a/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java b/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java index e67c6bf4c938ebce36b5714118933e0acf95a6f7..9dd30e0d92f9f679662f0cc143984cd5a9ff7d5f 100644 --- a/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java +++ b/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java @@ -2,10 +2,13 @@ package org.jcnc.jnotepad.model.entity; import java.util.List; + /** - * @author : cccqyu - * @createTime 2023/10/2 20:31 - * @description 文件夹实体类 + * 文件夹实体类 + * + *

用于存储文件夹结构

+ * + * @author cccqyu */ public class DirFileModel { private String path; @@ -22,11 +25,7 @@ public class DirFileModel { public List getChildFile() { return childFile; } - - public void setChildFile(List childFile) { - this.childFile = childFile; - } - + public String getPath() { return path; } diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/DirectoryChooserFactory.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/DirectoryChooserFactory.java index dbe4005c15fdea49ee8106f8d57b2d8c5f76f119..a90dec7d4118499d628def123d391efbe5a3b617 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/DirectoryChooserFactory.java +++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/factory/DirectoryChooserFactory.java @@ -4,10 +4,13 @@ import javafx.stage.DirectoryChooser; import java.io.File; + /** - * @author : cccqyu - * @createTime 2023/10/2 1:49 - * @description 文件夹选择对话框工厂,该工厂接口用于创建文件夹选择对话框,包括原始和详细两种类型。 + * 文件夹选择对话框工厂 + * + *

文件夹选择对话框工厂,该工厂接口用于创建文件夹选择对话框,包括原始和详细两种类型。

+ * + * @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 20fb5745819ad26f8ed92bf5adb3c05d4a04b38a..acf4298ed2e127ed9d7eec779d947afc8145a6f6 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 3dc35b515d2048a3be1a5f6f90a95a6d0b755a61..50da325b72ef564fd2a08abde2ad64d7463b2adc 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); + // 获取分割面板 + 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 { - MAIN_BORDER_PANE.setLeft(DIRECTORY_SIDEBAR_PANE); - } + // 展开分割条,文件树 + 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 a527423605f7664edb1fa1e7f4fde8e56dba1a86..bf0e08c5b11c36a7b9d14e2c551db36a88a588a2 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 823951ccb7d3307d53e79bc5910c1139bd636da2..6ac1d0bc1edf3298d3346aec7991e4d44a9971aa 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 { private static final DirectorySidebarPane INSTANCE = new DirectorySidebarPane(); private DirectorySidebarPane() { - this.setVisible(false); - - this.setOnMouseClicked(new EventHandler() { - @Override - public void handle(MouseEvent mouseEvent) { - if (mouseEvent.getClickCount() == 2) { - TreeItem item = DirectorySidebarPane.this.getSelectionModel().getSelectedItem(); - if (Objects.isNull(item)) return; - File file = new File(item.getValue().getPath()); - - if(!file.isFile()){ - return; - } - new OpenFile().openFile(file); - + this.setOnMouseClicked(mouseEvent -> { + if (mouseEvent.getClickCount() == 2) { + TreeItem item = DirectorySidebarPane.this.getSelectionModel().getSelectedItem(); + if (Objects.isNull(item)) return; + File file = new File(item.getValue().getPath()); + + if (!file.isFile()) { + return; } + OpenFile.openFile(file); + } }); } diff --git a/src/main/java/org/jcnc/jnotepad/views/root/left/sidebar/tools/ToolVerticalBox.java b/src/main/java/org/jcnc/jnotepad/views/root/left/sidebar/tools/ToolVerticalBox.java index 7caf9155a4fc83427c64302f80ea63cfa77a3a18..8f2f74cf305a884d4bacf33e51105a03c404647d 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/left/sidebar/tools/ToolVerticalBox.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/left/sidebar/tools/ToolVerticalBox.java @@ -5,9 +5,11 @@ import javafx.scene.layout.VBox; import org.jcnc.jnotepad.ui.module.AbstractVerticalBox; /** - * @author : cccqyu - * @createTime 2023/10/2 20:40 - * @description 垂直布局 + * 垂直布局类 + * + *

用于toolbar的垂直布局

+ * + * @author cccqyu */ public class ToolVerticalBox extends AbstractVerticalBox { /**