!64 ♻️ 重构代码 移除Ui单例于Ui工具类
Merge pull request !64 from 格物方能致知/refactor-17XXTP
This commit is contained in:
commit
facb9c886e
@ -1,7 +1,7 @@
|
|||||||
name: Bug 反馈
|
name: Bug 反馈
|
||||||
description: 当你在代码中发现了一个 Bug,导致应用崩溃或抛出异常,或者有一个组件存在问题,或者某些地方看起来不对劲。
|
description: 当你在代码中发现了一个 Bug,导致应用崩溃或抛出异常,或者有一个组件存在问题,或者某些地方看起来不对劲。
|
||||||
title: "[Bug]: "
|
title: "[Bug]: "
|
||||||
labels: ["bug"]
|
labels: [ "bug" ]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
name: 功能建议
|
name: 功能建议
|
||||||
description: 对本项目提出一个功能建议
|
description: 对本项目提出一个功能建议
|
||||||
title: "[功能建议]: "
|
title: "[功能建议]: "
|
||||||
labels: ["feature"]
|
labels: [ "feature" ]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
name: 重构
|
name: 重构
|
||||||
description: 对本项目提出一个功能建议
|
description: 对本项目提出一个功能建议
|
||||||
title: "[重构]: "
|
title: "[重构]: "
|
||||||
labels: ["refactor"]
|
labels: [ "refactor" ]
|
||||||
body:
|
body:
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: related-problem
|
id: related-problem
|
||||||
|
|||||||
26
README.md
26
README.md
@ -4,8 +4,9 @@
|
|||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨在提供用户友好的界面和丰富的功能。无论你是在Linux、Windows还是macOS系统上使用,JNotepad都能满足你对文本编辑和查看的需求。
|
||||||
|
JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。
|
||||||
|
|
||||||
JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨在提供用户友好的界面和丰富的功能。无论你是在Linux、Windows还是macOS系统上使用,JNotepad都能满足你对文本编辑和查看的需求。 JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。
|
|
||||||
## 功能介绍
|
## 功能介绍
|
||||||
|
|
||||||
- 文本编辑和查看:JNotepad提供了完善的文本编辑和查看功能,使你能够轻松创建、编辑和浏览各种类型的文本文件。
|
- 文本编辑和查看:JNotepad提供了完善的文本编辑和查看功能,使你能够轻松创建、编辑和浏览各种类型的文本文件。
|
||||||
@ -16,31 +17,32 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨
|
|||||||
|
|
||||||
- 基于Java:JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。
|
- 基于Java:JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。
|
||||||
|
|
||||||
|
|
||||||
## 安装教程
|
## 安装教程
|
||||||
|
|
||||||
1. Windows 平台,可以直接使用我编译好的可执行程序或自己编译
|
1. Windows 平台,可以直接使用我编译好的可执行程序或自己编译
|
||||||
|
|
||||||
[gitee-download]: https://gitee.com/jcnc-org/JNotepad/releases
|
[gitee-download]: https://gitee.com/jcnc-org/JNotepad/releases
|
||||||
|
|
||||||
[java-download]: https://www.oracle.com/cn/java/technologies/downloads/
|
[java-download]: https://www.oracle.com/cn/java/technologies/downloads/
|
||||||
|
|
||||||
[qq-url]: http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=zOfwWb1lcle68cbEdJCjSIp3Itx0nEC0&authKey=bOsZFT9OVYZpZQbS6IYO4onBQoeBorF5nanMEi1G%2FgPbzmUkOweXBo9qB0G34R5K&noverify=0&group_code=386279455
|
[qq-url]: http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=zOfwWb1lcle68cbEdJCjSIp3Itx0nEC0&authKey=bOsZFT9OVYZpZQbS6IYO4onBQoeBorF5nanMEi1G%2FgPbzmUkOweXBo9qB0G34R5K&noverify=0&group_code=386279455
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- [下载][gitee-download]
|
- [下载][gitee-download]
|
||||||
|
|
||||||
2. Linux/MacOS 平台,查看入门指南
|
2. Linux/MacOS 平台,查看入门指南
|
||||||
|
|
||||||
|
|
||||||
## 入门指南
|
## 入门指南
|
||||||
|
|
||||||
要使用 JNotepad,请按照以下步骤进行:
|
要使用 JNotepad,请按照以下步骤进行:
|
||||||
|
|
||||||
1. 下载并安装 Java(如果尚未安装)。
|
1. 下载并安装 Java(如果尚未安装)。
|
||||||
|
|
||||||
- [下载][gitee-download]
|
- [下载][gitee-download]
|
||||||
|
|
||||||
2. 克隆或下载 JNotepad 项目。
|
2. 克隆或下载 JNotepad 项目。
|
||||||
|
|
||||||
<pre><code>git clone https://gitee.com/jcnc-org/JNotepad.git</code></pre>
|
<pre><code>git clone https://gitee.com/jcnc-org/JNotepad.git</code></pre>
|
||||||
|
|
||||||
3. 在您偏好的 Java IDE 中打开项目。
|
3. 在您偏好的 Java IDE 中打开项目。
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
@ -48,10 +50,12 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨
|
|||||||
1. 运行 `JNotepad` 类以启动应用程序。
|
1. 运行 `JNotepad` 类以启动应用程序。
|
||||||
2. 主窗口将显示菜单栏、标签区域和状态栏。
|
2. 主窗口将显示菜单栏、标签区域和状态栏。
|
||||||
3. 使用菜单栏执行各种操作:
|
3. 使用菜单栏执行各种操作:
|
||||||
- `文件 > 新建`:创建一个带有空白文本区域的新标签。
|
|
||||||
- `文件 > 打开`:打开现有文本文件进行编辑。
|
- `文件 > 新建`:创建一个带有空白文本区域的新标签。
|
||||||
- `文件 > 保存`:将当前活动标签的内容保存到关联文件中。
|
- `文件 > 打开`:打开现有文本文件进行编辑。
|
||||||
- `文件 > 另存为`:将当前活动标签的内容保存为新文件。
|
- `文件 > 保存`:将当前活动标签的内容保存到关联文件中。
|
||||||
|
- `文件 > 另存为`:将当前活动标签的内容保存为新文件。
|
||||||
|
|
||||||
4. 在每个标签的文本区域中编辑内容。
|
4. 在每个标签的文本区域中编辑内容。
|
||||||
5. 状态栏将显示有关光标位置和文本统计信息的信息。
|
5. 状态栏将显示有关光标位置和文本统计信息的信息。
|
||||||
|
|
||||||
@ -64,7 +68,9 @@ JNotepad(Java Notepad)是一款简约而强大的跨平台文本编辑器,旨
|
|||||||
<version>17.0.1</version>
|
<version>17.0.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
## 软件运行截图
|
|
||||||
|
## 软件运行截图
|
||||||
|
|
||||||
- Windows 平台
|
- Windows 平台
|
||||||

