commit
c52f2b44f5
@ -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> {
|
||||||
|
|
||||||
|
|||||||
@ -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> {
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user