增加文件树与文本框区域滑动大小功能

修改文件树显示与隐藏逻辑
修改错误代码注释
This commit is contained in:
cccqy 2023-10-03 05:46:46 +08:00
parent 8a3404b5d7
commit 50941aedd8
9 changed files with 91 additions and 61 deletions

View File

@ -17,9 +17,11 @@ import org.jcnc.jnotepad.views.manager.DirectorySidebarManager;
import java.io.File; import java.io.File;
/** /**
* @author : cccqyu * 打开文件夹處理器
* @createTime 2023/10/2 1:29 *
* @description 当用户选择打开文件夹时将创建一个左侧树型结构目录 * <p>当用户选择打开文件夹时将创建一个左侧树型结构目录</p>
*
* @author cccqyu
*/ */
public class OpenDirectory implements EventHandler<ActionEvent> { public class OpenDirectory implements EventHandler<ActionEvent> {

View File

@ -4,10 +4,13 @@ import javafx.event.ActionEvent;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import org.jcnc.jnotepad.views.manager.DirectorySidebarManager; import org.jcnc.jnotepad.views.manager.DirectorySidebarManager;
/** /**
* @author : cccqyu * 文件树按钮
* @createTime 2023/10/2 17:24 *
* @description 文件树按钮事件的事件处理程序 * <p>文件树按钮事件的事件处理程序</p>
*
* @author cccqyu
*/ */
public class DirTreeBtn implements EventHandler<ActionEvent> { public class DirTreeBtn implements EventHandler<ActionEvent> {

View File

@ -2,10 +2,13 @@ package org.jcnc.jnotepad.model.entity;
import java.util.List; import java.util.List;
/** /**
* @author : cccqyu * 文件夹实体类
* @createTime 2023/10/2 20:31 *
* @description 文件夹实体类 * <p>用于存储文件夹结构</p>
*
* @author cccqyu
*/ */
public class DirFileModel { public class DirFileModel {
private String path; private String path;
@ -22,11 +25,7 @@ public class DirFileModel {
public List<DirFileModel> getChildFile() { public List<DirFileModel> getChildFile() {
return childFile; return childFile;
} }
public void setChildFile(List<DirFileModel> childFile) {
this.childFile = childFile;
}
public String getPath() { public String getPath() {
return path; return path;
} }

View File

@ -4,10 +4,13 @@ import javafx.stage.DirectoryChooser;
import java.io.File; import java.io.File;
/** /**
* @author : cccqyu * 文件夹选择对话框工厂
* @createTime 2023/10/2 1:49 *
* @description 文件夹选择对话框工厂,该工厂接口用于创建文件夹选择对话框包括原始和详细两种类型 * <p>文件夹选择对话框工厂,该工厂接口用于创建文件夹选择对话框包括原始和详细两种类型</p>
*
* @author cccqyu
*/ */
public interface DirectoryChooserFactory { public interface DirectoryChooserFactory {
/** /**

View File

@ -6,9 +6,11 @@ import org.jcnc.jnotepad.ui.dialog.factory.DirectoryChooserFactory;
import java.io.File; import java.io.File;
/** /**
* @author : cccqyu@outlook.com * 文件夹选择对话框
* @createTime 2023/10/2 1:54 *
* @description 基本文件夹选择对话框 * <p>基本文件夹选择对话框的封装</p>
*
* @author cccqyu
*/ */
public class BasicDirectoryChooserFactory implements DirectoryChooserFactory { public class BasicDirectoryChooserFactory implements DirectoryChooserFactory {

View File

@ -1,5 +1,6 @@
package org.jcnc.jnotepad.views.manager; package org.jcnc.jnotepad.views.manager;
import javafx.scene.control.SplitPane;
import javafx.scene.control.TreeItem; import javafx.scene.control.TreeItem;
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
import org.jcnc.jnotepad.common.util.FileUtil; import org.jcnc.jnotepad.common.util.FileUtil;
@ -12,9 +13,11 @@ import java.io.File;
import java.util.List; import java.util.List;
/** /**
* @author : cccqyu * 文件树管理类
* @createTime 2023/10/2 20:33 *
* @description 文件树管理类 * <p>管理文件树处理文件树操作</p>
*
* @author cccqyu
*/ */
public class DirectorySidebarManager { public class DirectorySidebarManager {
@ -37,20 +40,31 @@ public class DirectorySidebarManager {
private static final DirectorySidebarPane DIRECTORY_SIDEBAR_PANE = DirectorySidebarPane.getInstance(); private static final DirectorySidebarPane DIRECTORY_SIDEBAR_PANE = DirectorySidebarPane.getInstance();
private static final double lastDividerPosition = 0.3;
/** /**
* 控制文件树显示 * 控制文件树显示
*/ */
public void controlShow() { public void controlShow() {
boolean isVisible = DIRECTORY_SIDEBAR_PANE.isVisible(); // 获取分割面板
// 设置自身显示 SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter();
DIRECTORY_SIDEBAR_PANE.setVisible(!isVisible); // 获取分割条位置
if (isVisible) { double dividerPosition = center.getDividerPositions()[0];
// 布局中移除 // 保留分割条位置一位小数
MAIN_BORDER_PANE.setLeft(null); String formattedNumber = String.format("%.1f", dividerPosition);
} else { double roundedNumber = Double.parseDouble(formattedNumber);
MAIN_BORDER_PANE.setLeft(DIRECTORY_SIDEBAR_PANE);
}
// 分割条位置不等于 代表展开
if (roundedNumber != 0.0) {
// 收缩分割条 收缩文件树
center.setDividerPositions(0.0);
} else {
// 展开分割条文件树
center.setDividerPositions(lastDividerPosition);
}
} }
/** /**
@ -59,12 +73,11 @@ public class DirectorySidebarManager {
* @param bool 打开 * @param bool 打开
*/ */
public void controlShow(boolean bool) { public void controlShow(boolean bool) {
// 设置自身显示 if (bool) {
DIRECTORY_SIDEBAR_PANE.setVisible(bool); // 获取分割面板
if (!MAIN_BORDER_PANE.getChildren().contains(DIRECTORY_SIDEBAR_PANE)) { SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter();
MAIN_BORDER_PANE.setLeft(DIRECTORY_SIDEBAR_PANE); center.setDividerPositions(lastDividerPosition);
} }
} }
/** /**

View File

@ -1,6 +1,8 @@
package org.jcnc.jnotepad.views.manager; 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.MainBorderPane;
import org.jcnc.jnotepad.views.root.center.main.center.directory.DirectorySidebarPane;
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; 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 MainBorderPaneManager INSTANCE = new MainBorderPaneManager();
private static final MainBorderPane MAIN_BORDER_PANE = MainBorderPane.getInstance(); 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() { private MainBorderPaneManager() {
} }
@ -22,7 +27,13 @@ public class MainBorderPaneManager {
} }
public void initMainBorderPane() { 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);
} }
} }

View File

@ -1,9 +1,7 @@
package org.jcnc.jnotepad.views.root.center.main.center.directory; package org.jcnc.jnotepad.views.root.center.main.center.directory;
import javafx.event.EventHandler;
import javafx.scene.control.TreeItem; import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView; import javafx.scene.control.TreeView;
import javafx.scene.input.MouseEvent;
import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile;
import org.jcnc.jnotepad.model.entity.DirFileModel; import org.jcnc.jnotepad.model.entity.DirFileModel;
@ -12,31 +10,28 @@ import java.util.Objects;
/** /**
* @author : cccqyu * 目录树ui
* @createTime 2023/10/2 20:34 *
* @description TreeView封装 * <p>TreeView封装</p>
*
* @author cccqyu
*/ */
public class DirectorySidebarPane extends TreeView<DirFileModel> { public class DirectorySidebarPane extends TreeView<DirFileModel> {
private static final DirectorySidebarPane INSTANCE = new DirectorySidebarPane(); private static final DirectorySidebarPane INSTANCE = new DirectorySidebarPane();
private DirectorySidebarPane() { private DirectorySidebarPane() {
this.setVisible(false); this.setOnMouseClicked(mouseEvent -> {
if (mouseEvent.getClickCount() == 2) {
this.setOnMouseClicked(new EventHandler<MouseEvent>() { TreeItem<DirFileModel> item = DirectorySidebarPane.this.getSelectionModel().getSelectedItem();
@Override if (Objects.isNull(item)) return;
public void handle(MouseEvent mouseEvent) { File file = new File(item.getValue().getPath());
if (mouseEvent.getClickCount() == 2) {
TreeItem<DirFileModel> 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);
if (!file.isFile()) {
return;
} }
OpenFile.openFile(file);
} }
}); });
} }

View File

@ -5,9 +5,11 @@ import javafx.scene.layout.VBox;
import org.jcnc.jnotepad.ui.module.AbstractVerticalBox; import org.jcnc.jnotepad.ui.module.AbstractVerticalBox;
/** /**
* @author : cccqyu * 垂直布局类
* @createTime 2023/10/2 20:40 *
* @description 垂直布局 * <p>用于toolbar的垂直布局</p>
*
* @author cccqyu
*/ */
public class ToolVerticalBox extends AbstractVerticalBox { public class ToolVerticalBox extends AbstractVerticalBox {
/** /**