JavaFx 21 项目Markdown 预览、编辑、新建、文件树、删除、重命名

在这里插入图片描述

在这里插入图片描述

项目文件结构

项目的源代码和资源文件存放在以下路径:

  1. 源代码

    • src/main/java/com/kong/markdown/ 包含多个 Java 文件,主要实现了应用的功能:
      • App.java:主类,可能包含应用的启动逻辑。
      • FileService.java:可能与文件操作相关的服务类。
      • MainController.java:控制器类,可能负责与 UI 的交互。
      • MarkdownProcessor.java:处理 Markdown 解析和预览的类。
      • UIHelper.java:辅助类,可能用于界面上的一些常见功能。
  2. 资源文件

    • src/main/resources/ 包含应用的静态资源文件:
      • .css 文件:样式表,如 dark.csslight.cssstyles.css
      • .fxml 文件:JavaFX 的 FXML 文件,用于定义 UI 布局。
      • icons/:图标文件,用于界面显示的图标。
      • markdown.exe:可能是 Markdown 相关的可执行文件,或用于编辑的工具。
      • info.md:Markdown 格式的文本,可能作为应用的一部分或示例内容。
      • META-INF/MANIFEST.MF:包含 JAR 文件元数据的清单文件。

重点文件

1. pom.xml 配置文件

pom.xml 文件已经配置了 JavaFX 依赖,并且包含 javafx-maven-plugin 来处理 JavaFX 应用的构建。

2. App.java

这是应用的主类。它通常是 javafx.application.Application 的子类,并重写了 start() 方法,作为应用的入口。

3. FXML 文件
  • main-view.fxml:用于定义应用的用户界面布局,是 JavaFX 的界面描述文件。
4. CSS 文件
  • dark.csslight.css:定义了两种主题的样式表,分别用于深色和浅色模式的 UI。

App.java 代码

这是应用的主类,它继承自 javafx.application.Application,并且重写了 start() 方法,这是 JavaFX 应用的入口。以下是该类的关键完整代码:

package com.kong.markdown;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

import java.io.InputStream;

public class App extends Application {
   

    public static void main(String[] args) {
   
        launch();  // 启动 JavaFX 应用
    }

    @Override
    public void start(Stage stage) throws Exception {
   
        // 加载 FXML 文件,设置主界面
        FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource("/main-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 1200, 600);

        // 设置窗口标题和图标
        stage.setTitle("Markdown Editor - 更优雅的Markdown编辑器");
        InputStream iconStream = getClass().getResourceAsStream("/icons/icon.png");
        if (iconStream == null) {
   
            throw new IllegalStateException("Icon resource not found!");
        }
        stage.getIcons().add(new Image(iconStream));

        // 设置窗口大小及最小限制
        stage.setWidth(1200);
        stage.setHeight(600);
        stage.setMinWidth(800);
        stage.setMinHeight(400);

        // 显示窗口
        stage.setScene(scene);
        stage.show();
    }
}
主要功能:
  • 主类 App:继承 Application 类,是 JavaFX 应用的入口。
  • start() 方法:设置应用的主窗口,包括:
    • 加载 FXML 布局文件:main-view.fxml
    • 设置窗口的标题、图标以及大小。
    • 使用 FXMLLoader 加载界面布局,设置窗口大小和最小限制。
    • 显示窗口。

该代码简洁地启动了 JavaFX 应用,并且设置了应用窗口的界面和样式。

main-view.fxml 布局文件

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.web.WebView?>
<BorderPane xmlns:fx="http://javafx.com/fxml" xmlns="http://javafx.com/javafx"
            fx:controller="com.kong.markdown.MainController">
    <top>
        <MenuBar fx:id="menuBar">
            <Menu text="文件">
                <MenuItem text="打开"/>
                <MenuItem text="保存" onAction="#onSaveFile"/>
                <SeparatorMenuItem/>
                <MenuItem text="退出" onAction="#onExitApp"/>
            </Menu>
            <Menu text="视图">
                <CheckMenuItem text="显示预览" selected="true" onAction="#onTogglePreview"
                               fx:id="togglePreviewMenuItem"/>
            </Menu>
        </MenuBar>
    </top>
    <center>
        <SplitPane dividerPositions="0.2, 0.6" fx:id="splitPane">
            <!-- 左侧的文件树 -->
            <TreeView fx:id="fileTreeView"/>
            <!-- 左侧的 Markdown 编辑器 -->
            <TextArea fx:id="markdownEditor" prefWidth="200"/>
            <!-- 右侧的 HTML 预览 -->
            <WebView fx:id="markdownPreview" prefWidth="200"/>
        </SplitPane>
    </center>

