♻️ 重构代码 优化 文件选择对话框的创建逻辑

This commit is contained in:
gewuyou 2023-08-31 22:09:53 +08:00
parent 3aec1f93cd
commit 03c2363b1e
7 changed files with 191 additions and 68 deletions

View File

@ -12,6 +12,8 @@ public class TextConstants {
/// GlobalConfig文本常量
public static final String SAVE = "SAVE";
public static final String FILE = "FILE";
public static final String NEW = "NEW";

View File

@ -5,11 +5,15 @@ import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.FileChooser;
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
import org.jcnc.jnotepad.constants.TextConstants;
import org.jcnc.jnotepad.manager.ThreadPoolManager;
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
import org.jcnc.jnotepad.tool.EncodingDetector;
import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
import java.io.BufferedReader;
@ -36,10 +40,14 @@ public class OpenFile implements EventHandler<ActionEvent> {
*/
@Override
public void handle(ActionEvent event) {
// 创建文件选择器
FileChooser fileChooser = new FileChooser();
FileChooserFactory factory = new TextFileChooserFactory();
// 显示文件选择对话框并获取选中的文件
File file = fileChooser.showOpenDialog(UiUtil.getAppWindow());
File file = factory.createFileChooser(
UiResourceBundle.getContent(TextConstants.OPEN),
null,
null,
new FileChooser.ExtensionFilter("All types", "*.*"))
.showOpenDialog(UiUtil.getAppWindow());
if (file != null) {
openFile(file);
}

View File

@ -5,9 +5,13 @@ import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.stage.FileChooser;
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
import org.jcnc.jnotepad.constants.TextConstants;
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
import org.slf4j.Logger;
import java.io.File;
@ -29,34 +33,22 @@ public class RenameFile implements EventHandler<ActionEvent> {
}
// 判断当前是否为关联文件
if (jnotepadtab.isRelevance()) {
// 创建一个文件窗口
FileChooser fileChooser = new FileChooser();
// 设置窗口名称
fileChooser.setTitle("重命名");
// 设置原始文件名称
fileChooser.setInitialFileName(jnotepadtab.getText());
// 获取原始文件对象
File file = (File) jnotepadtab.getUserData();
// 设置打开的目录
fileChooser.setInitialDirectory(new File(file.getParent()));
// 设置文件类型
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("文本文档", "*.txt"));
// 获取应用窗口并绑定
File newFile = fileChooser.showSaveDialog(UiUtil.getAppWindow());
if (newFile != null) {
boolean rename = file.renameTo(newFile);
// 设置文件数据
jnotepadtab.setUserData(newFile);
if (rename) {
jnotepadtab.setText(newFile.getName());
logger.info("文件重命名成功");
} else {
logger.debug("文件重命名失败");
}
}
// 重命名关联文件
handleRenameRelevanceFile(jnotepadtab);
}
// 如果当前不是关联文件则重命名标签页
else {
handleRenameTab(jnotepadtab);
}
}
/**
* 重命名标签页
*
* @param jnotepadtab 标签页组件
* @since 2023/8/31 21:48
*/
private void handleRenameTab(JNotepadTab jnotepadtab) {
TextField textField = new TextField(jnotepadtab.getText());
textField.getStyleClass().add("tab-title-editable");
// 清空标签页名称
@ -87,7 +79,37 @@ public class RenameFile implements EventHandler<ActionEvent> {
// 默认获取焦点并选中所有文字
textField.requestFocus();
textField.selectAll();
}
/**
* 重命名关联文件
*
* @param jnotepadtab 标签页组件
* @since 2023/8/31 21:47
*/
private void handleRenameRelevanceFile(JNotepadTab jnotepadtab) {
// 创建文件选择器对话框工厂选择文本文件对话框工厂
FileChooserFactory factory = new TextFileChooserFactory();
// 获取原始文件对象
File file = (File) jnotepadtab.getUserData();
// 获取应用窗口并绑定
File newFile = factory
.createFileChooser(
UiResourceBundle.getContent(TextConstants.RENAME),
jnotepadtab.getText(),
new File(file.getParent()),
new FileChooser.ExtensionFilter("All types", "*.*"))
.showSaveDialog(UiUtil.getAppWindow());
if (newFile != null) {
boolean rename = file.renameTo(newFile);
// 设置文件数据
jnotepadtab.setUserData(newFile);
if (rename) {
jnotepadtab.setText(newFile.getName());
logger.info("文件重命名成功");
} else {
logger.debug("文件重命名失败");
}
}
}
}

View File

@ -3,11 +3,15 @@ package org.jcnc.jnotepad.controller.event.handler.menuBar;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.FileChooser;
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
import org.jcnc.jnotepad.constants.TextConstants;
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.tool.SingletonUtil;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
import org.slf4j.Logger;
import java.io.File;
@ -63,16 +67,15 @@ public class SaveFile implements EventHandler<ActionEvent> {
* @see LogUtil
*/
protected void saveTab(Class<?> currentClass) {
FileChooserFactory factory = new TextFileChooserFactory();
JNotepadTab selectedTab = UiUtil.getJnotepadtab();
if (selectedTab != null) {
// 创建一个文件窗口
FileChooser fileChooser = new FileChooser();
// 设置保存文件名称
fileChooser.setInitialFileName(selectedTab.getText());
// 设置保存文件类型
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("文本文档", "*.txt"));
// 获取应用窗口并绑定
File file = fileChooser.showSaveDialog(UiUtil.getAppWindow());
File file = factory.createFileChooser(
UiResourceBundle.getContent(TextConstants.SAVE_AS),
selectedTab.getText(),
null,
new FileChooser.ExtensionFilter("All types", "*.*"))
.showSaveDialog(UiUtil.getAppWindow());
if (file != null) {
LogUtil.getLogger(currentClass).info("正在保存文件:{}", file.getName());
selectedTab.save(file);

View File

@ -1,7 +1,7 @@
package org.jcnc.jnotepad.root.center.main.center.tab;
import javafx.scene.control.Tab;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.tool.SingletonUtil;
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
import java.io.File;
@ -38,7 +38,7 @@ public class JNotepadTab extends Tab {
super(tabTitle);
lineNumberTextArea = textArea;
this.setContent(lineNumberTextArea);
setAutoLine(AppConfigController.getInstance().getAutoLineConfig());
setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig());
this.charset = charset;
}

View File

@ -0,0 +1,33 @@
package org.jcnc.jnotepad.ui.dialog.factory;
import javafx.stage.FileChooser;
import java.io.File;
/**
* 文件选择对话框工厂
*
* @author gewuyou
*/
public interface FileChooserFactory {
/**
* 创建原始文件选择对话框
*
* @return javafx.stage.FileChooser
* @since 2023/8/31 20:29
*/
FileChooser createFileChooser();
/**
* 创建详细的文件选择对话框
*
* @param title 对话框名字
* @param filename 选中的文件名
* @param directory 初始目录
* @param extensionFilter 文件类型数组
* @return javafx.stage.FileChooser
* @apiNote
* @since 2023/8/31 20:35
*/
FileChooser createFileChooser(String title, String filename, File directory, FileChooser.ExtensionFilter extensionFilter);
}

View File

@ -0,0 +1,55 @@
package org.jcnc.jnotepad.ui.dialog.factory.impl;
import javafx.stage.FileChooser;
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
import java.io.File;
/**
* 文本文件选择对话框
*
* @author gewuyou
* @see FileChooserFactory
*/
public class TextFileChooserFactory implements FileChooserFactory {
/**
* 创建原始文件选择对话框
*
* @return javafx.stage.FileChooser
* @since 2023/8/31 20:29
*/
@Override
public FileChooser createFileChooser() {
return new FileChooser();
}
/**
* 创建详细的文件选择对话框
*
* @param title 对话框名字
* @param filename 选中的文件名
* @param directory 初始目录
* @param extensionFilter 文件类型数组
* @return javafx.stage.FileChooser
* @apiNote
* @since 2023/8/31 20:35
*/
@Override
public FileChooser createFileChooser(String title, String filename, File directory, FileChooser.ExtensionFilter extensionFilter) {
FileChooser fileChooser = createFileChooser();
// 设置窗口名称
fileChooser.setTitle(title);
if (filename != null) {
// 设置原始文件名称
fileChooser.setInitialFileName(filename);
}
if (directory != null) {
// 设置打开的目录
fileChooser.setInitialDirectory(directory);
}
// 设置文件类型
fileChooser.getExtensionFilters().add(extensionFilter);
return fileChooser;
}
}