修复:关闭最后一个标签页时下方数据不刷新的问题。

This commit is contained in:
gewuyou 2023-08-20 13:10:05 +08:00
parent 013c47d81e
commit 08005c73c5
3 changed files with 35 additions and 15 deletions

View File

@ -109,5 +109,13 @@ public interface ControllerInterface {
*/ */
void initTabPane(); void initTabPane();
void updateUIWithNewTextArea(LineNumberTextArea textArea); /**
* 更新UI和标签页
*
* @param textArea 文本域
* @apiNote
* @since 2023/8/20 12:40
*/
void updateUiWithNewTextArea(LineNumberTextArea textArea);
} }

View File

@ -66,7 +66,7 @@ public class LunchApp extends Application {
threadPool.execute(() -> { threadPool.execute(() -> {
LineNumberTextArea textArea = controller.openAssociatedFileAndCreateTextArea(rawParameters); LineNumberTextArea textArea = controller.openAssociatedFileAndCreateTextArea(rawParameters);
if (!Objects.isNull(textArea)) { if (!Objects.isNull(textArea)) {
Platform.runLater(() -> controller.updateUIWithNewTextArea(textArea)); Platform.runLater(() -> controller.updateUiWithNewTextArea(textArea));
} }
}); });
} }

View File

@ -16,18 +16,20 @@ import org.jcnc.jnotepad.ui.LineNumberTextArea;
import org.jcnc.jnotepad.view.manager.ViewManager; import org.jcnc.jnotepad.view.manager.ViewManager;
import java.io.*; import java.io.*;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* 控制器类实现ControllerInterface接口用于管理文本编辑器的各种操作和事件处理 * 控制器类实现ControllerInterface接口用于管理文本编辑器的各种操作和事件处理
* 包括打开关联文件创建文本区域处理行分隔新建文件打开文件自动保存等功能 * 包括打开关联文件创建文本区域处理行分隔新建文件打开文件自动保存等功能
*
* @author 许轲
*/ */
public class Controller implements ControllerInterface { public class Controller implements ControllerInterface {
private static final Controller INSTANCE = new Controller(); private static final Controller INSTANCE = new Controller();
private Controller() { private Controller() {
} }
public static Controller getInstance() { public static Controller getInstance() {
@ -228,26 +230,35 @@ public class Controller implements ControllerInterface {
@Override @Override
public void initTabPane() { public void initTabPane() {
Controller controller = new Controller(); Controller controller = new Controller();
ViewManager.tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> { ViewManager.tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> {
LineNumberTextArea textArea;
if (newTab != null) { if (newTab != null) {
// 获取新选定的标签页并关联的文本区域 // 获取新选定的标签页并关联的文本区域
LineNumberTextArea textArea = (LineNumberTextArea) newTab.getContent(); textArea = (LineNumberTextArea) newTab.getContent();
} else {
// 更新状态标签 // 刷新状态
controller.updateStatusLabel(textArea); textArea = openAssociatedFileAndCreateTextArea(new ArrayList<>());
// 监听文本光标位置的变化更新状态标签
textArea.getMainTextArea().caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> controller.updateStatusLabel(textArea));
// 更新编码标签
controller.upDateEncodingLabel(textArea.getMainTextArea().getText());
} }
// 更新状态标签
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 @Override
public void updateUIWithNewTextArea(LineNumberTextArea textArea) { public void updateUiWithNewTextArea(LineNumberTextArea textArea) {
Tab tab = new Tab("新建文件 " + (++ViewManager.tabIndex)); Tab tab = new Tab("新建文件 " + (++ViewManager.tabIndex));
tab.setContent(textArea); tab.setContent(textArea);
ViewManager.tabPane.getTabs().add(tab); ViewManager.tabPane.getTabs().add(tab);
@ -255,6 +266,7 @@ public class Controller implements ControllerInterface {
updateStatusLabel(textArea); updateStatusLabel(textArea);
} }
/** /**
* 配置文本区域 * 配置文本区域
* *