🚩 修改打开重复文件的逻辑
This commit is contained in:
parent
e418d8b239
commit
2ffefb6c7b
@ -25,6 +25,8 @@ module org.jcnc.jnotepad {
|
|||||||
exports org.jcnc.jnotepad.Interface;
|
exports org.jcnc.jnotepad.Interface;
|
||||||
exports org.jcnc.jnotepad.ui.module;
|
exports org.jcnc.jnotepad.ui.module;
|
||||||
exports org.jcnc.jnotepad.ui.setStage;
|
exports org.jcnc.jnotepad.ui.setStage;
|
||||||
|
exports org.jcnc.jnotepad.root.center.main.center.tab;
|
||||||
|
exports org.jcnc.jnotepad.root.top.menu;
|
||||||
exports org.jcnc.jnotepad.view.manager;
|
exports org.jcnc.jnotepad.view.manager;
|
||||||
opens org.jcnc.jnotepad.app.config;
|
opens org.jcnc.jnotepad.app.config;
|
||||||
exports org.jcnc.jnotepad.root.center.main.bottom.status;
|
exports org.jcnc.jnotepad.root.center.main.bottom.status;
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import javafx.application.Application;
|
|||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import javafx.stage.Window;
|
||||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||||
import org.jcnc.jnotepad.constants.AppConstants;
|
import org.jcnc.jnotepad.constants.AppConstants;
|
||||||
import org.jcnc.jnotepad.constants.TextConstants;
|
import org.jcnc.jnotepad.constants.TextConstants;
|
||||||
@ -30,21 +31,27 @@ public class LunchApp extends Application {
|
|||||||
* 线程池
|
* 线程池
|
||||||
*/
|
*/
|
||||||
private final ExecutorService threadPool = ThreadPoolManager.getThreadPool();
|
private final ExecutorService threadPool = ThreadPoolManager.getThreadPool();
|
||||||
Scene scene;
|
private static final Pane ROOT = new Pane();
|
||||||
|
private static final Scene SCENE;
|
||||||
|
|
||||||
|
static {
|
||||||
|
double width = AppConstants.SCREEN_WIDTH;
|
||||||
|
double length = AppConstants.SCREEN_LENGTH;
|
||||||
|
SCENE = new Scene(ROOT, width, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch(args);
|
launch(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Window getWindow() {
|
||||||
|
return SCENE.getWindow();
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) {
|
public void start(Stage primaryStage) {
|
||||||
|
|
||||||
Pane root = new Pane();
|
|
||||||
double width = AppConstants.SCREEN_WIDTH;
|
|
||||||
double length = AppConstants.SCREEN_LENGTH;
|
|
||||||
scene = new Scene(root, width, length);
|
|
||||||
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
|
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
|
||||||
scene.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/css/styles.css")).toExternalForm());
|
SCENE.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/css/styles.css")).toExternalForm());
|
||||||
initUiComponents();
|
initUiComponents();
|
||||||
UiResourceBundle.bindStringProperty(primaryStage.titleProperty(), TextConstants.TITLE);
|
UiResourceBundle.bindStringProperty(primaryStage.titleProperty(), TextConstants.TITLE);
|
||||||
|
|
||||||
@ -53,11 +60,10 @@ public class LunchApp extends Application {
|
|||||||
// 使自定义标题栏可拖动
|
// 使自定义标题栏可拖动
|
||||||
customTitleBar.makeDraggable(primaryStage);*/
|
customTitleBar.makeDraggable(primaryStage);*/
|
||||||
// primaryStage.initStyle(StageStyle.UNDECORATED); // 移除默认窗口装饰
|
// primaryStage.initStyle(StageStyle.UNDECORATED); // 移除默认窗口装饰
|
||||||
|
primaryStage.setScene(SCENE);
|
||||||
primaryStage.setScene(scene);
|
primaryStage.setWidth(SCENE.getWidth());
|
||||||
primaryStage.setWidth(width);
|
primaryStage.setHeight(SCENE.getHeight());
|
||||||
primaryStage.setHeight(length);
|
primaryStage.setScene(SCENE);
|
||||||
primaryStage.setScene(scene);
|
|
||||||
primaryStage.getIcons().add(UiUtil.getIcon());
|
primaryStage.getIcons().add(UiUtil.getIcon());
|
||||||
primaryStage.show();
|
primaryStage.show();
|
||||||
}
|
}
|
||||||
@ -68,8 +74,8 @@ public class LunchApp extends Application {
|
|||||||
LocalizationController.initLocal();
|
LocalizationController.initLocal();
|
||||||
|
|
||||||
//2. 加载组件
|
//2. 加载组件
|
||||||
ViewManager viewManager = ViewManager.getInstance(scene);
|
ViewManager viewManager = ViewManager.getInstance(SCENE);
|
||||||
viewManager.initScreen(scene);
|
viewManager.initScreen(SCENE);
|
||||||
|
|
||||||
// 使用线程池加载关联文件并创建文本区域
|
// 使用线程池加载关联文件并创建文本区域
|
||||||
List<String> rawParameters = getParameters().getRaw();
|
List<String> rawParameters = getParameters().getRaw();
|
||||||
|
|||||||
@ -4,15 +4,16 @@ import javafx.application.Platform;
|
|||||||
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.Tab;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||||
import org.jcnc.jnotepad.constants.TextConstants;
|
import org.jcnc.jnotepad.constants.TextConstants;
|
||||||
import org.jcnc.jnotepad.manager.ThreadPoolManager;
|
import org.jcnc.jnotepad.manager.ThreadPoolManager;
|
||||||
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
|
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
|
||||||
|
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
|
||||||
import org.jcnc.jnotepad.tool.EncodingDetector;
|
import org.jcnc.jnotepad.tool.EncodingDetector;
|
||||||
import org.jcnc.jnotepad.tool.LogUtil;
|
import org.jcnc.jnotepad.tool.LogUtil;
|
||||||
import org.jcnc.jnotepad.tool.UiUtil;
|
import org.jcnc.jnotepad.tool.UiUtil;
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
|
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
|
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
|
||||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||||
|
|
||||||
@ -47,9 +48,10 @@ public class OpenFile implements EventHandler<ActionEvent> {
|
|||||||
null,
|
null,
|
||||||
new FileChooser.ExtensionFilter("All types", "*.*"))
|
new FileChooser.ExtensionFilter("All types", "*.*"))
|
||||||
.showOpenDialog(UiUtil.getAppWindow());
|
.showOpenDialog(UiUtil.getAppWindow());
|
||||||
if (file != null) {
|
if (file == null) {
|
||||||
openFile(file);
|
return;
|
||||||
}
|
}
|
||||||
|
openFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,6 +83,21 @@ public class OpenFile implements EventHandler<ActionEvent> {
|
|||||||
* @param file 文件对象
|
* @param file 文件对象
|
||||||
*/
|
*/
|
||||||
public void openFile(File file) {
|
public void openFile(File file) {
|
||||||
|
// 获取标签页集合
|
||||||
|
JNotepadTabPane jnotepadTabPane = UiUtil.getJnotepadTabPane();
|
||||||
|
// 遍历标签页,查找匹配的标签页
|
||||||
|
for (Tab tab : jnotepadTabPane.getTabs()) {
|
||||||
|
// 获取绑定的文件
|
||||||
|
File tabFile = (File) tab.getUserData();
|
||||||
|
if (tabFile == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (file.getPath().equals((tabFile).getPath())) {
|
||||||
|
// 找到匹配的标签页,设置为选中状态并跳转
|
||||||
|
jnotepadTabPane.getSelectionModel().select(tab);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
ThreadPoolManager.getThreadPool().submit(createOpenFileTask(file));
|
ThreadPoolManager.getThreadPool().submit(createOpenFileTask(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import org.jcnc.jnotepad.constants.TextConstants;
|
|||||||
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
|
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
|
||||||
import org.jcnc.jnotepad.tool.LogUtil;
|
import org.jcnc.jnotepad.tool.LogUtil;
|
||||||
import org.jcnc.jnotepad.tool.UiUtil;
|
import org.jcnc.jnotepad.tool.UiUtil;
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
|
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
|
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
|
|||||||
import org.jcnc.jnotepad.tool.LogUtil;
|
import org.jcnc.jnotepad.tool.LogUtil;
|
||||||
import org.jcnc.jnotepad.tool.SingletonUtil;
|
import org.jcnc.jnotepad.tool.SingletonUtil;
|
||||||
import org.jcnc.jnotepad.tool.UiUtil;
|
import org.jcnc.jnotepad.tool.UiUtil;
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
|
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
|
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
|||||||
@ -7,9 +7,10 @@ import org.jcnc.jnotepad.root.right.RootRightSideBarVBox;
|
|||||||
import org.jcnc.jnotepad.root.top.RootTopBorderPane;
|
import org.jcnc.jnotepad.root.top.RootTopBorderPane;
|
||||||
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* 根舞台下的Root主布局
|
* 根舞台下的Root主布局
|
||||||
* */
|
* @author 许轲
|
||||||
|
*/
|
||||||
public class RootBorderPane extends AbstractBorderPane {
|
public class RootBorderPane extends AbstractBorderPane {
|
||||||
|
|
||||||
private static final RootBorderPane INSTANCE = new RootBorderPane();
|
private static final RootBorderPane INSTANCE = new RootBorderPane();
|
||||||
@ -19,11 +20,16 @@ public class RootBorderPane extends AbstractBorderPane {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initRootBorderPane() {
|
private void initRootBorderPane() {
|
||||||
setCenterComponent(MainBorderPane.getInstance()); //中间,用于显示Main主布局
|
//中间,用于显示Main主布局
|
||||||
setLeftComponent(ToolHBox.getInstance()); //主布局的左边
|
setCenterComponent(MainBorderPane.getInstance());
|
||||||
setRightComponent(RootRightSideBarVBox.getInstance()); //主布局的右边
|
//主布局的左边
|
||||||
setTopComponent(RootTopBorderPane.getInstance()); //主布局的上面
|
setLeftComponent(ToolHBox.getInstance());
|
||||||
setBottomComponent(RootBottomSideBarVBox.getInstance());//主布局的下面
|
//主布局的右边
|
||||||
|
setRightComponent(RootRightSideBarVBox.getInstance());
|
||||||
|
//主布局的上面
|
||||||
|
setTopComponent(RootTopBorderPane.getInstance());
|
||||||
|
//主布局的下面
|
||||||
|
setBottomComponent(RootBottomSideBarVBox.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RootBorderPane getInstance() {
|
public static RootBorderPane getInstance() {
|
||||||
|
|||||||
@ -3,9 +3,11 @@ package org.jcnc.jnotepad.root.center.main;
|
|||||||
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
|
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
|
||||||
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* MainBorderPane区域,用于显示文本框以及文本框周边
|
* MainBorderPane区域,用于显示文本框以及文本框周边
|
||||||
* */
|
*
|
||||||
|
* @author 许轲
|
||||||
|
*/
|
||||||
public class MainBorderPane extends AbstractBorderPane {
|
public class MainBorderPane extends AbstractBorderPane {
|
||||||
|
|
||||||
private static final MainBorderPane INSTANCE = new MainBorderPane();
|
private static final MainBorderPane INSTANCE = new MainBorderPane();
|
||||||
@ -15,8 +17,8 @@ public class MainBorderPane extends AbstractBorderPane {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initRootBorderPane() {
|
private void initRootBorderPane() {
|
||||||
|
//文本框
|
||||||
setCenterComponent(JNotepadTabPane.getInstance()); //文本框
|
setCenterComponent(JNotepadTabPane.getInstance());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package org.jcnc.jnotepad.root.center.main.center.tab;
|
package org.jcnc.jnotepad.root.center.main.center.tab;
|
||||||
|
|
||||||
import javafx.scene.control.TabPane;
|
import javafx.scene.control.TabPane;
|
||||||
import org.jcnc.jnotepad.controller.config.AppConfigController;
|
import org.jcnc.jnotepad.tool.SingletonUtil;
|
||||||
import org.jcnc.jnotepad.tool.UiUtil;
|
import org.jcnc.jnotepad.tool.UiUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,8 +47,11 @@ public class JNotepadTabPane extends TabPane {
|
|||||||
if (tab == null) {
|
if (tab == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 将标签页加入标签页列表
|
||||||
this.getTabs().add(tab);
|
this.getTabs().add(tab);
|
||||||
|
// 设置索引
|
||||||
this.getSelectionModel().select(tab);
|
this.getSelectionModel().select(tab);
|
||||||
|
// 将标签页设置为选中状态
|
||||||
fireTabSelected();
|
fireTabSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +70,7 @@ public class JNotepadTabPane extends TabPane {
|
|||||||
*/
|
*/
|
||||||
public void fireTabSelected() {
|
public void fireTabSelected() {
|
||||||
JNotepadTab selectedTab = getSelected();
|
JNotepadTab selectedTab = getSelected();
|
||||||
selectedTab.setAutoLine(AppConfigController.getInstance().getAutoLineConfig());
|
selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig());
|
||||||
UiUtil.getStatusBox().updateWhenTabSelected();
|
UiUtil.getStatusBox().updateWhenTabSelected();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,12 @@ package org.jcnc.jnotepad.root.top;
|
|||||||
import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar;
|
import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar;
|
||||||
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
||||||
|
|
||||||
/*
|
|
||||||
* MainBorderPane区域,用于显示文本框以及文本框周边
|
/**
|
||||||
* */
|
* MainBorderPane区域,用于显示文本框以及文本框周边
|
||||||
|
*
|
||||||
|
* @author 许轲
|
||||||
|
*/
|
||||||
public class RootTopBorderPane extends AbstractBorderPane {
|
public class RootTopBorderPane extends AbstractBorderPane {
|
||||||
|
|
||||||
private static final RootTopBorderPane INSTANCE = new RootTopBorderPane();
|
private static final RootTopBorderPane INSTANCE = new RootTopBorderPane();
|
||||||
@ -15,7 +18,8 @@ public class RootTopBorderPane extends AbstractBorderPane {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initRootBorderPane() {
|
private void initRootBorderPane() {
|
||||||
setTopComponent(JNotepadMenuBar.getInstance()); //文本框上面
|
//文本框上面
|
||||||
|
setTopComponent(JNotepadMenuBar.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RootTopBorderPane getInstance() {
|
public static RootTopBorderPane getInstance() {
|
||||||
|
|||||||
@ -28,6 +28,9 @@ import static org.jcnc.jnotepad.constants.TextConstants.*;
|
|||||||
public class JNotepadMenuBar extends MenuBar {
|
public class JNotepadMenuBar extends MenuBar {
|
||||||
|
|
||||||
private static final JNotepadMenuBar MENU_BAR = new JNotepadMenuBar();
|
private static final JNotepadMenuBar MENU_BAR = new JNotepadMenuBar();
|
||||||
|
/**
|
||||||
|
* 按钮集合
|
||||||
|
*/
|
||||||
private final Map<String, MenuItem> itemMap = new HashMap<>();
|
private final Map<String, MenuItem> itemMap = new HashMap<>();
|
||||||
/**
|
/**
|
||||||
* 标签页布局组件封装。
|
* 标签页布局组件封装。
|
||||||
@ -39,7 +42,9 @@ public class JNotepadMenuBar extends MenuBar {
|
|||||||
* 工具栏
|
* 工具栏
|
||||||
*/
|
*/
|
||||||
JNotepadToolBar toolBar = JNotepadToolBar.getInstance();
|
JNotepadToolBar toolBar = JNotepadToolBar.getInstance();
|
||||||
// 获取工具栏中的setButton
|
/**
|
||||||
|
* 获取工具栏中的setButton
|
||||||
|
*/
|
||||||
Button setButton = toolBar.getSetButton();
|
Button setButton = toolBar.getSetButton();
|
||||||
/**
|
/**
|
||||||
* 文件菜单
|
* 文件菜单
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user