当前位置: 首页 > news >正文

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 应用}@Overridepublic 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;@FXMLprivate TreeView<String> fileTreeView;@FXMLprivate TextArea markdownEditor;@FXMLprivate WebView markdownPreview;@FXMLprivate Label statusLabel;@FXMLprivate SplitPane splitPane;@FXMLprivate MenuBar menuBar;@FXMLprivate MenuItem togglePreviewMenuItem;@FXMLprivate 

相关文章:

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

项目文件结构 项目的源代码和资源文件存放在以下路径: 源代码: src/main/java/com/kong/markdown/ 包含多个 Java 文件,主要实现了应用的功能: App.java:主类,可能包含应用的启动逻辑。FileService.java:可能与文件操作相关的服务类。MainController.java:控制器类,可…...

git项目提交步骤(简洁版)

1.创建仓库 2.填写 信息 3.点击这个按钮 4.找到要上传的文件&#xff0c;在目录内右键点击 5.依次执行命令 在命令窗口中输入&#xff1a;git init 复制仓库地址&#xff1a; 在命令窗口中输入&#xff1a;git remote add origin 仓库地址 在命令窗口中输入&#xff1a;…...

风水算命系统架构与功能分析

系统架构 服务端&#xff1a;Java&#xff08;最低JDK1.8&#xff0c;支持JDK11以及JDK17&#xff09;数据库&#xff1a;MySQL数据库&#xff08;标配5.7版本&#xff0c;支持MySQL8&#xff09;ORM框架&#xff1a;Mybatis&#xff08;集成通用tk-mapper&#xff0c;支持myb…...

Clojure语言的学习路线

Clojure语言的学习路线 Clojure是一种现代的Lisp方言&#xff0c;运行于Java虚拟机&#xff08;JVM&#xff09;上。它具备强大的函数式编程特性&#xff0c;支持并发和多线程编程&#xff0c;适合处理复杂的数据和计算任务。由于其简洁和灵活的语法&#xff0c;Clojure在数据…...

网络安全核心目标CIA

网络安全的核心目标是为关键资产提供机密性(Confidentiality)、可用性(Availablity)、完整性(Integrity)。作为安全基础架构中的主要的安全目标和宗旨&#xff0c;机密性、可用性、完整性频频出现&#xff0c;被简称为CIA&#xff0c;也被成为你AIC&#xff0c;只是顺序不同而已…...

Wi-Fi Direct (P2P)原理及功能介绍

目录 Wi-Fi Direct &#xff08;P2P&#xff09;介绍Wi-Fi Direct P2P 概述P2P-GO&#xff08;P2P Group Owner&#xff09;工作流程 wifi-Direct使用windows11 wifi-directOpenwrtwifi的concurrent mode Linux环境下的配置工具必联wifi芯片P2P支持REF Wi-Fi Direct &#xff…...

Perl语言的数据结构

Perl语言的数据结构 Perl是一种功能强大的、灵活的脚本语言&#xff0c;广泛用于文本处理、系统管理、网络编程以及许多其他领域。其灵活性不仅体现在语法上&#xff0c;还体现在其丰富的数据结构上。本文将深入探讨Perl的主要数据结构&#xff0c;包括标量、数组、哈希以及引…...

【MFC】设置CTreeCtrl单个节点的文字颜色

问题 功能调整需要依据不同状态设置树控件中单个节点的文字颜色。 分析 1、CTreeCtrl本身有设置文字颜色的接口SetTextColor&#xff0c;但是这个接口是设置树控件整体的文字颜色。 2、在自定义接口可以对树控件单个节点进行更新文字颜色和背景颜色&#xff0c;接收自定义绘制…...

【CSS】设置滚动条样式

文章目录 基本语法用法案例 基本语法 在CSS中&#xff0c;可以使用 ::-webkit-scrollbar 和相关伪元素来为滚动条设置样式&#xff0c;但请注意这些伪元素是非标准的&#xff0c;主要用于WebKit内核浏览器&#xff08;如Chrome、Safari&#xff09;。 ::-webkit-scrollbar CSS …...

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务&#xff0c;如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信&#xff0c;接收作业并提交到执行队列&#xff0c;Gitlab-Runner从队列中获取作业&#xff0c;并允许在不同环境下进行作…...

