From 08005c73c5735003713b76f878e58585d0cf9a77 Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Sun, 20 Aug 2023 13:10:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=9C=80=E5=90=8E=E4=B8=80=E4=B8=AA=E6=A0=87=E7=AD=BE=E9=A1=B5?= =?UTF-8?q?=E6=97=B6=E4=B8=8B=E6=96=B9=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interface/ControllerInterface.java | 10 ++++- src/main/java/org/jcnc/jnotepad/LunchApp.java | 2 +- .../controller/manager/Controller.java | 38 ++++++++++++------- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java index b482a09..db1f719 100644 --- a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java +++ b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java @@ -109,5 +109,13 @@ public interface ControllerInterface { */ void initTabPane(); - void updateUIWithNewTextArea(LineNumberTextArea textArea); + /** + * 更新UI和标签页 + * + * @param textArea 文本域 + * @apiNote + * @since 2023/8/20 12:40 + */ + + void updateUiWithNewTextArea(LineNumberTextArea textArea); } diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index 91fea40..f635f84 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -66,7 +66,7 @@ public class LunchApp extends Application { threadPool.execute(() -> { LineNumberTextArea textArea = controller.openAssociatedFileAndCreateTextArea(rawParameters); if (!Objects.isNull(textArea)) { - Platform.runLater(() -> controller.updateUIWithNewTextArea(textArea)); + Platform.runLater(() -> controller.updateUiWithNewTextArea(textArea)); } }); } 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 952042d..099e8be 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -16,18 +16,20 @@ import org.jcnc.jnotepad.ui.LineNumberTextArea; import org.jcnc.jnotepad.view.manager.ViewManager; import java.io.*; +import java.util.ArrayList; import java.util.List; /** * 控制器类,实现ControllerInterface接口,用于管理文本编辑器的各种操作和事件处理。 * 包括打开关联文件、创建文本区域、处理行分隔、新建文件、打开文件、自动保存等功能。 + * + * @author 许轲 */ public class Controller implements ControllerInterface { private static final Controller INSTANCE = new Controller(); private Controller() { - } public static Controller getInstance() { @@ -228,26 +230,35 @@ public class Controller implements ControllerInterface { @Override public void initTabPane() { Controller controller = new Controller(); - ViewManager.tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> { + LineNumberTextArea textArea; if (newTab != null) { // 获取新选定的标签页并关联的文本区域 - LineNumberTextArea textArea = (LineNumberTextArea) newTab.getContent(); - - // 更新状态标签 - controller.updateStatusLabel(textArea); - - // 监听文本光标位置的变化,更新状态标签 - textArea.getMainTextArea().caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> controller.updateStatusLabel(textArea)); - - // 更新编码标签 - controller.upDateEncodingLabel(textArea.getMainTextArea().getText()); + textArea = (LineNumberTextArea) newTab.getContent(); + } else { + // 刷新状态 + textArea = openAssociatedFileAndCreateTextArea(new ArrayList<>()); } + // 更新状态标签 + controller.updateStatusLabel(textArea); + + // 监听文本光标位置的变化,更新状态标签 + textArea.getMainTextArea().caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> controller.updateStatusLabel(textArea)); + + // 更新编码标签 + controller.upDateEncodingLabel(textArea.getMainTextArea().getText()); }); } + /** + * 更新UI和标签页 + * + * @param textArea 文本域 + * @apiNote + * @since 2023/8/20 12:40 + */ @Override - public void updateUIWithNewTextArea(LineNumberTextArea textArea) { + public void updateUiWithNewTextArea(LineNumberTextArea textArea) { Tab tab = new Tab("新建文件 " + (++ViewManager.tabIndex)); tab.setContent(textArea); ViewManager.tabPane.getTabs().add(tab); @@ -255,6 +266,7 @@ public class Controller implements ControllerInterface { updateStatusLabel(textArea); } + /** * 配置文本区域。 *