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

news2025/1/9 20:48:50

在这里插入图片描述

在这里插入图片描述

项目文件结构

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

  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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jenkins入门6 --拉取代码

Jenkins代码拉取 需要的插件&#xff0c;缺少的安装下 新建一个item,选择freestyle project 源码管理配置如下&#xff1a;需要添加git库地址&#xff0c;和登录git的用户密码 配置好后执行编译&#xff0c;成功后拉取的代码在工作空间里

数学建模入门——建模流程

摘要&#xff1a;本文介绍了数学建模的一般流程概述。 目录 一、前言 二、数据预处理 三、描述性统计分析 四、模型建立 五、模型评价 一、前言 本文将为想要入门数学建模的同学讲述数学建模的一般流程。但数学建模流程并非一成不变。虽有大致步骤&#xff0c;像分析问题、…

《机器学习》集成学习之随机森林

目录 一、集成学习 1、简介 2、集成学习的代表 3、XGBoost和随机森林的对比 相同点&#xff1a; 不同点&#xff1a; 二、Bagging之随机森林 1、简介 2、随机森林的核心思想 3、随机森林生成步骤 4、随机森林的优点 5、随机森林的缺点 三、随机森林的代码实现 1、…

【HarmonyOS NEXT】鸿蒙应用实现屏幕录制详解和源码

【HarmonyOS NEXT】鸿蒙应用实现屏幕录制详解和源码 一、前言 官方文档关于屏幕录制的API和示例介绍获取简单和突兀。使用起来会让上手程度变高。所以特意开篇文章&#xff0c;讲解屏幕录制的使用。官方文档参见&#xff1a;使用AVScreenCaptureRecorder录屏写文件(ArkTS) 二…

CSS——22.静态伪类(伪类是选择不同元素状态)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>静态伪类</title> </head><body><a href"#">我爱学习</a></body> </html>单击链接前的样式 左键单击&#xff08;且…

JavaWeb开发(六)XML介绍

1. XML介绍 1.1. 什么是XML &#xff08;1&#xff09;XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种很像HTML的标记语言。   &#xff08;2&#xff09;XML 的设计宗旨是传输数据(目前主要是作为配置文件)&#xff0c;而不是显示数据。   &#xff08;3&a…

攻防世界 bug

发现有Register界面&#xff0c;先去注册 登录以后发现以下界面&#xff0c;点击Manage显示you are not admin&#xff0c;并且在注册界面用admin为注册名时显示用户名已存在。初步推测是设法改变admin的密码取得权限。 在主界面一通操作并没有什么发现&#xff0c;去findpw…

maven依赖的配置和排除依赖

1.依赖的配置 1.1位置&#xff1a;写在<properties></properties>标签之下&#xff0c;<project></project>里。 1.2语法固定的格式 <dependencies><dependency></dependency></dependencies> 1.3在 <dependency><…

transformer深度学习实战CCTSDB中国交通标志识别

本文采用RT-DETR作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。RT-DETR以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对CCTSDB交通标志数据集进行训练和优化&#xff0c;该数据集包含丰富的CCTSDB交…

Elastic-Job相关

文档参考视频&#xff1a;09_SpringBoot案例演示_哔哩哔哩_bilibili 一、Elastic-Job介绍 Elastic-Job 是一个轻量级、分布式的任务调度框架&#xff0c;旨在解决分布式环境下的定时任务调度问题。 1.1. Elastic-Job 的核心组件 Elastic-Job 是由多个核心组件构成的&#x…

esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu

最近想用esp32做一个物联网项目&#xff0c;踩坑N个终于有点心得&#xff0c;写下来避免和我一样的小白踩无谓的坑。 写在前面&#xff1a; 第一&#xff0c;大家一定要用linux系统作为编译工具&#xff0c;速度上是windows无法比的&#xff0c;不要因为不熟悉linux而选择win…

(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络

零、开篇趣谈 还记得第一次用支付宝"刷脸"时的新奇感吗&#xff1f;或者被抖音的人脸特效逗乐的瞬间&#xff1f;这些有趣的应用背后&#xff0c;其实藏着一个精妙的AI世界。今天&#xff0c;就让我们开启一段奇妙的人脸识别技术探索之旅吧&#xff01; 一、人脸识…

攻防世界 ics-07

点击之后发现有个项目管理能进&#xff0c;点进去&#xff0c;点击看到源码&#xff0c;如下三段 <?php session_start(); if (!isset($_GET[page])) { show_source(__FILE__); die(); } if (isset($_GET[page]) && $_GET[page] ! index.php) { include(flag.php);…

使用 SQL 和表格数据进行问答和 RAG(6)—将指定目录下的 CSV 或 Excel 文件导入 SQLite 数据库

将指定目录下的 CSV 或 Excel 文件导入 SQLite 数据库。以下是详细代码逻辑&#xff1a; 1. 类结构 该类包含三个主要方法&#xff1a; _prepare_db&#xff1a;负责将文件夹中的 CSV 和 XLSX 文件转换为 SQL 表。_validate_db&#xff1a;用于验证 SQL 数据库中创建的表是否…

各品牌大语言模型汇总

2024年大语言模型快速发展&#xff0c;应用广泛。面对众多选择&#xff0c;我们整理了一份各大语言模型汇总表格&#xff0c;提供清晰参考&#xff0c;助您了解各模型参数&#xff08;截止日期为2025年1月8日&#xff09;。 高通智匠AI支持在Windows/Android/MAC等平台上使用 …

xtu oj 1614 数字(加强版)

输出格式# 每行输出一个样例的结果&#xff0c;为一个整数。 样例输入# 3 1 10 101 样例输出# 1 2 3 解题思路&#xff1a;这个题不要想复杂了&#xff0c;很容易超时。 首先需要注意的点&#xff0c;n<10的10000次方&#xff0c;用int或者long long都会爆&#xff0c;所…

【25考研】川大计算机复试情况,重点是啥?怎么准备?

24年进入复试的同学中&#xff0c;有10位同学的复试成绩为0分。具体是个人原因还是校方原因&#xff0c;还尚不明确。但是C哥提醒&#xff0c;一定要认真复习&#xff01;复试完后不要跟任何人讨论有关复试的题目及细节&#xff01; 一、复试内容 四川大学复试内容较多&#xf…

AR 眼镜之-拍照/录像动效切换-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 拍照/录像动效切换 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;第一阶段动效 2&#xff09;第二阶段动效 2. &#x1f4a0; 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…

STM32-笔记39-SPI-W25Q128

一、什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且 在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为…

JavaScript动态渲染页面爬取之Selenium

前面这篇博客讲解了 Ajax 的分析方法&#xff0c;利用 Ajax接口可以非常方便地爬取数据。只要能找到 Ajax接口的规律&#xff0c;就可以通过某些参数构造出对应的请求&#xff0c;自然就能轻松爬取数据啦。 但是在很多情况下&#xff0c;Ajax请求的接口含有加密参数&#xff0…