当前位置: 首页 > 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;这里…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...