Java实现将数据转成xmind脑图(附有工具类)。

news2025/1/10 20:21:38
  • 😜           :是江迪呀
  • ✒️本文关键词Java工具类xmind脑图转换
  • ☀️每日   一言昨日已成过去,未来充满可能,唯有珍惜现在。

[TOPC]

前言

当谈到Xmind时,这是一个非常流行的思维导图工具,可以帮助用户创建清晰、漂亮的思维导图。在日常开发中,我们会遇到将数据转成脑图的场景(其实不常遇到,至少我遇到了,哈哈哈),比如:将Excel中的数据转成xmind脑图格式,用于辅助数据分析。那么下面就让我们一起来看下如何将数据转成脑图。

一、分析

1.1 什么是脑图

在这里插入图片描述
上述图片就是脑图,格式为xmind。可以使用特定的软件打开,比如:MindNowprocessOn等。

1.2 数据结构分析

当我们看到1.1目录中展示的图片后,是不是很熟悉。没错!完全符合树形结构,对应的数据结构就是二叉树,和我们平常开发中见到的菜单树也是一样的。如果我们先要将指定的数据转成脑图就必须将数据处理成二叉树这样的数据结构。
使用Java代码定义这样的具有层级的类,如下代码所示:

public class MindMapNode {
    /**
     * 内容
     */
    private String contentTxt;
    /**
     * 备注
     */
    private String remark;
    /**
     * 子节点
     */
    private List<MindMapNode> sonNode;
}

1.3 数据来源与解析

数据来源取决于不通的场景了,可以来自Excel数据库等。但是无论来自哪里,最终都需要处理成1.2目录中所示的数据结构即可。

二、实现步骤

2.1 数据准备

具有层级结构的json数据:

{  
  "contentTxt": "层级1节点",  
  "remark": "层级1备注",  
  "sonNode": [  
    {  
      "contentTxt": "层级2节点",  
      "remark": "层级2备注",  
      "sonNode": [  
        {  
          "contentTxt": "层级3节点",  
          "remark": "层级3备注",  
          "sonNode": []  
        },  
        {  
          "contentTxt": "层级3节点",  
          "remark": "层级3备注",  
          "sonNode": []  
        }  
      ]  
    },  
    {  
      "contentTxt": "层级2节点",  
      "remark": "层级2备注",  
      "sonNode": []  
    }  
  ],
  "contentTxt": "层级1节点2",  
  "remark": "层级1备注2",
  "sonNode": [
        {
            "contentTxt": "层级2节点2",
            "remark": "层级2备注2",
            "sonNode": [
                {
                    "contentTxt": "层级3节点2",
                    "remark": "层级3备注2",
                    "sonNode": []
                },
                {
                    "contentTxt": "层级3节点2",
                    "remark": "层级3备注2",
                    "sonNode": []
                }
            ]
        },
        {
            "contentTxt": "层级2节点2",
            "remark": "层级2备注2",
            "sonNode": []
        }
    ]
}

2.2 数据处理

String data ="等于2.1中的json数据";
 List<MindMapNode> mindMapNodes = JSONObject.parseArray(s, MindMapNode.class);
createMindMap(mindMapNodes,"测试!",new FileOutputStream("输出路径"));

2.3 生成脑图

(1)准备

依赖:

 <dependency>
      <groupId>com.github.eljah</groupId>
      <artifactId>xmindjbehaveplugin</artifactId>
      <version>0.8</version>
  </dependency>
//创建思维导图的工作空间
IWorkbookBuilder workbookBuilder = Core.getWorkbookBuilder();
IWorkbook workbook = workbookBuilder.createWorkbook();
//获得默认sheet
ISheet primarySheet = workbook.getPrimarySheet();
//设置根主题的标题
rootTopic.setTitleText("测试!");
// 根主题对象
rootTopic.setStructureClass("org.xmind.ui.logic.left");

(1)创建根节点

// 创建根节点
ITopic rootTopic = primarySheet.getRootTopic();

最后创建的子节点都是基于根节点的。

(2)创建子节点

 ITopic topicSon = workbook.createTopic();

(3)设置节点内容

topicSon.setTitleText(mindMapNode.getContentTxt());

(4)设置节点备注

 // 备注
IPlainNotesContent plainContent = (IPlainNotesContent) workbook.createNotesContent(INotes.PLAIN);
plainContent.setTextContent(mindMapNode.getRemark());
INotes notes = topicSon.getNotes();
notes.setContent(INotes.PLAIN, plainContent);
buildNode(mindMapNode.getSonNode(),topicSon,workbook);
topic.add(topicSon);

(5)组装节点

//组装节点到根节点
rootTopic.add(topicSon)

(6)输出

在这里插入图片描述

三、工具类

3.1 节点类:

import lombok.Getter;
import lombok.Setter;
import java.util.List;

