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

修改文件树显示与隐藏逻辑
修改错误代码注释
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;
/**
* @author : cccqyu
* @createTime 2023/10/2 1:29
* @description 当用户选择打开文件夹时将创建一个左侧树型结构目录
* 打开文件夹處理器
*
* <p>当用户选择打开文件夹时将创建一个左侧树型结构目录</p>
*
* @author cccqyu
*/
public class OpenDirectory implements EventHandler<ActionEvent> {

View File

@ -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 文件树按钮事件的事件处理程序
* 文件树按钮
*
* <p>文件树按钮事件的事件处理程序</p>
*
* @author cccqyu
*/
public class DirTreeBtn implements EventHandler<ActionEvent> {

View File

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

View File

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

View File

@ -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 基本文件夹选择对话框
* 文件夹选择对话框
*
* <p>基本文件夹选择对话框的封装</p>
*
* @author cccqyu
*/
public class BasicDirectoryChooserFactory implements DirectoryChooserFactory {

View File

@ -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 文件树管理类
* 文件树管理类
*
* <p>管理文件树处理文件树操作</p>
*
* @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);
}
}
/**

View File

@ -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);
}
}

View File

@ -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,20 +10,18 @@ import java.util.Objects;
/**
* @author : cccqyu
* @createTime 2023/10/2 20:34
* @description TreeView封装
* 目录树ui
*
* <p>TreeView封装</p>
*
* @author cccqyu
*/
public class DirectorySidebarPane extends TreeView<DirFileModel> {
private static final DirectorySidebarPane INSTANCE = new DirectorySidebarPane();
private DirectorySidebarPane() {
this.setVisible(false);
this.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
this.setOnMouseClicked(mouseEvent -> {
if (mouseEvent.getClickCount() == 2) {
TreeItem<DirFileModel> item = DirectorySidebarPane.this.getSelectionModel().getSelectedItem();
if (Objects.isNull(item)) return;
@ -34,10 +30,9 @@ public class DirectorySidebarPane extends TreeView<DirFileModel> {
if (!file.isFile()) {
return;
}
new OpenFile().openFile(file);
OpenFile.openFile(file);
}
}
});
}

View File

@ -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 垂直布局
* 垂直布局类
*
* <p>用于toolbar的垂直布局</p>
*
* @author cccqyu
*/
public class ToolVerticalBox extends AbstractVerticalBox {
/**