重构代码结构
This commit is contained in:
parent
8f18ba598b
commit
301fa25cb3
@ -5,4 +5,10 @@ module org.jcnc.jnotepad {
|
||||
exports org.jcnc.jnotepad.controller;
|
||||
exports org.jcnc.jnotepad.tool;
|
||||
exports org.jcnc.jnotepad.Interface;
|
||||
exports org.jcnc.jnotepad.view;
|
||||
exports org.jcnc.jnotepad.controller.event.handler;
|
||||
exports org.jcnc.jnotepad.controller.manager;
|
||||
exports org.jcnc.jnotepad.view.init;
|
||||
exports org.jcnc.jnotepad.view.manager;
|
||||
exports org.jcnc.jnotepad.constants;
|
||||
}
|
||||
@ -17,13 +17,12 @@ public interface ControllerInterface {
|
||||
|
||||
EventHandler<ActionEvent> getOpenFileEventHandler();
|
||||
|
||||
void autoSave(TextArea textArea);
|
||||
|
||||
EventHandler<ActionEvent> getSaveFileEventHandler();
|
||||
|
||||
EventHandler<ActionEvent> getSaveAsFileEventHandler();
|
||||
|
||||
void saveAsFile();
|
||||
|
||||
void autoSave(TextArea textArea);
|
||||
|
||||
void updateStatusLabel(TextArea textArea);
|
||||
|
||||
@ -36,4 +35,9 @@ public interface ControllerInterface {
|
||||
int getRow(int caretPosition, String text);
|
||||
|
||||
int getColumn(int caretPosition, String text);
|
||||
|
||||
void initTabPane();
|
||||
|
||||
void saveAsFile();
|
||||
|
||||
}
|
||||
|
||||
@ -8,16 +8,17 @@ import javafx.scene.control.TextArea;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.layout.Pane;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.controller.Controller;
|
||||
import org.jcnc.jnotepad.view.View;
|
||||
import org.jcnc.jnotepad.constants.Constants;
|
||||
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||
import org.jcnc.jnotepad.view.manager.ViewManager;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import static org.jcnc.jnotepad.view.View.initItem;
|
||||
import static org.jcnc.jnotepad.view.View.initTabPane;
|
||||
import static org.jcnc.jnotepad.view.init.View.initItem;
|
||||
import static org.jcnc.jnotepad.view.init.View.initTabPane;
|
||||
|
||||
public class LunchApp extends Application {
|
||||
private static final ExecutorService threadPool = Executors.newCachedThreadPool();
|
||||
@ -77,4 +78,5 @@ public class LunchApp extends Application {
|
||||
public static void main(String[] args) {
|
||||
launch(args);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad;
|
||||
package org.jcnc.jnotepad.constants;
|
||||
|
||||
/**
|
||||
* Constants持有所有共享信息的全局变量
|
||||
@ -1,13 +1,13 @@
|
||||
package org.jcnc.jnotepad.controller;
|
||||
package org.jcnc.jnotepad.controller.event.handler;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.control.TextArea;
|
||||
|
||||
public class LineFeedEventHandler implements EventHandler<ActionEvent> {
|
||||
public class LineFeed implements EventHandler<ActionEvent> {
|
||||
private final TextArea textArea;
|
||||
|
||||
public LineFeedEventHandler(TextArea textArea) {
|
||||
public LineFeed(TextArea textArea) {
|
||||
this.textArea = textArea;
|
||||
}
|
||||
@Override
|
||||
@ -1,14 +1,15 @@
|
||||
package org.jcnc.jnotepad.controller;
|
||||
package org.jcnc.jnotepad.controller.event.handler;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.control.Tab;
|
||||
import javafx.scene.control.TextArea;
|
||||
import org.jcnc.jnotepad.ViewManager;
|
||||
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||
import org.jcnc.jnotepad.view.manager.ViewManager;
|
||||
|
||||
import static org.jcnc.jnotepad.ViewManager.tabPane;
|
||||
import static org.jcnc.jnotepad.view.manager.ViewManager.tabPane;
|
||||
|
||||
public class NewFileEventHandler implements EventHandler<ActionEvent> {
|
||||
public class NewFile implements EventHandler<ActionEvent> {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
Controller controller = new Controller();
|
||||
@ -1,17 +1,18 @@
|
||||
package org.jcnc.jnotepad.controller;
|
||||
package org.jcnc.jnotepad.controller.event.handler;
|
||||
|
||||
import javafx.concurrent.Task;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.stage.FileChooser;
|
||||
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import static org.jcnc.jnotepad.ViewManager.tabPane;
|
||||
import static org.jcnc.jnotepad.view.manager.ViewManager.tabPane;
|
||||
|
||||
// 打开文件事件处理器
|
||||
public class OpenFileEventHandler implements EventHandler<ActionEvent> {
|
||||
public class OpenFile implements EventHandler<ActionEvent> {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
Controller controller = new Controller();
|
||||
@ -1,19 +1,20 @@
|
||||
package org.jcnc.jnotepad.controller;
|
||||
package org.jcnc.jnotepad.controller.event.handler;
|
||||
|
||||
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.controller.manager.Controller;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.jcnc.jnotepad.ViewManager.tabPane;
|
||||
import static org.jcnc.jnotepad.view.manager.ViewManager.tabPane;
|
||||
|
||||
public class SaveAsFileEventHandler implements EventHandler<ActionEvent> {
|
||||
public class SaveAsFile implements EventHandler<ActionEvent> {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
Controller controller = new Controller();
|
||||
@ -1,17 +1,18 @@
|
||||
package org.jcnc.jnotepad.controller;
|
||||
package org.jcnc.jnotepad.controller.event.handler;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.control.Tab;
|
||||
import javafx.scene.control.TextArea;
|
||||
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.jcnc.jnotepad.ViewManager.tabPane;
|
||||
import static org.jcnc.jnotepad.view.manager.ViewManager.tabPane;
|
||||
|
||||
// 保存文件事件处理器
|
||||
public class SaveFileEventHandler implements EventHandler<ActionEvent> {
|
||||
public class SaveFile implements EventHandler<ActionEvent> {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
Controller controller = new Controller();
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.controller;
|
||||
package org.jcnc.jnotepad.controller.manager;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.concurrent.Task;
|
||||
@ -9,11 +9,12 @@ 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 java.io.*;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jcnc.jnotepad.ViewManager.*;
|
||||
import static org.jcnc.jnotepad.view.manager.ViewManager.*;
|
||||
import static org.jcnc.jnotepad.tool.EncodingDetector.detectEncoding;
|
||||
|
||||
public class Controller implements ControllerInterface {
|
||||
@ -33,17 +34,17 @@ public class Controller implements ControllerInterface {
|
||||
|
||||
@Override
|
||||
public EventHandler<ActionEvent> getLineFeedEventHandler(TextArea textArea) {
|
||||
return new LineFeedEventHandler(textArea);
|
||||
return new LineFeed(textArea);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventHandler<ActionEvent> getNewFileEventHandler(TextArea textArea) {
|
||||
return new NewFileEventHandler();
|
||||
return new NewFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventHandler<ActionEvent> getOpenFileEventHandler() {
|
||||
return new OpenFileEventHandler();
|
||||
return new OpenFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -65,12 +66,12 @@ public class Controller implements ControllerInterface {
|
||||
|
||||
@Override
|
||||
public EventHandler<ActionEvent> getSaveFileEventHandler() {
|
||||
return new SaveFileEventHandler();
|
||||
return new SaveFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventHandler<ActionEvent> getSaveAsFileEventHandler() {
|
||||
return new SaveAsFileEventHandler();
|
||||
return new SaveAsFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -155,6 +156,28 @@ public class Controller implements ControllerInterface {
|
||||
return caretPosition - text.lastIndexOf("\n", caretPosition - 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initTabPane() {
|
||||
Controller controller = new Controller();
|
||||
|
||||
tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> {
|
||||
if (newTab != null) {
|
||||
// 获取新选定的标签页并关联的文本区域
|
||||
TextArea textArea = (TextArea) newTab.getContent();
|
||||
|
||||
// 更新状态标签
|
||||
controller.updateStatusLabel(textArea);
|
||||
|
||||
// 监听文本光标位置的变化,更新状态标签
|
||||
textArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> controller.updateStatusLabel(textArea));
|
||||
|
||||
// 更新编码标签
|
||||
controller.upDateEncodingLabel(textArea.getText());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void configureTextArea(TextArea textArea) {
|
||||
textArea.setWrapText(true);
|
||||
upDateEncodingLabel(textArea.getText());
|
||||
@ -195,6 +218,6 @@ public class Controller implements ControllerInterface {
|
||||
}
|
||||
|
||||
private void saveFile() {
|
||||
new SaveFileEventHandler();
|
||||
new SaveFile();
|
||||
}
|
||||
}
|
||||
@ -40,7 +40,6 @@ public class EncodingDetector {
|
||||
byte[] bytes = text.getBytes(encoding);
|
||||
String decoded = new String(bytes, encoding);
|
||||
|
||||
|
||||
// 解码后的文本相同表示编码有效
|
||||
return text.equals(decoded);
|
||||
}
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
package org.jcnc.jnotepad.view;
|
||||
|
||||
import javafx.scene.control.TextArea;
|
||||
import org.jcnc.jnotepad.controller.Controller;
|
||||
|
||||
import static org.jcnc.jnotepad.ViewManager.*;
|
||||
|
||||
|
||||
public class View {
|
||||
|
||||
public static void initItem() {
|
||||
// 初始化菜单项的事件处理器
|
||||
newItem.setOnAction(new Controller().getNewFileEventHandler(new TextArea()));
|
||||
openItem.setOnAction(new Controller().getOpenFileEventHandler());
|
||||
saveItem.setOnAction(new Controller().getSaveFileEventHandler());
|
||||
saveAsItem.setOnAction(new Controller().getSaveAsFileEventHandler());
|
||||
lineFeedItem.setOnAction(new Controller().getLineFeedEventHandler(new TextArea()));
|
||||
|
||||
}
|
||||
|
||||
public static void initTabPane() {
|
||||
Controller controller = new Controller();
|
||||
|
||||
tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> {
|
||||
if (newTab != null) {
|
||||
// 获取新选定的标签页并关联的文本区域
|
||||
TextArea textArea = (TextArea) newTab.getContent();
|
||||
|
||||
// 更新状态标签
|
||||
controller.updateStatusLabel(textArea);
|
||||
|
||||
// 监听文本光标位置的变化,更新状态标签
|
||||
textArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> controller.updateStatusLabel(textArea));
|
||||
|
||||
// 更新编码标签
|
||||
controller.upDateEncodingLabel(textArea.getText());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
24
src/main/java/org/jcnc/jnotepad/view/init/View.java
Normal file
24
src/main/java/org/jcnc/jnotepad/view/init/View.java
Normal file
@ -0,0 +1,24 @@
|
||||
package org.jcnc.jnotepad.view.init;
|
||||
|
||||
import javafx.scene.control.TextArea;
|
||||
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||
|
||||
import static org.jcnc.jnotepad.view.manager.ViewManager.*;
|
||||
|
||||
|
||||
public class View {
|
||||
|
||||
public static void initItem() {
|
||||
// 初始化菜单项的事件处理器
|
||||
newItem.setOnAction(new Controller().getNewFileEventHandler(new TextArea()));
|
||||
openItem.setOnAction(new Controller().getOpenFileEventHandler());
|
||||
saveItem.setOnAction(new Controller().getSaveFileEventHandler());
|
||||
saveAsItem.setOnAction(new Controller().getSaveAsFileEventHandler());
|
||||
lineFeedItem.setOnAction(new Controller().getLineFeedEventHandler(new TextArea()));
|
||||
|
||||
}
|
||||
|
||||
public static void initTabPane() {
|
||||
new Controller().initTabPane();
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad;
|
||||
package org.jcnc.jnotepad.view.manager;
|
||||
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.Scene;
|
||||
Loading…
x
Reference in New Issue
Block a user