重构代码结构
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.controller;
|
||||||
exports org.jcnc.jnotepad.tool;
|
exports org.jcnc.jnotepad.tool;
|
||||||
exports org.jcnc.jnotepad.Interface;
|
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();
|
EventHandler<ActionEvent> getOpenFileEventHandler();
|
||||||
|
|
||||||
void autoSave(TextArea textArea);
|
|
||||||
|
|
||||||
EventHandler<ActionEvent> getSaveFileEventHandler();
|
EventHandler<ActionEvent> getSaveFileEventHandler();
|
||||||
|
|
||||||
EventHandler<ActionEvent> getSaveAsFileEventHandler();
|
EventHandler<ActionEvent> getSaveAsFileEventHandler();
|
||||||
|
|
||||||
void saveAsFile();
|
|
||||||
|
void autoSave(TextArea textArea);
|
||||||
|
|
||||||
void updateStatusLabel(TextArea textArea);
|
void updateStatusLabel(TextArea textArea);
|
||||||
|
|
||||||
@ -36,4 +35,9 @@ public interface ControllerInterface {
|
|||||||
int getRow(int caretPosition, String text);
|
int getRow(int caretPosition, String text);
|
||||||
|
|
||||||
int getColumn(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.image.Image;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.jcnc.jnotepad.controller.Controller;
|
import org.jcnc.jnotepad.constants.Constants;
|
||||||
import org.jcnc.jnotepad.view.View;
|
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||||
|
import org.jcnc.jnotepad.view.manager.ViewManager;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
import static org.jcnc.jnotepad.view.View.initItem;
|
import static org.jcnc.jnotepad.view.init.View.initItem;
|
||||||
import static org.jcnc.jnotepad.view.View.initTabPane;
|
import static org.jcnc.jnotepad.view.init.View.initTabPane;
|
||||||
|
|
||||||
public class LunchApp extends Application {
|
public class LunchApp extends Application {
|
||||||
private static final ExecutorService threadPool = Executors.newCachedThreadPool();
|
private static final ExecutorService threadPool = Executors.newCachedThreadPool();
|
||||||
@ -77,4 +78,5 @@ public class LunchApp extends Application {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch(args);
|
launch(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad;
|
package org.jcnc.jnotepad.constants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
|
|
||||||
public class LineFeedEventHandler implements EventHandler<ActionEvent> {
|
public class LineFeed implements EventHandler<ActionEvent> {
|
||||||
private final TextArea textArea;
|
private final TextArea textArea;
|
||||||
|
|
||||||
public LineFeedEventHandler(TextArea textArea) {
|
public LineFeed(TextArea textArea) {
|
||||||
this.textArea = textArea;
|
this.textArea = textArea;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@ -1,14 +1,15 @@
|
|||||||
package org.jcnc.jnotepad.controller;
|
package org.jcnc.jnotepad.controller.event.handler;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TextArea;
|
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
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
Controller controller = new Controller();
|
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.concurrent.Task;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
|
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||||
|
|
||||||
import java.io.File;
|
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
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
Controller controller = new Controller();
|
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.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
|
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
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
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
Controller controller = new Controller();
|
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.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
|
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
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
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
Controller controller = new Controller();
|
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.application.Platform;
|
||||||
import javafx.concurrent.Task;
|
import javafx.concurrent.Task;
|
||||||
@ -9,11 +9,12 @@ import javafx.scene.control.TextArea;
|
|||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import org.jcnc.jnotepad.Interface.ControllerInterface;
|
import org.jcnc.jnotepad.Interface.ControllerInterface;
|
||||||
import org.jcnc.jnotepad.LunchApp;
|
import org.jcnc.jnotepad.LunchApp;
|
||||||
|
import org.jcnc.jnotepad.controller.event.handler.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.List;
|
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;
|
import static org.jcnc.jnotepad.tool.EncodingDetector.detectEncoding;
|
||||||
|
|
||||||
public class Controller implements ControllerInterface {
|
public class Controller implements ControllerInterface {
|
||||||
@ -33,17 +34,17 @@ public class Controller implements ControllerInterface {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventHandler<ActionEvent> getLineFeedEventHandler(TextArea textArea) {
|
public EventHandler<ActionEvent> getLineFeedEventHandler(TextArea textArea) {
|
||||||
return new LineFeedEventHandler(textArea);
|
return new LineFeed(textArea);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventHandler<ActionEvent> getNewFileEventHandler(TextArea textArea) {
|
public EventHandler<ActionEvent> getNewFileEventHandler(TextArea textArea) {
|
||||||
return new NewFileEventHandler();
|
return new NewFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventHandler<ActionEvent> getOpenFileEventHandler() {
|
public EventHandler<ActionEvent> getOpenFileEventHandler() {
|
||||||
return new OpenFileEventHandler();
|
return new OpenFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -65,12 +66,12 @@ public class Controller implements ControllerInterface {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventHandler<ActionEvent> getSaveFileEventHandler() {
|
public EventHandler<ActionEvent> getSaveFileEventHandler() {
|
||||||
return new SaveFileEventHandler();
|
return new SaveFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventHandler<ActionEvent> getSaveAsFileEventHandler() {
|
public EventHandler<ActionEvent> getSaveAsFileEventHandler() {
|
||||||
return new SaveAsFileEventHandler();
|
return new SaveAsFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -155,6 +156,28 @@ public class Controller implements ControllerInterface {
|
|||||||
return caretPosition - text.lastIndexOf("\n", caretPosition - 1);
|
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) {
|
private void configureTextArea(TextArea textArea) {
|
||||||
textArea.setWrapText(true);
|
textArea.setWrapText(true);
|
||||||
upDateEncodingLabel(textArea.getText());
|
upDateEncodingLabel(textArea.getText());
|
||||||
@ -195,6 +218,6 @@ public class Controller implements ControllerInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void saveFile() {
|
private void saveFile() {
|
||||||
new SaveFileEventHandler();
|
new SaveFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,7 +40,6 @@ public class EncodingDetector {
|
|||||||
byte[] bytes = text.getBytes(encoding);
|
byte[] bytes = text.getBytes(encoding);
|
||||||
String decoded = new String(bytes, encoding);
|
String decoded = new String(bytes, encoding);
|
||||||
|
|
||||||
|
|
||||||
// 解码后的文本相同表示编码有效
|
// 解码后的文本相同表示编码有效
|
||||||
return text.equals(decoded);
|
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.geometry.Insets;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
Loading…
x
Reference in New Issue
Block a user