@Getter
@Setter
public class MindMapNode {
    /**
     * 内容
     */
    private String contentTxt;
    /**
     * 备注
     */
    private String remark;
    /**
     * 子节点
     */
    private List<MindMapNode> sonNode;
}

3.2 生产脑图工具类

/**
     * 创建脑图
     * @param nodes 目标节点
     * @param root 根节点名称
     * @param os 输出
     * @throws IOException
     * @throws CoreException
     */
    public static void createMindMap(List<MindMapNode> nodes, String root,OutputStream os) throws IOException, CoreException {
        //创建脑图工作空间
        IWorkbookBuilder workbookBuilder = Core.getWorkbookBuilder();
        IWorkbook workbook = workbookBuilder.createWorkbook();
        //获得默认sheet
        ISheet primarySheet = workbook.getPrimarySheet();
        ITopic rootTopic = primarySheet.getRootTopic();
        //根节点的标题
        rootTopic.setTitleText(root);
        rootTopic.setStructureClass("org.xmind.ui.logic.right");
        buildNode(nodes,rootTopic,workbook);
        workbook.save(os);
    }

   /**
     * 创建脑图节点
     * @param mindMapNodes 节点结合
     * @param topic 根节点
     * @param workbook 工作空间
     */
    private static void buildNode(List<MindMapNode> mindMapNodes, ITopic topic, IWorkbook workbook) {
        if (ObjectUtil.isEmpty(mindMapNodes)) {
            return;
        } else {
            for (MindMapNode mindMapNode : mindMapNodes) {
                ITopic topicSon = workbook.createTopic();
                topicSon.setTitleText(mindMapNode.getContentTxt());
                // 备注
                IPlainNotesContent plainContent = (IPlainNotesContent) workbook.createNotesContent(INotes.PLAIN);
                plainContent.setTextContent(mindMapNode.getRemark());
                INotes notes = topicSon.getNotes();
                notes.setContent(INotes.PLAIN, plainContent);
                buildNode(mindMapNode.getSonNode(),topicSon,workbook);
                topic.add(topicSon);
            }
        }
    }

四、结语

这就是关于使用Java将数据转为xmind的全部内容了,转换没有什么特别复杂的逻辑,难点在于如何将数据处理成树状结构这才是关键。我本想着写一个较为通用的工具类实现无论丢入什么数据都可以处理,但是发现有些困难,所以就退而求其次,工具类只能应对已经处理成树状结构。如果能够给你提供帮助非常荣幸。

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

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

相关文章

超级实用!详解Node.js中的path模块和events模块

文章目录 3. path 模块路径操作方法路径格式化方法路径拆分方法 4. events 模块EventEmitter 类创建事件对象注册事件处理函数触发事件一次性事件处理函数异步事件处理函数移除事件处理函数 继承 EventEmitter 类 3. path 模块 用于处理文件路径&#xff0c;包括解析、拼接、规…

删除MySQL中名字首尾固定关键字相同的表

删除MySQL中名字首尾固定关键字相同的表 SELECT CONCAT(drop table , group_concat(TABLE_NAME), ;) FROM information_schema.TABLES WHERE table_schema test AND TABLE_NAME LIKE t_%_history ;查看表列表 SHOW TABLES;通过上图观察发现所有的表都是以 t_ 开头 和以 _his…

Mybatis-Plus学习1

mybatis-plus需要两个依赖&#xff0c;一个lombok&#xff0c;一个mybatis-plus <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version> </dependency> …

Service 基础

今天开始来分享Service 的基础知识&#xff0c;后续我们可以慢慢打磨&#xff0c;分享 Service 的进阶知识和原理 Service 基本概念 Service 是 K8S 最核心的概念了 我们可以通过创建 Service &#xff0c;为一组具有相同功能的容器应用提供一个统一的入口地址&#xff0c;并…

linux上搭建ftp服务

linux上搭建ftp服务简要过程。 1.安装 在目标主机上安装对应软件。 rpm -qa | grep vsftpd # 查看是否已经安装了vsftpd软件 yum install -y vsftpd # 安装2.配置 安装好了之后可在这个路径下编辑配置文件&#xff0c;按需配置&#xff0c;这里采用默认。 vi /etc/vsftp…

螺杆支撑座要怎么选?

螺杆支撑座是连接螺杆和电机的轴承固定座&#xff0c;使用螺杆支撑座可以获得高刚性、高精度的稳定的回转性能&#xff0c;这也是大部分厂商愿意使用的原因之一。 目前&#xff0c;市面上做螺杆支撑座的品牌还比较少&#xff0c;给大家选择的空间也不多&#xff0c;那么我们如何…

centos8运行cloudstack4.18

安装软件&#xff1a; mysql 5.7.42 node v10.24.0 git 2.34.1 jdk openjdk version "11.0.19" 2023-04-18 maven Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)自行配置&#xff1a;nfs 代码克隆地址&#xff1a; git clone https://git-wip-us…

