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

news/2025/2/22 0:05:17/
  • 😜           :是江迪呀
  • ✒️本文关键词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();//获得默认sheetISheet 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.ppmy.cn/news/664584.html

相关文章

计算机硬件中内存的作用是什么,系统硬件中内存XMP是什么意思?有必要开吗?内存XMP模式的作用与开启教程...

系统硬件中内存是电脑与CPU进行沟通的桥梁,它是一台电脑不可或缺的硬件之一,重要性至关重要。而我们在选购内存的时候,会看到在一些内存参数中注明支持X.M.P,那么电脑内存XMP是什么意思?有必要开吗?下面小编为大家分享一下关于内存XMP模式的作用与开启教程,大家来学习一…

c语言程序设计干什么的 华硕,亲历华硕的面试过程

亲历华硕的面试过程 下午1&#xff1a;30的笔试。中午12&#xff1a;00从学校出发&#xff0c;大概1&#xff1a;05到了那儿。路线是地铁到莘庄&#xff0c;换五号线到银都路。下来后看到莘庄工业园区的大牌子&#xff0c;那条与轻轨垂直的路就是银都路&#xff0c;沿则走到第一…

华硕aura完全卸载_AURA神光同步是什么意思?AURA SYNC神光同步教程

如果想要组装一台电脑,那么我们就需要精选每一个硬件,了解各个硬件的参数,相信您在选购硬件的时候,经常可以看到主板、机箱、内存、风扇、CPU散热器等硬件支持RGB神光同步,这些硬件特别适合喜爱光污染人群,那么AURA神光同步是什么意思?下面装机之家分享一下AURA SYNC神光…

个人计算机品牌,pc机主要品牌,pc机是什么

如今&#xff0c;计算机已经成我们生活中不可分割的一个部分&#xff0c;也是每个家庭中必备的数码家电之一。 针对近期需要购买PC的朋友&#xff0c;小兔为大家整理了部分热门pc机的价格。 联想Lenovo1.联想Erazer异能者D3000&#xff1a;Intel赛扬四核CPU&#xff0c;2GBROM5…

pyecharts图形在Jupyter-notebook中不显示问题

问题&#xff1a;在jupyter-notebook中使用pyecharts作图&#xff0c;渲染到jupyter中不显示 图形对象.render_notebook(foo.html)原因&#xff1a;渲染图形的echarts的js静态资源加载不出来 <script type"text/javascript" src"https://assets.pyecharts.…

Java安全——存取控制器

Java安全 存取控制器 Java安全中的存取控制器是一种技术&#xff0c;用于控制访问应用程序中的资源。它的基本思想是允许或拒绝特定用户对系统资源的访问。存取控制器包括四个关键部分: 主体(subject), 权限(permission), 对象(object)和存取控制策略(access control policy)。…

从风光到巨额亏损 老企业夏普衰落真相是什么?

从“日本最创新的企业”和“液晶之父”的神坛上跌落&#xff0c;夏普最终找到了鸿海这根救命稻草。郭台铭入主一年后的夏普&#xff0c;财务状况与经营状况均已好转&#xff0c;在这个创新速度比眨眼速度还快的时代&#xff0c;靠吃老本的夏普能够重现辉煌? 鸿海董事长郭台铭…

“8K+AI”成三星电视高端标配,把握“长期价值”电视行业仍有故事可讲

文|曾响铃 来源|科技向令说&#xff08;xiangling0815&#xff09; 从上世纪20年代开始&#xff0c;电视机从无到有&#xff0c;逐渐走入人类生活&#xff0c;并给家庭娱乐带来翻天覆地的改变。回望电视机的发展历程&#xff0c;不只是简单归结于“屏幕”的进化&#xff0c;其…