    <!-- 在底部添加状态栏 -->
    <bottom>
        <Label fx:id="statusLabel" text="状态栏:" style="-fx-padding: 5px;"/>
    </bottom>
</BorderPane>

这是 JavaFX 应用的界面布局文件,使用了 FXML 格式。该文件定义了一个 BorderPane 布局,主要分为几个区域:

  1. 顶部菜单栏 (top)

    • 包含一个 MenuBar,包括两个菜单:
      • 文件菜单:包含 “打开”、“保存” 和 “退出” 功能项。 “保存” 和 “退出” 菜单项绑定了对应的动作(onSaveFileonExitApp)。
      • 视图菜单:包含一个复选框菜单项 “显示预览”,其绑定了 onTogglePreview 动作。
  2. 中心区域 (center)

    • 使用 SplitPane 布局将中心区域分为两个部分:
      • 左侧区域:一个 TreeView 控件,用于显示文件树。
      • 右侧区域:一个 Markdown 编辑器(具体控件未完全显示,可能是 TextArea 或其他控件)。

    SplitPane 控制分隔条的位置,以便用户调整左侧和右侧的区域大小,dividerPositions="0.2, 0.6" 表示初始的比例。

主要控件:

  • MenuBar:包含文件操作和视图设置的菜单。
  • SplitPane:用于分割左右区域,适合实现 Markdown 编辑器和预览分屏效果。
  • TreeView:左侧的文件浏览树,用户可以在其中浏览和选择文件。

MainController.java 控制器类

package com.kong.markdown;

import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.web.WebView;
import javafx.stage.FileChooser;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author kong
 */
public class MainController {
   
    private final MarkdownProcessor markdownProcessor = new MarkdownProcessor();
    private final FileService fileService = new FileService();
    private File currentFile;
    private boolean isPreviewVisible = true;
    @FXML
    private TreeView<String> fileTreeView;
    @FXML
    private TextArea markdownEditor;
    @FXML
    private WebView markdownPreview;
    @FXML
    private Label statusLabel;
    @FXML
    private SplitPane splitPane;
    @FXML
    private MenuBar menuBar;
    @FXML
    private MenuItem togglePreviewMenuItem;

    @FXML
    private 
### 使用 JavaFX 解析 Markdown 文件或文本 为了在 JavaFX 应用程序中解析并显示 Markdown 文本,可以采用第三方库来完成这一任务。一种常见的做法是利用 `marked4j` 或者其他类似的库来进行转换工作。 对于具体的实现方式如下: #### 导入所需依赖项 如果使用 Maven 构建工具,则可以在项目的 pom.xml 中加入以下依赖声明以引入 marked4j[^1]: ```xml <dependency> <groupId>com.github.rjeschke</groupId> <artifactId>txtmark</artifactId> <version>0.13</version> </dependency> ``` #### 创建简单的 JavaFX 应用来展示 Markdown 内容 下面是一个基本的例子,展示了如何加载一段 Markdown 格式的字符串并通过 WebView 组件将其呈现出来: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.web.WebView; import javafx.stage.Stage; public class MarkdownViewer extends Application { @Override public void start(Stage primaryStage) { String markdownContent = "# Hello World!\nThis is an example of **bold** and *italic* text."; // 将 Markdown 转换为 HTML String htmlContent = TxtMark.process(markdownContent); WebView webView = new WebView(); webView.getEngine().loadContent(htmlContent, "text/html"); Scene scene = new Scene(webView, 800, 600); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 此代码片段首先定义了一段简单的 Markdown 文本,接着调用了 `TxtMark.process()` 方法将这段文字转化为 HTML 形式,最后通过设置给 `WebView` 的引擎实现了可视化效果。 另外值得注意的是,在某些情况下可能还需要额外配置 CSS 来美化最终展现出来的页面样式;同时考虑到性能因素以及跨平台兼容性的需求,也可以探索更多专门针对 JavaFX 设计的解决方案或者插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值