Lesson1-1:OpenCV简介

图像处理 学习目标 了解图像的起源知道数字图像的表示 1 图像的起源 1.1 图像是什么 图像是人类视觉的基础&#xff0c;是自然景物的客观反映&#xff0c;是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布&#xff0c;“像“是人的视觉系统所接受的图在…

ss客服让您在Facebook 的客户服务更便捷

ss客服让您在Facebook Messenger 的客户服务更便捷 在这个信息时代&#xff0c;新兴通讯软件蓬勃兴起&#xff0c;比如Facebook Messenger。事实证明&#xff0c;这对企业来说非常有利&#xff0c;同时突出了电子邮件、网络聊天和电话等传统渠道的局限性。在传统渠道上&#xf…

fastadmin表格列表内部自定义按钮

效果图&#xff1a; 直接上代码&#xff1a; 打开js渲染文件---》找到渲染原生的按钮&#xff1a; {field: "operate",title: __("Operate"),table: table,events: Table.api.events.operate,buttons: [//可多个按钮{name: "record", //名称tex…

vue + js 实现导出excel

效果如下图所示&#xff1a; 下面是具体的步骤&#xff1a; 第一步&#xff1a;安装依赖 **注意&#xff1a;**安装的时候注意版本号 npm install --save file-saver xlsx第二步&#xff1a;新建导出文件 Export2Excel.js /* eslint-disable */ import { saveAs } from f…

C#winform listBox组件批量删除

修改listBox组件属性&#xff1a;可以选中多个板坯号 选中板坯列表&#xff0c;在界面上点击删除按钮&#xff0c;触发删除方法deleteList&#xff1a; private void deleteList() { ListBox.SelectedIndexCollection sic listBoxProducts.SelectedIndice…

亚马逊云科技推出Amazon AppFabric,SaaS安全不断加码

亚马逊云科技近日宣布推出Amazon AppFabric来增强公司在软件即服务&#xff08;SaaS&#xff09;应用程序方面的现有投入。Amazon AppFabric是一项无代码服务&#xff0c;可以为客户提高安全性&#xff0c;管理水平和生产力。只需在亚马逊云科技管理控制台上点击几下&#xff0…

gerrit 遇到的问题汇总

更新远程代码 git pull --rebase 回退到指定版本 get reset --hard commitid 修改之前的提交 git commit --amend 问题一 本地提交了两个记录到远程&#xff0c;远程还没有合并&#xff0c;本地使用 git reset --soft HEAD~1 回退到了上一个提交&#xff0c;现在需要将本地…

最强的“矛“ 验关键的“盾“ | “铸网-2023“ 赛宁数字孪生靶场深度验证湖南工业互联网安全

为深入推动“智赋万企”数字安全屏障工程&#xff0c;由工业和信息化部网络安全管理局指导&#xff0c;湖南省工信厅和湖南省通管局主办的“铸网—2023”湖南省工业互联网企业网络安全实战攻防演练&#xff0c;于近日圆满收官。赛宁网安以数字孪生靶场为基础&#xff0c;构建专…

学习Vue3——Ref全家桶

参考地址 小满Vue3视频 ref 创造响应式对象 这样修改num的值是可以&#xff0c;但是页面展示不正常&#xff0c;因为这不是响应式的&#xff0c;无法被vue追踪 <template><div>{{ num }}</div><button click"change">修改</button&g…

企业电子招投标采购系统源码之-java spring cloud

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

JavaSE-13 【API工具类和包装类】

文章目录 JavaSE-13 【API工具类和包装类】第一章 Object类1.1 概述1.2 toString 方法1.3 equals 方法1.4 Objects类 第二章 日期时间类2.1 Date类2.2 DateFormat类2.3 Calendar类 第三章 System类3.1 类介绍3.2 currentTimeMillis方法3.3 arraycopy方法 第四章 包装类4.1 概述…

海思3559:MMZ内存、OS内存配置

前言 海思3559的DDR最大支持到8GB hi3559av100芯片的内存地址范围 (1)通过查阅数据手册可知《Hi3559AV100 专业型 Smart IP Camera SoC 用户指南》&#xff0c;芯片的内存地址范围是0x4000_0000-0x23FFF_FFFF&#xff0c;最大能支持8G内存&#xff1b;   (2)海思芯片把内存分…

Matlab绘制多个曲线的图及局部放大细节展示

绘制多个曲线的图及局部放大细节展示 在科学研究中&#xff0c;经常需要绘制多个曲线并展示局部放大的细节(如下图)。 本篇博客介绍了如何使用MATLAB绘制多个曲线&#xff0c;并在同一张图中添加局部放大图&#xff0c;以展示具体细节。 示例数据 首先&#xff0c;我们准备…