From d6806239936659441056d8f27d87b5a4f6a5ded1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E8=BD=B2?= Date: Mon, 14 Aug 2023 13:12:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/manager/Controller.java | 128 ++++++++++++++++-- 1 file changed, 115 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java index f5e9333..4573fe9 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -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 rawParameters) { if (!rawParameters.isEmpty()) { @@ -32,25 +43,47 @@ public class Controller implements ControllerInterface { return textArea; } + /** + * 获取行分隔事件处理程序。 + * + * @param textArea 文本区域 + * @return 行分隔事件处理程序 + */ @Override public EventHandler getLineFeedEventHandler(TextArea textArea) { return new LineFeed(textArea); } + /** + * 获取新建文件事件处理程序。 + * + * @param textArea 文本区域 + * @return 新建文件事件处理程序 + */ @Override public EventHandler getNewFileEventHandler(TextArea textArea) { return new NewFile(); } + /** + * 获取打开文件事件处理程序。 + * + * @return 打开文件事件处理程序 + */ @Override public EventHandler 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 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 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 openFileTask = createOpenFileTask(file); Thread thread = new Thread(openFileTask);