代码随想录 哈希 test 8

18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 与三数之和类似&#xff0c;重点在剪枝和去重的区别&#xff0c;由于target可正可负&#xff0c;因此需要分两种情况讨论&#xff0c;如果target为正&#xff0c;则若当前选择的元素之和大于target&#xff0c;需要跳出这…...

[SAP ABAP] 使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数据

使用 LOOP AT...ASSIGNING FIELD-SYMBOL... 可以直接修改内表中的数据&#xff0c;而不需要先将内表数据复制到相应的工作区&#xff0c;然后再更新回内表中&#xff0c;从而提高性能 针对上述代码进行优化&#xff0c;我们使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数…...

MySQL数据导出导入

一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...

leetcode 127. 单词接龙

题目&#xff1a;127. 单词接龙 - 力扣&#xff08;LeetCode&#xff09; 先建立一颗trie树&#xff0c;从beginWord开始bfs&#xff1b;bfs的过程中&#xff0c;对trie树进行dfs寻找“只差一个字母”的其他未遍历到的字符串&#xff1b;直到bfs遍历到endWord。 struct Node …...

如何开发一个支持海量分布式锁的应用库

分布式锁是一种用于控制分布式系统中资源访问的同步机制&#xff0c;确保在任意时刻只有一个客户端能够获取到锁&#xff0c;并对共享资源进行操作。 作用 1.保证数据一致性&#xff1a;在多个节点并发执行的情况下&#xff0c;分布式锁可以防止同时修改同一份数据&#xff0c…...

JavaScript系列(17)--类型系统模拟

JavaScript类型系统模拟 &#x1f3ad; 今天&#xff0c;让我们深入探讨JavaScript中的类型系统模拟。虽然JavaScript是一门动态类型语言&#xff0c;但我们可以通过各种方式来实现类型检查和验证。 类型系统基础 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript是…...

openssl编译

关于windows下&#xff0c;openssl编译 环境准备 安装 perl:https://djvniu.jb51.net/200906/tools/ActivePerl5_64.rar安装nasm&#xff1a;https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win64/nasm-2.13.01-installer-x64.exe下载opensll源码&#xff1a;https://o…...

校园网络综合布线系统设计与实践

校园网络综合布线系统设计与实践 摘要&#xff1a;随着信息时代的发展&#xff0c;网络综合布线显得更加重要。综合布线技术也日益引起人的重视。综合布线管理系统是一个实用性十分强的系统工程&#xff0c;同样又是现代社区信息化建设的基础与必要产品&#xff0c;是对多用途…...

如果商品信息更新,爬虫会失效吗?

当商品信息更新时&#xff0c;爬虫是否失效取决于更新的具体内容。以下是一些可能影响爬虫的因素&#xff1a; 可能导致爬虫失效的情况 HTML结构变化&#xff1a;如果 yiwugo 平台更新了商品详情页面的 HTML 结构&#xff0c;比如改变了元素的标签、类名或 ID&#xff0c;那么…...

【UE5 C++课程系列笔记】27——多线程基础——ControlFlow插件的基本使用

目录 步骤 一、搭建基本同步框架 二、添加委托 三、添加蓝图互动框架 四、修改为异步框架 完整代码 通过一个游戏初始化流程的示例来介绍“ControlFlows”的基本使用。 步骤 一、搭建基本同步框架 1. 勾选“ControlFlows”插件 2. 新建一个空白C类&#xff0c;这里…...

终极指南:如何用VS Code和Markdown快速制作专业演示文稿

终极指南&#xff1a;如何用VS Code和Markdown快速制作专业演示文稿 【免费下载链接】marp-vscode Marp for VS Code: Create slide deck written in Marp Markdown on VS Code 项目地址: https://gitcode.com/gh_mirrors/ma/marp-vscode 你是否厌倦了在PPT软件中反复调…...