|

|
||||||
- MacOS 平台
|
- MacOS 平台
|
||||||
|
|||||||
29
docs/开发指南.md
29
docs/开发指南.md
@ -1,19 +1,31 @@
|
|||||||
# 1. 开发流程
|
# 1. 开发流程
|
||||||
|
|
||||||
基于**AoneFlow**开发流程,具体请阅读:[在阿里,我们如何管理代码分支?](https://developer.aliyun.com/article/573549)
|
基于**AoneFlow**开发流程,具体请阅读:[在阿里,我们如何管理代码分支?](https://developer.aliyun.com/article/573549)
|
||||||
|
|
||||||
## 1.1 IDEA IDE版
|
## 1.1 IDEA IDE版
|
||||||
|
|
||||||
### 步骤一 Fork JCNC/JNotepad或同步JCNC/JNotepad到个人仓库
|
### 步骤一 Fork JCNC/JNotepad或同步JCNC/JNotepad到个人仓库
|
||||||
|
|
||||||
#### 首次开发,进行Fork操作
|
#### 首次开发,进行Fork操作
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### 非首次开发,进行同步操作
|
#### 非首次开发,进行同步操作
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 步骤二 clone个人仓库或fetch
|
### 步骤二 clone个人仓库或fetch
|
||||||
|
|
||||||
#### 首次开发,clone个人仓库
|
#### 首次开发,clone个人仓库
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### 非首次开发,执行fetch
|
#### 非首次开发,执行fetch
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 步骤三 从remote下的master分支创建本地开发分支。
|
### 步骤三 从remote下的master分支创建本地开发分支。
|
||||||
|
|
||||||
**特殊情况:开发依赖release分支已提交内容,或是对已提交内容进行修改,那么需要从release分支上进行拉取。**
|
**特殊情况:开发依赖release分支已提交内容,或是对已提交内容进行修改,那么需要从release分支上进行拉取。**
|
||||||

|

|
||||||

|

|
||||||
@ -23,12 +35,15 @@
|
|||||||
### 步骤四 推送本地分支到远程
|
### 步骤四 推送本地分支到远程
|
||||||
|
|
||||||
### 步骤五 发起Pull Request(PR)
|
### 步骤五 发起Pull Request(PR)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**注意:目标分支选择预期要发布的release分支**
|
**注意:目标分支选择预期要发布的release分支**
|
||||||
|
|
||||||
## 1.2 GIT命令行版本
|
## 1.2 GIT命令行版本
|
||||||
|
|
||||||
步骤一、步骤二、步骤五同1.1操作
|
步骤一、步骤二、步骤五同1.1操作
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# 步骤三
|
# 步骤三
|
||||||
git fetch
|
git fetch
|
||||||
@ -38,24 +53,28 @@ git push origin feature-demo
|
|||||||
```
|
```
|
||||||
|
|
||||||
## 1.3 分支命名规则
|
## 1.3 分支命名规则
|
||||||
|issue类别|分支名格式|示例|
|
|
||||||
|--------|--------|----|
|
| issue类别 | 分支名格式 | 示例 |
|
||||||
|功能/优化/文档修改|feature-issue编号|feature-I7W9LX|
|
|------------|------------------|-----------------|
|
||||||
|bug fix| fix-issue编号| fix-I7W9LX|
|
| 功能/优化/文档修改 | feature-issue编号 | feature-I7W9LX |
|
||||||
|代码重构|refactor-issue编号|refactor-I7W9LX|
|
| bug fix | fix-issue编号 | fix-I7W9LX |
|
||||||
|
| 代码重构 | refactor-issue编号 | refactor-I7W9LX |
|
||||||
|
|
||||||
# 2. IDEA插件配置
|
# 2. IDEA插件配置
|
||||||
|
|
||||||
* 安装Resource Bundle插件
|
* 安装Resource Bundle插件
|
||||||

|

|
||||||
* 安装成功后,打开i18n.properties,可以看到Resource Bundle tab
|
* 安装成功后,打开i18n.properties,可以看到Resource Bundle tab
|
||||||

|

|
||||||
|
|
||||||
# Q&A
|
# Q&A
|
||||||
|
|
||||||
Q: 本地开发时,主仓库合并了新代码,如何处理?
|
Q: 本地开发时,主仓库合并了新代码,如何处理?
|
||||||
A: 继续完成本地开发,发起PR时再解决冲突。
|
A: 继续完成本地开发,发起PR时再解决冲突。
|
||||||
|
|
||||||
Q: 解决冲突步骤是什么?
|
Q: 解决冲突步骤是什么?
|
||||||
A: 一般按如下步骤。
|
A: 一般按如下步骤。
|
||||||
|
|
||||||
1. 先同步主仓库
|
1. 先同步主仓库
|
||||||
2. 本地仓库进行fetch
|
2. 本地仓库进行fetch
|
||||||
3. 本地开发分支merge/pull/rebase更新的release分支
|
3. 本地开发分支merge/pull/rebase更新的release分支
|
||||||
4
pom.xml
4
pom.xml
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@ -23,11 +23,6 @@ module org.jcnc.jnotepad {
|
|||||||
exports org.jcnc.jnotepad.controller.event.handler.menuBar;
|
exports org.jcnc.jnotepad.controller.event.handler.menuBar;
|
||||||
exports org.jcnc.jnotepad.tool;
|
exports org.jcnc.jnotepad.tool;
|
||||||
exports org.jcnc.jnotepad.Interface;
|
exports org.jcnc.jnotepad.Interface;
|
||||||
exports org.jcnc.jnotepad.ui.module;
|
|
||||||
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;
|
|
||||||
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;
|
||||||
|
|
||||||
|
|||||||
@ -27,10 +27,6 @@ import java.util.concurrent.ExecutorService;
|
|||||||
* @author 许轲
|
* @author 许轲
|
||||||
*/
|
*/
|
||||||
public class LunchApp extends Application {
|
public class LunchApp extends Application {
|
||||||
/**
|
|
||||||
* 线程池
|
|
||||||
*/
|
|
||||||
private final ExecutorService threadPool = ThreadPoolManager.getThreadPool();
|
|
||||||
private static final Pane ROOT = new Pane();
|
private static final Pane ROOT = new Pane();
|
||||||
private static final Scene SCENE;
|
private static final Scene SCENE;
|
||||||
|
|
||||||
@ -40,6 +36,10 @@ public class LunchApp extends Application {
|
|||||||
SCENE = new Scene(ROOT, width, length);
|
SCENE = new Scene(ROOT, width, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 线程池
|
||||||
|
*/
|
||||||
|
private final ExecutorService threadPool = ThreadPoolManager.getThreadPool();
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch(args);
|
launch(args);
|
||||||
@ -48,6 +48,7 @@ public class LunchApp extends Application {
|
|||||||
public static Window getWindow() {
|
public static Window getWindow() {
|
||||||
return SCENE.getWindow();
|
return SCENE.getWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) {
|
public void start(Stage primaryStage) {
|
||||||
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
|
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
|
||||||
|
|||||||
@ -30,6 +30,7 @@ public class AppConfigController {
|
|||||||
private static final AppConfigController INSTANCE = new AppConfigController();
|
private static final AppConfigController INSTANCE = new AppConfigController();
|
||||||
private AppConfig appConfig;
|
private AppConfig appConfig;
|
||||||
private String dir;
|
private String dir;
|
||||||
|
|
||||||
private AppConfigController() {
|
private AppConfigController() {
|
||||||
setDir(Paths.get(System.getProperty("user.home"), ".jnotepad").toString());
|
setDir(Paths.get(System.getProperty("user.home"), ".jnotepad").toString());
|
||||||
loadConfig();
|
loadConfig();
|
||||||
|
|||||||
@ -4,8 +4,9 @@ import javafx.event.ActionEvent;
|
|||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
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.root.center.main.bottom.status.JNotepadStatusBox;
|
||||||
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.UiUtil;
|
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
|
||||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||||
import org.jcnc.jnotepad.view.manager.ViewManager;
|
import org.jcnc.jnotepad.view.manager.ViewManager;
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ public class NewFile implements EventHandler<ActionEvent> {
|
|||||||
// 创建一个新的文本编辑区
|
// 创建一个新的文本编辑区
|
||||||
LineNumberTextArea textArea = new LineNumberTextArea();
|
LineNumberTextArea textArea = new LineNumberTextArea();
|
||||||
// TODO: refactor:统一TextArea新建、绑定监听器入口
|
// TODO: refactor:统一TextArea新建、绑定监听器入口
|
||||||
ViewManager viewManager = UiUtil.getViewManager();
|
ViewManager viewManager = ViewManager.getInstance();
|
||||||
// 创建标签页
|
// 创建标签页
|
||||||
JNotepadTab jNotepadTab = new JNotepadTab(
|
JNotepadTab jNotepadTab = new JNotepadTab(
|
||||||
UiResourceBundle.getContent(TextConstants.NEW_FILE)
|
UiResourceBundle.getContent(TextConstants.NEW_FILE)
|
||||||
@ -42,8 +43,8 @@ public class NewFile implements EventHandler<ActionEvent> {
|
|||||||
// 设置当前标签页与本地文件无关联
|
// 设置当前标签页与本地文件无关联
|
||||||
jNotepadTab.setRelevance(false);
|
jNotepadTab.setRelevance(false);
|
||||||
// 将Tab页添加到TabPane中
|
// 将Tab页添加到TabPane中
|
||||||
UiUtil.getJnotepadTabPane().addNewTab(jNotepadTab);
|
JNotepadTabPane.getInstance().addNewTab(jNotepadTab);
|
||||||
// 更新编码信息
|
// 更新编码信息
|
||||||
UiUtil.getStatusBox().updateEncodingLabel();
|
JNotepadStatusBox.getInstance().updateEncodingLabel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ public class OpenFile implements EventHandler<ActionEvent> {
|
|||||||
*/
|
*/
|
||||||
public void openFile(File file) {
|
public void openFile(File file) {
|
||||||
// 获取标签页集合
|
// 获取标签页集合
|
||||||
JNotepadTabPane jnotepadTabPane = UiUtil.getJnotepadTabPane();
|
JNotepadTabPane jnotepadTabPane = JNotepadTabPane.getInstance();
|
||||||
// 遍历标签页,查找匹配的标签页
|
// 遍历标签页,查找匹配的标签页
|
||||||
for (Tab tab : jnotepadTabPane.getTabs()) {
|
for (Tab tab : jnotepadTabPane.getTabs()) {
|
||||||
// 获取绑定的文件
|
// 获取绑定的文件
|
||||||
@ -124,7 +124,7 @@ public class OpenFile implements EventHandler<ActionEvent> {
|
|||||||
// 设置当前标签页关联本地文件
|
// 设置当前标签页关联本地文件
|
||||||
tab.setRelevance(true);
|
tab.setRelevance(true);
|
||||||
tab.setUserData(file);
|
tab.setUserData(file);
|
||||||
UiUtil.getJnotepadTabPane().addNewTab(tab);
|
JNotepadTabPane.getInstance().addNewTab(tab);
|
||||||
});
|
});
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
LogUtil.getLogger(this.getClass()).info("已忽视IO异常!");
|
LogUtil.getLogger(this.getClass()).info("已忽视IO异常!");
|
||||||
|
|||||||
@ -8,6 +8,7 @@ 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.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.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.impl.TextFileChooserFactory;
|
import org.jcnc.jnotepad.ui.dialog.factory.impl.TextFileChooserFactory;
|
||||||
@ -26,7 +27,7 @@ public class RenameFile implements EventHandler<ActionEvent> {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(ActionEvent actionEvent) {
|
public void handle(ActionEvent actionEvent) {
|
||||||
// 获取当前标签页
|
// 获取当前标签页
|
||||||
JNotepadTab jnotepadtab = UiUtil.getJnotepadtab();
|
JNotepadTab jnotepadtab = JNotepadTabPane.getInstance().getSelected();
|
||||||
if (jnotepadtab == null || jnotepadtab.getText().isEmpty()) {
|
if (jnotepadtab == null || jnotepadtab.getText().isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,8 @@ import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
|||||||
import org.jcnc.jnotepad.constants.TextConstants;
|
import org.jcnc.jnotepad.constants.TextConstants;
|
||||||
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
||||||
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.root.top.menu.JNotepadMenuBar;
|
||||||
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;
|
||||||
@ -34,7 +36,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(ActionEvent actionEvent) {
|
public void handle(ActionEvent actionEvent) {
|
||||||
// 获取当前tab页
|
// 获取当前tab页
|
||||||
JNotepadTab selectedTab = UiUtil.getJnotepadtab();
|
JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
|
||||||
if (selectedTab == null) {
|
if (selectedTab == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -50,7 +52,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
|
|||||||
if (CONFIG_NAME.equals(selectedTab.getText())) {
|
if (CONFIG_NAME.equals(selectedTab.getText())) {
|
||||||
// 重新加载语言包和快捷键
|
// 重新加载语言包和快捷键
|
||||||
SingletonUtil.getAppConfigController().loadConfig();
|
SingletonUtil.getAppConfigController().loadConfig();
|
||||||
UiUtil.getMenuBar().initShortcutKeys();
|
JNotepadMenuBar.getInstance().initShortcutKeys();
|
||||||
LocalizationController.initLocal();
|
LocalizationController.initLocal();
|
||||||
logger.info("已刷新语言包!");
|
logger.info("已刷新语言包!");
|
||||||
logger.info("已刷新快捷键!");
|
logger.info("已刷新快捷键!");
|
||||||
@ -66,7 +68,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
|
|||||||
* @see LogUtil
|
* @see LogUtil
|
||||||
*/
|
*/
|
||||||
protected void saveTab(Class<?> currentClass) {
|
protected void saveTab(Class<?> currentClass) {
|
||||||
JNotepadTab selectedTab = UiUtil.getJnotepadtab();
|
JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
|
||||||
if (selectedTab == null) {
|
if (selectedTab == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.event.handler.tool;
|
|||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import org.jcnc.jnotepad.tool.UiUtil;
|
import org.jcnc.jnotepad.ui.setStage.SetStage;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,7 +21,7 @@ public class SetBtn implements EventHandler<ActionEvent> {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
UiUtil.getSetStage().openSetStage();
|
SetStage.getInstance().openSetStage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根舞台下的Root主布局
|
* 根舞台下的Root主布局
|
||||||
|
*
|
||||||
* @author 许轲
|
* @author 许轲
|
||||||
*/
|
*/
|
||||||
public class RootBorderPane extends AbstractBorderPane {
|
public class RootBorderPane extends AbstractBorderPane {
|
||||||
@ -19,6 +20,10 @@ public class RootBorderPane extends AbstractBorderPane {
|
|||||||
initRootBorderPane();
|
initRootBorderPane();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static RootBorderPane getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
private void initRootBorderPane() {
|
private void initRootBorderPane() {
|
||||||
//中间,用于显示Main主布局
|
//中间,用于显示Main主布局
|
||||||
setCenterComponent(MainBorderPane.getInstance());
|
setCenterComponent(MainBorderPane.getInstance());
|
||||||
@ -31,10 +36,6 @@ public class RootBorderPane extends AbstractBorderPane {
|
|||||||
//主布局的下面
|
//主布局的下面
|
||||||
setBottomComponent(RootBottomSideBarVBox.getInstance());
|
setBottomComponent(RootBottomSideBarVBox.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RootBorderPane getInstance() {
|
|
||||||
return INSTANCE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -11,11 +11,11 @@ public class RootBottomSideBarVBox extends AbstractVBox {
|
|||||||
initSidebarVBox();
|
initSidebarVBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initSidebarVBox() {
|
|
||||||
getChildren().addAll(JNotepadStatusBox.getInstance());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RootBottomSideBarVBox getInstance() {
|
public static RootBottomSideBarVBox getInstance() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initSidebarVBox() {
|
||||||
|
getChildren().addAll(JNotepadStatusBox.getInstance());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,15 +16,15 @@ public class MainBorderPane extends AbstractBorderPane {
|
|||||||
initRootBorderPane();
|
initRootBorderPane();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static MainBorderPane getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
private void initRootBorderPane() {
|
private void initRootBorderPane() {
|
||||||
//文本框
|
//文本框
|
||||||
setCenterComponent(JNotepadTabPane.getInstance());
|
setCenterComponent(JNotepadTabPane.getInstance());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MainBorderPane getInstance() {
|
|
||||||
return INSTANCE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -80,6 +80,7 @@ public class JNotepadTab extends Tab {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存为指定文件
|
* 保存为指定文件
|
||||||
|
*
|
||||||
* @param file 新文件
|
* @param file 新文件
|
||||||
*/
|
*/
|
||||||
public void save(File file) {
|
public void save(File file) {
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
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.root.center.main.bottom.status.JNotepadStatusBox;
|
||||||
|
import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar;
|
||||||
import org.jcnc.jnotepad.tool.SingletonUtil;
|
import org.jcnc.jnotepad.tool.SingletonUtil;
|
||||||
import org.jcnc.jnotepad.tool.UiUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标签页布局组件封装。
|
* 标签页布局组件封装。
|
||||||
@ -30,10 +31,10 @@ public class JNotepadTabPane extends TabPane {
|
|||||||
(ov, from, to) -> {
|
(ov, from, to) -> {
|
||||||
if (to != null) {
|
if (to != null) {
|
||||||
// 更新菜单栏中与tab相关设置
|
// 更新菜单栏中与tab相关设置
|
||||||
UiUtil.getMenuBar().updateMenuStatusBySelectedTab();
|
JNotepadMenuBar.getInstance().updateMenuStatusBySelectedTab();
|
||||||
}
|
}
|
||||||
// 更新状态标签
|
// 更新状态标签
|
||||||
UiUtil.getStatusBox().updateWhenTabSelected();
|
JNotepadStatusBox.getInstance().updateWhenTabSelected();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -71,6 +72,6 @@ public class JNotepadTabPane extends TabPane {
|
|||||||
public void fireTabSelected() {
|
public void fireTabSelected() {
|
||||||
JNotepadTab selectedTab = getSelected();
|
JNotepadTab selectedTab = getSelected();
|
||||||
selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig());
|
selectedTab.setAutoLine(SingletonUtil.getAppConfigController().getAutoLineConfig());
|
||||||
UiUtil.getStatusBox().updateWhenTabSelected();
|
JNotepadStatusBox.getInstance().updateWhenTabSelected();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,11 +10,11 @@ public class RootRightSideBarVBox extends AbstractVBox {
|
|||||||
initSidebarVBox();
|
initSidebarVBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initSidebarVBox() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RootRightSideBarVBox getInstance() {
|
public static RootRightSideBarVBox getInstance() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initSidebarVBox() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,14 +17,14 @@ public class RootTopBorderPane extends AbstractBorderPane {
|
|||||||
initRootBorderPane();
|
initRootBorderPane();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static RootTopBorderPane getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
private void initRootBorderPane() {
|
private void initRootBorderPane() {
|
||||||
//文本框上面
|
//文本框上面
|
||||||
setTopComponent(JNotepadMenuBar.getInstance());
|
setTopComponent(JNotepadMenuBar.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RootTopBorderPane getInstance() {
|
|
||||||
return INSTANCE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ public class SingletonUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取UI资源绑定组件I
|
* 获取UI资源绑定组件
|
||||||
*
|
*
|
||||||
* @return org.jcnc.jnotepad.app.i18n.UiResourceBundle
|
* @return org.jcnc.jnotepad.app.i18n.UiResourceBundle
|
||||||
* @since 2023/8/30 12:45
|
* @since 2023/8/30 12:45
|
||||||
|
|||||||
@ -2,61 +2,25 @@ package org.jcnc.jnotepad.tool;
|
|||||||
|
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.stage.Window;
|
import javafx.stage.Window;
|
||||||
|
import org.jcnc.jnotepad.LunchApp;
|
||||||
import org.jcnc.jnotepad.constants.AppConstants;
|
import org.jcnc.jnotepad.constants.AppConstants;
|
||||||
import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox;
|
|
||||||
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTab;
|
|
||||||
import org.jcnc.jnotepad.root.center.main.center.tab.JNotepadTabPane;
|
|
||||||
import org.jcnc.jnotepad.root.top.menu.JNotepadMenuBar;
|
|
||||||
import org.jcnc.jnotepad.ui.setStage.SetStage;
|
|
||||||
import org.jcnc.jnotepad.view.manager.ViewManager;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UI工具<br>
|
* UI工具
|
||||||
* 封装了项目所有的UI组件,以减少组件单例模式造成代码的复杂性
|
|
||||||
*
|
*
|
||||||
* @author gewuyou
|
* @author gewuyou
|
||||||
*/
|
*/
|
||||||
public class UiUtil {
|
public class UiUtil {
|
||||||
/**
|
|
||||||
* 标签页布局组件
|
|
||||||
*/
|
|
||||||
private static final JNotepadTabPane TAB_PANE = JNotepadTabPane.getInstance();
|
|
||||||
/**
|
|
||||||
* 视图管理组件
|
|
||||||
*/
|
|
||||||
private static final ViewManager VIEW_MANAGER = ViewManager.getInstance();
|
|
||||||
/**
|
|
||||||
* 状态栏组件
|
|
||||||
*/
|
|
||||||
private static final JNotepadStatusBox STATUS_BOX = JNotepadStatusBox.getInstance();
|
|
||||||
/**
|
|
||||||
* 菜单栏组件
|
|
||||||
*/
|
|
||||||
private static final JNotepadMenuBar MENU_BAR = JNotepadMenuBar.getInstance();
|
|
||||||
/**
|
/**
|
||||||
* 应用程序图标
|
* 应用程序图标
|
||||||
*/
|
*/
|
||||||
private static final Image ICON = new Image(Objects.requireNonNull(UiUtil.class.getResource(AppConstants.APP_ICON)).toString());
|
private static final Image ICON = new Image(Objects.requireNonNull(UiUtil.class.getResource(AppConstants.APP_ICON)).toString());
|
||||||
/**
|
|
||||||
* 设置窗口
|
|
||||||
*/
|
|
||||||
private static final SetStage SET_STAGE = SetStage.getInstance();
|
|
||||||
|
|
||||||
private UiUtil() {
|
private UiUtil() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取设置窗口
|
|
||||||
*
|
|
||||||
* @return org.jcnc.jnotepad.ui.setStage.SetStage
|
|
||||||
* @since 2023/8/30 12:39
|
|
||||||
*/
|
|
||||||
public static SetStage getSetStage() {
|
|
||||||
return SET_STAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取应用程序图标
|
* 获取应用程序图标
|
||||||
*
|
*
|
||||||
@ -67,30 +31,6 @@ public class UiUtil {
|
|||||||
return ICON;
|
return ICON;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取标签页布局组件
|
|
||||||
*
|
|
||||||
* @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane
|
|
||||||
* @apiNote JNotepadTabPane.getInstance()
|
|
||||||
* @see JNotepadTabPane
|
|
||||||
*/
|
|
||||||
|
|
||||||
public static JNotepadTabPane getJnotepadTabPane() {
|
|
||||||
return TAB_PANE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取标签页组件
|
|
||||||
*
|
|
||||||
* @return org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab
|
|
||||||
* @apiNote JNotepadTabPane.getInstance().getSelected()<br>获取当前选中的标签页
|
|
||||||
* @see JNotepadTabPane
|
|
||||||
*/
|
|
||||||
|
|
||||||
public static JNotepadTab getJnotepadtab() {
|
|
||||||
return TAB_PANE.getSelected();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取应用窗口
|
* 获取应用窗口
|
||||||
*
|
*
|
||||||
@ -99,37 +39,6 @@ public class UiUtil {
|
|||||||
* @since 2023/8/29 14:12
|
* @since 2023/8/29 14:12
|
||||||
*/
|
*/
|
||||||
public static Window getAppWindow() {
|
public static Window getAppWindow() {
|
||||||
return TAB_PANE.getSelected().getTabPane().getScene().getWindow();
|
return LunchApp.getWindow();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取视图管理组件
|
|
||||||
*
|
|
||||||
* @return org.jcnc.jnotepad.view.manager.ViewManager
|
|
||||||
* @apiNote ViewManager.getInstance()
|
|
||||||
* @since 2023/8/29 14:13
|
|
||||||
*/
|
|
||||||
public static ViewManager getViewManager() {
|
|
||||||
return VIEW_MANAGER;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取状态栏组件
|
|
||||||
*
|
|
||||||
* @return org.jcnc.jnotepad.ui.root.bottom.status.JNotepadStatusBox
|
|
||||||
* @since 2023/8/29 14:14
|
|
||||||
*/
|
|
||||||
public static JNotepadStatusBox getStatusBox() {
|
|
||||||
return STATUS_BOX;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取菜单栏组件
|
|
||||||
*
|
|
||||||
* @return org.jcnc.jnotepad.ui.root.top.menu.JNotepadMenuBar
|
|
||||||
* @since 2023/8/29 14:15
|
|
||||||
*/
|
|
||||||
public static JNotepadMenuBar getMenuBar() {
|
|
||||||
return MENU_BAR;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,12 +13,12 @@ import java.io.File;
|
|||||||
*/
|
*/
|
||||||
public class TextFileChooserFactory implements FileChooserFactory {
|
public class TextFileChooserFactory implements FileChooserFactory {
|
||||||
|
|
||||||
|
private static final TextFileChooserFactory INSTANCE = new TextFileChooserFactory();
|
||||||
|
|
||||||
private TextFileChooserFactory() {
|
private TextFileChooserFactory() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final TextFileChooserFactory INSTANCE = new TextFileChooserFactory();
|
|
||||||
|
|
||||||
public static TextFileChooserFactory getInstance() {
|
public static TextFileChooserFactory getInstance() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,11 @@ package org.jcnc.jnotepad.ui.module;
|
|||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
|
import org.jcnc.jnotepad.root.center.main.bottom.status.JNotepadStatusBox;
|
||||||
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.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.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
@ -19,9 +20,9 @@ import java.io.IOException;
|
|||||||
*/
|
*/
|
||||||
public class LineNumberTextArea extends BorderPane {
|
public class LineNumberTextArea extends BorderPane {
|
||||||
|
|
||||||
private static final Logger logger=LogUtil.getLogger(LineNumberTextArea.class);
|
|
||||||
static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999,
|
static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999,
|
||||||
99999999, 999999999, Integer.MAX_VALUE};
|
99999999, 999999999, Integer.MAX_VALUE};
|
||||||
|
private static final Logger logger = LogUtil.getLogger(LineNumberTextArea.class);
|
||||||
private static final int MIN_LINE_NUMBER_WIDTH = 30;
|
private static final int MIN_LINE_NUMBER_WIDTH = 30;
|
||||||
private final TextArea mainTextArea;
|
private final TextArea mainTextArea;
|
||||||
private final TextArea lineNumberArea;
|
private final TextArea lineNumberArea;
|
||||||
@ -59,12 +60,12 @@ public class LineNumberTextArea extends BorderPane {
|
|||||||
|
|
||||||
lineNumberArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberWidth());
|
lineNumberArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberWidth());
|
||||||
|
|
||||||
this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> UiUtil.getStatusBox().updateWordCountStatusLabel());
|
this.mainTextArea.caretPositionProperty().addListener((caretObservable, oldPosition, newPosition) -> JNotepadStatusBox.getInstance().updateWordCountStatusLabel());
|
||||||
this.textProperty().addListener((observable, oldValue, newValue) -> {
|
this.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
// 更新行号
|
// 更新行号
|
||||||
updateLineNumberArea();
|
updateLineNumberArea();
|
||||||
// 更新状态栏
|
// 更新状态栏
|
||||||
UiUtil.getStatusBox().updateWordCountStatusLabel();
|
JNotepadStatusBox.getInstance().updateWordCountStatusLabel();
|
||||||
// 自动保存
|
// 自动保存
|
||||||
save();
|
save();
|
||||||
});
|
});
|
||||||
@ -74,7 +75,7 @@ public class LineNumberTextArea extends BorderPane {
|
|||||||
* 以原文件编码格式写回文件
|
* 以原文件编码格式写回文件
|
||||||
*/
|
*/
|
||||||
public void save() {
|
public void save() {
|
||||||
JNotepadTab tab = UiUtil.getJnotepadtab();
|
JNotepadTab tab = JNotepadTabPane.getInstance().getSelected();
|
||||||
if (tab == null) {
|
if (tab == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,30 +1,41 @@
|
|||||||
# 打包
|
# 打包
|
||||||
|
|
||||||
## 准备
|
## 准备
|
||||||
|
|
||||||
1. 下载maven 3.8.8, [Download](https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.zip)
|
1. 下载maven 3.8.8, [Download](https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.zip)
|
||||||
2. 下载GraalVM。在[GraalVM下载页](https://www.graalvm.org/downloads/#)选择Java17,操作系统后,点击Download下载。
|
2. 下载GraalVM。在[GraalVM下载页](https://www.graalvm.org/downloads/#)选择Java17,操作系统后,点击Download下载。
|
||||||
|
|
||||||
# Windows下基于GraalVM的打包
|
# Windows下基于GraalVM的打包
|
||||||
|
|
||||||
## 配置maven和GraalVM
|
## 配置maven和GraalVM
|
||||||
|
|
||||||
1. 将下载的压缩包解压到目录,例如:d:\tools\maven,D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1
|
1. 将下载的压缩包解压到目录,例如:d:\tools\maven,D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1
|
||||||
2. 配置环境变量
|
2. 配置环境变量
|
||||||
|
|
||||||
```
|
```
|
||||||
GRAALVM_HOME=D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1
|
GRAALVM_HOME=D:\tools\graalvm-17\graalvm-jdk-17.0.8+9.1
|
||||||
M2_HOME=d:\tools\maven
|
M2_HOME=d:\tools\maven
|
||||||
```
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
3. 配置PATH环境变量
|
3. 配置PATH环境变量
|
||||||

|

|
||||||
4. 安装visual studio build tools
|
4. 安装visual studio build tools
|
||||||
安装说明:https://www.graalvm.org/latest/docs/getting-started/windows/
|
安装说明:https://www.graalvm.org/latest/docs/getting-started/windows/
|
||||||
a) 下载安装程序:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
|
a) 下载安装程序:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
|
||||||
b) 参考网页中的安装步骤
|
b) 参考网页中的安装步骤
|
||||||
5. 验证安装成功
|
5. 验证安装成功
|
||||||
使用下面命令启动编译环境
|
使用下面命令启动编译环境
|
||||||
|
|
||||||
```
|
```
|
||||||
cmd.exe /k F:\vs\ide\VC\Auxiliary\Build\vcvars64.bat
|
cmd.exe /k F:\vs\ide\VC\Auxiliary\Build\vcvars64.bat
|
||||||
```
|
```
|
||||||
|
|
||||||
需要把F:\vs\ide替换为本地的visual stuido安装路径。
|
需要把F:\vs\ide替换为本地的visual stuido安装路径。
|
||||||
|
|
||||||
6. 进入项目tool目录,执行build.bat进行打包,生成可执行文件。
|
6. 进入项目tool目录,执行build.bat进行打包,生成可执行文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
build.bat
|
build.bat
|
||||||
```
|
```
|
||||||
Loading…
x
Reference in New Issue
Block a user