更新readme和修复保存

This commit is contained in:
许轲 2023-08-09 11:31:15 +08:00
parent a77b2a4654
commit f9e097311f
3 changed files with 82 additions and 62 deletions

View File

@ -4,31 +4,75 @@
![](https://img.shields.io/badge/Ubuntu-Passing-49%2C198%2C84.svg?style=falt&logo=Ubuntu)
![](https://img.shields.io/badge/MacOS-Passing-49%2C198%2C84.svg?style=falt&logo=Apple)
QQ群386279455
#### 软件运行截图
- Windows 平台
![Windows](screenshot/windows-1.png)
- MacOS 平台
![MacOS](screenshot/Mac0S-1.png)
#### 安装教程
JNotepad 是一个使用 JavaFX 构建的简单文本编辑器,允许用户创建、打开、编辑和保存文本文件。它支持多个标签,每个标签包含一个文本编辑区域。该编辑器提供基本功能,如创建新文件、打开现有文件、保存文件和使用不同名称保存文件。
QQ群:386279455
## 功能介绍
- 创建空白文本区域的新文件。
- 打开现有文本文件进行编辑。
- 实时更新和自动保存文件。
- 使用“另存为”功能将文件另存为不同的名称。
- 在状态栏中显示行数、列数和字符计数信息。
## 安装教程
1. Windows 平台,可以直接使用我编译好的可执行程序或自己编译
[gitee-download]: https://gitee.com/jcnc-org/JNotepad/releases
[java-download]: https://www.oracle.com/cn/java/technologies/downloads/
- [下载][gitee-download]
2. Linux/MacOS 平台,克隆后自行编译
2. Linux/MacOS 平台,查看入门指南
## 入门指南
要使用 JNotepad请按照以下步骤进行:
1. 下载并安装 Java如果尚未安装
- [下载][gitee-download]
2. 克隆或下载 JNotepad 项目。
<pre><code>git clone https://gitee.com/jcnc-org/JNotepad.git</code></pre>
3. 在您偏好的 Java IDE 中打开项目。
## 使用方法
1. 运行 `JNotepad` 类以启动应用程序。
2. 主窗口将显示菜单栏、标签区域和状态栏。
3. 使用菜单栏执行各种操作:
- `文件 > 新建`:创建一个带有空白文本区域的新标签。
- `文件 > 打开`:打开现有文本文件进行编辑。
- `文件 > 保存`:将当前活动标签的内容保存到关联文件中。
- `文件 > 另存为`:将当前活动标签的内容保存为新文件。
4. 在每个标签的文本区域中编辑内容。
5. 状态栏将显示有关光标位置和文本统计信息的信息。
#### 参与贡献
## 依赖项
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>17.0.1</version>
</dependency>
## 软件运行截图
- Windows 平台
![Windows](screenshot/windows-1.png)
- MacOS 平台
![MacOS](screenshot/Mac0S-1.png)
### 参与贡献
1. Fork 本仓库
2. 加入JCNC社区
3. 新建分支
4. 提交代码
5. 新建 Pull Request
1. 加入JCNC社区
1. 加入QQ群:386279455
1. 新建分支
1. 提交代码
1. 新建 Pull Request

13
pom.xml
View File

@ -16,30 +16,17 @@
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>17.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>17.0.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>

View File

@ -66,22 +66,8 @@ public class JNotepad extends Application {
BorderPane.setMargin(statusLabel, new Insets(5, 10, 5, 10));
TextArea textArea = new TextArea(); // 创建新的文本编辑区
textArea.textProperty().addListener((observable, oldValue, newValue) -> {
Tab tab = tabPane.getSelectionModel().getSelectedItem();
if (tab != null) {
File file = (File) tab.getUserData();
if (file != null) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(newValue); // 写入新的文本内容
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
autoSave(textArea); // 自动保存
Tab tab = new Tab("新建文件 " + ++tabIndex); // 创建新的Tab页
tab.setContent(textArea);
tabPane.getTabs().add(tab);
@ -128,24 +114,7 @@ public class JNotepad extends Application {
String text = textBuilder.toString();
TextArea textArea = new TextArea(text); // 创建新的文本编辑区
// 在创建文本编辑区后添加文本变更监听器
textArea.textProperty().addListener((observable, oldValue, newValue) -> {
Tab tab = tabPane.getSelectionModel().getSelectedItem();
if (tab != null) {
File f = (File) tab.getUserData();
if (f != null) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(f));
writer.write(newValue); // 写入新的文本内容
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
autoSave(textArea); // 自动保存
Tab tab = new Tab(file.getName()); // 创建新的Tab页
tab.setContent(textArea);
@ -160,6 +129,27 @@ public class JNotepad extends Application {
}
}
}
private void autoSave(TextArea textArea) {
// 在创建文本编辑区后添加文本变更监听器
textArea.textProperty().addListener((observable, oldValue, newValue) -> {
Tab tab = tabPane.getSelectionModel().getSelectedItem();
if (tab != null) {
File f = (File) tab.getUserData();
if (f != null) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(f));
writer.write(newValue); // 写入新的文本内容
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
// 保存文件事件处理器
private class SaveFileEventHandler implements EventHandler<ActionEvent> {
@Override
@ -187,7 +177,6 @@ public class JNotepad extends Application {
}
}
// 另存为文件事件处理器
private class SaveAsFileEventHandler implements EventHandler<ActionEvent> {
@Override
@ -208,6 +197,7 @@ public class JNotepad extends Application {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
TextArea textArea = (TextArea) selectedTab.getContent(); // 获取当前Tab页的文本编辑区
autoSave(textArea);// 自动保存
String text = textArea.getText();
writer.write(text); // 写入文件内容
writer.flush();
@ -236,7 +226,6 @@ public class JNotepad extends Application {
return text.substring(0, caretPosition).split("\n").length;
}
// 获取光标所在列数
private int getColumn(int caretPosition, String text) {
return caretPosition - text.lastIndexOf("\n", caretPosition - 1);