COMTool图表插件使用教程:实时数据可视化与曲线绘制完整指南

COMTool图表插件使用教程&#xff1a;实时数据可视化与曲线绘制完整指南 【免费下载链接】COMTool Cross platform communicate assistant(Serial/network/terminal tool)&#xff08; 跨平台 串口调试助手 网络调试助手 终端工具 linux windows mac Raspberry Pi &#xff09;…...

从零封装一个MCP4728的C语言驱动库:支持STM32/HAL库,含EEPROM读写状态处理

构建高可靠MCP4728驱动库&#xff1a;STM32 HAL库实战与EEPROM状态管理 在嵌入式开发中&#xff0c;DAC&#xff08;数模转换器&#xff09;是连接数字世界与模拟世界的关键桥梁。MCP4728作为Microchip公司推出的4通道12位I2C接口DAC芯片&#xff0c;凭借其内置EEPROM存储和灵活…...

考前终极口诀合集,30秒过一遍

考前最后冲刺&#xff0c;别再翻教材了&#xff01;把所有核心口诀集中在一起&#xff0c;科科过软考培训对系统集成项目管理工程师考前冲刺从头到尾过一遍&#xff0c;30秒搞定&#xff0c;能掌握不少必会知识点。一、挣值与关键路径——计算题的铁口诀挣值分析口诀&#xff1…...

Perplexity文化新闻搜索效率翻倍:从冷启动到高信噪比输出的7个被低估的底层参数配置

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity文化新闻搜索效率翻倍&#xff1a;从冷启动到高信噪比输出的7个被低估的底层参数配置 Perplexity 的文化新闻检索能力并非仅由模型规模或训练数据量决定&#xff0c;其真实效能高度依赖于七个常被忽…...

别让中文路径坑了你!FaceFusion在Windows和Mac上的完整环境配置与文件规范指南

别让中文路径坑了你&#xff01;FaceFusion在Windows和Mac上的完整环境配置与文件规范指南 在数字创意领域&#xff0c;FaceFusion作为一款强大的AI换脸工具&#xff0c;正受到越来越多内容创作者的青睐。然而&#xff0c;许多用户在初次接触时往往会被一系列看似莫名其妙的错误…...

Microblaze软核处理器在SRAM型FPGA中的抗单粒子效应高可靠加固方案

1. 项目概述&#xff1a;为什么要在太空里“加固”一个软核处理器&#xff1f;在工业自动化、医疗影像或者汽车电子领域&#xff0c;你或许听说过Xilinx FPGA里的Microblaze软核处理器。它就像一个可以随心所欲“捏”出来的32位或64位CPU大脑&#xff0c;开发者能根据项目需求&…...

用Python实战脑电分析:手把手教你计算PLV、MVL、MI跨频耦合指标

Python脑电分析实战&#xff1a;PLV、MVL、MI跨频耦合指标全流程解析 神经振荡的跨频耦合&#xff08;Cross-Frequency Coupling, CFC&#xff09;分析正在成为探索大脑信息处理机制的重要工具。想象一下&#xff0c;当你面对一组EEG数据时&#xff0c;如何从复杂的波形中提取出…...

Google I/O 2026 第二天:Gemini 3.5 实测性能深度解析与 Android XR 生态全景

摘要&#xff1a;Google I/O 2026 大会进入第二天&#xff0c;技术社区开始深度实测 Gemini 3.5 Pro 代号「Cappuccino」。本文汇总第一天 Keynote 后的实测数据&#xff1a;Gemini 3.5 Pro 编程能力达 GPT-5.5 的 92%&#xff0c;成本仅为其 1/8&#xff1b;Gemini 3.5 Flash …...

DeepSeek推理服务崩溃频发?3类隐蔽内存泄漏Bug的精准捕获与48小时修复方案

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek推理服务崩溃频发&#xff1f;3类隐蔽内存泄漏Bug的精准捕获与48小时修复方案 典型泄漏模式识别 DeepSeek-R1/V2推理服务在高并发长周期运行中频繁OOM&#xff0c;经pprof火焰图与heap profile交叉分…...