增加注释

This commit is contained in:
许轲 2023-08-14 13:12:18 +08:00
parent 929ae12fbf
commit d680623993

View File

@ -6,19 +6,30 @@ import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Tab;
import javafx.scene.control.TextArea;
import javafx.stage.FileChooser;
import org.jcnc.jnotepad.Interface.ControllerInterface;
import org.jcnc.jnotepad.LunchApp;
import org.jcnc.jnotepad.controller.event.handler.*;
import org.jcnc.jnotepad.controller.event.handler.LineFeed;
import org.jcnc.jnotepad.controller.event.handler.NewFile;
import org.jcnc.jnotepad.controller.event.handler.OpenFile;
import org.jcnc.jnotepad.controller.event.handler.SaveAsFile;
import org.jcnc.jnotepad.tool.EncodingDetector;
import org.jcnc.jnotepad.view.manager.ViewManager;
import java.io.*;
import java.util.List;
import static org.jcnc.jnotepad.view.manager.ViewManager.*;
import static org.jcnc.jnotepad.tool.EncodingDetector.detectEncoding;
/**
* 控制器类实现ControllerInterface接口用于管理文本编辑器的各种操作和事件处理
* 包括打开关联文件创建文本区域处理行分隔新建文件打开文件自动保存等功能
*/
public class Controller implements ControllerInterface {
/**
* 打开关联文件并创建文本区域
*
* @param rawParameters 原始参数列表
* @return 创建的文本区域
*/
@Override
public TextArea openAssociatedFileAndCreateTextArea(List<String> rawParameters) {
if (!rawParameters.isEmpty()) {
@ -32,25 +43,47 @@ public class Controller implements ControllerInterface {
return textArea;
}
/**
* 获取行分隔事件处理程序
*
* @param textArea 文本区域
* @return 行分隔事件处理程序
*/
@Override
public EventHandler<ActionEvent> getLineFeedEventHandler(TextArea textArea) {
return new LineFeed(textArea);
}
/**
* 获取新建文件事件处理程序
*
* @param textArea 文本区域
* @return 新建文件事件处理程序
*/
@Override
public EventHandler<ActionEvent> getNewFileEventHandler(TextArea textArea) {
return new NewFile();
}
/**
* 获取打开文件事件处理程序
*
* @return 打开文件事件处理程序
*/
@Override
public EventHandler<ActionEvent> getOpenFileEventHandler() {
return new OpenFile();
}
/**
* 自动保存文本内容
*
* @param textArea 文本区域
*/
@Override
public void autoSave(TextArea textArea) {
textArea.textProperty().addListener((observable, oldValue, newValue) -> {
Tab tab = tabPane.getSelectionModel().getSelectedItem();
Tab tab = ViewManager.tabPane.getSelectionModel().getSelectedItem();
if (tab != null) {
File file = (File) tab.getUserData();
if (file != null) {
@ -64,20 +97,35 @@ public class Controller implements ControllerInterface {
});
}
/**
* 获取另存为文件事件处理程序
*
* @return 另存为文件事件处理程序
*/
@Override
public EventHandler<ActionEvent> getSaveAsFileEventHandler() {
return new SaveAsFile();
}
/**
* 更新状态标签
*
* @param textArea 文本区域
*/
@Override
public void updateStatusLabel(TextArea textArea) {
int caretPosition = textArea.getCaretPosition();
int row = getRow(caretPosition, textArea.getText());
int column = getColumn(caretPosition, textArea.getText());
int length = textArea.getLength();
statusLabel.setText("行: " + row + " \t列: " + column + " \t字数: " + length);
ViewManager.statusLabel.setText("行: " + row + " \t列: " + column + " \t字数: " + length);
}
/**
* 打开关联文件
*
* @param filePath 文件路径
*/
@Override
public void openAssociatedFile(String filePath) {
File file = new File(filePath);
@ -87,6 +135,11 @@ public class Controller implements ControllerInterface {
}
}
/**
* 读取文本文件的内容
*
* @param file 文件对象
*/
@Override
public void getText(File file) {
TextArea textArea = createNewTextArea();
@ -102,8 +155,8 @@ public class Controller implements ControllerInterface {
textArea.setText(text);
Tab tab = createNewTab(file.getName(), textArea);
tabPane.getTabs().add(tab);
tabPane.getSelectionModel().select(tab);
ViewManager.tabPane.getTabs().add(tab);
ViewManager.tabPane.getSelectionModel().select(tab);
updateStatusLabel(textArea);
autoSave(textArea);
@ -113,12 +166,24 @@ public class Controller implements ControllerInterface {
}
}
/**
* 更新编码标签
*
* @param text 文本内容
*/
@Override
public void upDateEncodingLabel(String text) {
String encoding = detectEncoding(text);
enCodingLabel.setText("\t编码: " + encoding);
String encoding = EncodingDetector.detectEncoding(text);
ViewManager.enCodingLabel.setText("\t编码: " + encoding);
}
/**
* 获取光标所在行号
*
* @param caretPosition 光标位置
* @param text 文本内容
* @return 光标所在行号
*/
@Override
public int getRow(int caretPosition, String text) {
caretPosition = Math.min(caretPosition, text.length());
@ -132,16 +197,26 @@ public class Controller implements ControllerInterface {
return count + 1;
}
/**
* 获取光标所在列号
*
* @param caretPosition 光标位置
* @param text 文本内容
* @return 光标所在列号
*/
@Override
public int getColumn(int caretPosition, String text) {
return caretPosition - text.lastIndexOf("\n", caretPosition - 1);
}
/**
* 初始化标签面板
*/
@Override
public void initTabPane() {
Controller controller = new Controller();
tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> {
ViewManager.tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> {
if (newTab != null) {
// 获取新选定的标签页并关联的文本区域
TextArea textArea = (TextArea) newTab.getContent();
@ -158,7 +233,11 @@ public class Controller implements ControllerInterface {
});
}
/**
* 配置文本区域
*
* @param textArea 文本区域
*/
private void configureTextArea(TextArea textArea) {
textArea.setWrapText(true);
upDateEncodingLabel(textArea.getText());
@ -169,10 +248,22 @@ public class Controller implements ControllerInterface {
autoSave(textArea);
}
/**
* 创建新的文本区域
*
* @return 新的文本区域
*/
private TextArea createNewTextArea() {
return new TextArea();
}
/**
* 创建新的标签页
*
* @param tabName 标签名
* @param textArea 文本区域
* @return 新的标签页
*/
private Tab createNewTab(String tabName, TextArea textArea) {
Tab tab = new Tab(tabName);
tab.setContent(textArea);
@ -180,6 +271,12 @@ public class Controller implements ControllerInterface {
return tab;
}
/**
* 创建打开文件的任务
*
* @param file 文件对象
* @return 打开文件的任务
*/
private Task<Void> createOpenFileTask(File file) {
TextArea textArea = createNewTextArea();
return new Task<>() {
@ -192,6 +289,11 @@ public class Controller implements ControllerInterface {
};
}
/**
* 打开文件
*
* @param file 文件对象
*/
private void openFile(File file) {
Task<Void> openFileTask = createOpenFileTask(file);
Thread thread = new Thread(openFileTask);