关于 脑图
脑图,也叫 思维导图 ,它的出现给我们的工作和生活带来很大的便捷,可以帮助我们更快的理解一些复杂的事务,捋清楚其中的逻辑。我们常见的可能是技术学习类脑图,测试一般也会有关于测试分析的脑图,对于一些影视爱好者,也会用脑图来分析各个人物的错综复杂的关系。
现在,世面上的脑图工具,除了大家常用的,还有很多,并且使用人数也很多,比如可在线绘制的ProcessOn,百度脑图,还有可安装本地,支持云同步的亿图脑图,也就是 MindMaster 。
这些思维导图工具,基本功能都差不多,但是各自也有特色功能。这些我都有体验过,就一些基础而言,还是 Xmind 免费体验就够用,百度脑图git上有项目kityminder,可以拿来自己改改本地用,MindMaster比较好一点,支持水印,就是可能要收费,可以自己科学上网搞定一下。
但是,如果说,我想用Java生成脑图怎么弄?目前只有一个答案,就是用Xmind的提供的API,虽然可能版本比较老,但是基本够用。(大家要是还有其他好的资源,分享一下啦:tiaopi:)
Xmind API介绍
xmind git地址:
下面我们介绍一下关于Xmind Api:
Xmind 提供创建、操作、保存思维导图的功能,这些功能的接口都在核心组件 org.xmind.core 中定义,这里放几个核心的接口:
- org.xmind.core.IWorkbook – 代表一个完整的思维导图,其中可能包括多个工作表和样式信息,以及图像、附件和其他文件。
- org.xmind.core.ISheet – 代表思维导图中的单个工作表。每张纸都有一个中心主题。
- org.xmind.core.ITopic – 代表思维导图上工作表中的一个主题。一个主题只有一个父主题(除非它是工作表的中心主题),并且许多主题有任意数量的子主题。除了这些主界面之外,还有几个用于特定目的。其中一些是:
- org.xmind.core.IRelationship – 代表任意两个主题之间的关系
- org.xmind.core.IControlPoint – 表示用于设置曲线的关系上的一个点
- org.xmind.core.IBoundary – 一组相邻主题
- org.xmind.core.ISummary – 类似于边界,但附加了一个主题节点
- org.xmind.core.INumbering – 附加到主题及其子项的编号模式
- org.xmind.core.ITopicExtension – 允许将自定义扩展添加到主题
- org.xmind.core.IManifest – 控制用于添加附件的 xmind 文档清单
- org.xmind.core.marker.IMarker – 小图标添加到主题
- org.xmind.core.marker.IMarkerRef – 参考标记
- org.xmind.core.marker.IMarkerResource – 用于标记图标图像的资源
最后,还有一些需要静态方法和字段的基类:
- org.xmind.core.Core – 通用事件定义,以及用于实例化许多接口的静态方法
- org.xmind.core.util.Point – 用于设置分离主题的坐标
- org.xmind.ui.style.Styles – 包含属性和值的所有样式定义
如果是创建一个基础的脑图,那么,我们就需要通过 I workbook Builder 界面,创建一个工作簿 IWorkbook , IWorkbook 提供默认的工作表 ISheet ,每一个 ISheet 都有一个根主题 ITopic ,然后可以通过 IWorkbook 创建新主题,并通过 ITopic 里面的 add 方法,对主题进行关联。
结构:
Xmind 有多种类型的结构可用于显示地图等信息。
设置这些值的方法很简单,但是需要在 API 中填写完整的类名,通过 ITopic 的 setStructureClass(String classname) 方法,传入结构的类名即可。
例如:
topic.setStructureClass("org.xmind.ui.fishbone.leftHeaded");
下表列出了各种可用的结构,以及每个结构的类。
结构类型 |
结构类名 |
地图(默认) |
“”-空字符串 |
左头鱼骨 |
org.xmind.ui.fishbone.leftHeaded |
右头鱼骨 |
org.xmind.ui.fishbone.rightHeaded |
左逻辑图 |
org.xmind.ui.logic.left |
正确的逻辑图 |
org.xmind.ui.logic.right |
向下组织图 |
org.xmind.ui.org-chart.down |
向上组织图 |
org.xmind.ui.org-chart.up |
电子表格 |
org.xmind.ui.spreadsheet |
左树 |
org.xmind.ui.tree.left |
右树 |
org.xmind.ui.tree.right |
浮动 |
org.xmind.ui.map.floating |
超链接:
可以设置三种超链接:
- 网址
- 话题
- 附件(文件)
网址: topic2.set Hyperlink (“”); // URL
话题: topic1.seHyperlink(“xmind:#” + topic2.getId()); // topic
topicID 是主题的内部 ID,但是注意这个id每次加载会重新生成。
附件: topic3.setHyperlink(“xap:attachments/filename”); // attachment
附件要求文件放在xmind文档中。
笔记
要创建新笔记,首先创建一个 INotesContent ,它有两种类型 – IPlainNotesContent 和 IHtmlNotesContent 。一个 INotes 对象从主题获得。如果该主题上设置了注释,则返回该注释。否则,将创建一个新对象并将其附加到该主题。
IPlainNotesContent plainContent = (IPlainNotesContent) workbook.createNotesContent(INotes.PLAIN);
plainContent.setTextContent("This is the note");
INotes notes = topic1.getNotes();
notes.setContent(INotes.PLAIN, plainContent);
除此之外,还提供了 编号、标签、设置风格、附件、图片、标记、边界、总结、扩展主题、寻找话题、关系 等方法,大家可以根据需要自行查看。
创建Xmind脑图
1、添加依赖
<dependency>
<groupId>com.github.eljah</groupId>
<artifactId>xmindjbehaveplugin</artifactId>
<version>0.8</version>
</dependency>
2、创建脑图
这里创建,我们可以简单写一张脑图,实际应用中,一般是结合递归,实现整个逻辑。比如,你想知道一个文件夹下的所有文件结构,你想把一本书根据目录生成一个脑图……
我在工作中的应用,是扫描代码,然后生成接口和方法之间的调用链,将扫描的链路保存在一个对象中,然后根据需要把它结构化,最后生成调用链。
如图(考虑信息安全,部分接口名称打码):
简单写个Demo:
package com.hundsun.broker;
import org.xmind.core.*;
import java.io.IOException;
import java.util.ArrayList;
/**
* @author 悠悠做神仙
* @version 1.0.0
* @ProjectName yyzsxDemo
* @ClassName CreateXmind.java
* @Description TODO
* @createTime 2021年08月26日 18:32:00
*/
public class CreateXmind {
public static void main(String[] args) throws CoreException, IOException {
String root = "演示脑图";
String xmindPath = "./demo.xmind";
createXmind(root, xmindPath);
}
public static void createXmind(String root, String path) throws CoreException, IOException {
// 创建思维导图的工作空间
I Workbook Builder workbookBuilder = Core.getWorkbookBuilder();
IWorkbook workbook = workbookBuilder.createWorkbook();
// 获得默认sheet
ISheet primarySheet = workbook.getPrimarySheet();
// 获得根主题
ITopic rootTopic = primarySheet.getRootTopic();
// 设置根主题的标题
rootTopic.setTitleText(root);
//正确的逻辑图 org.xmind.ui.logic.right
rootTopic.setStructureClass("org.xmind.ui.logic.right");
//创建所有节点的集合
ArrayList<ITopic> chapterTopics = new ArrayList<>();
//创建一级主题
ITopic topic = workbook.createTopic();
//给主题设置标题名称
topic.setTitleText("第一个,一级节点");
chapterTopics.add(topic);
//创建一级主题第二个
ITopic topic1 = workbook.createTopic();
//给主题设置标题名称
topic1.setTitleText("第二个,一级节点");
//父主题需要直接加到结合里面,后面会一起和跟节点关联
chapterTopics.add(topic1);
//设置二级主题,关联到第二个一级节点
ITopic topicSecond = workbook.createTopic();
topicSecond.setTitleText("二级节点");
/*二级节点是一级节点的子节点,所以可以直接进行关联(这里因为父节点刚加进去,所以坐标应该是size-1),无需add
节点提供三种关联关系:
String ATTACHED = "attached";
String DETACHED = "detached";
String SUMMARY = "summary";
*/
chapterTopics.get(chapterTopics.size() - 1).add(topicSecond, ITopic.ATTACHED);
//给二级节点设置笔记
IPlainNotesContent plainContent = (IPlainNotesContent) workbook.createNotesContent(INotes.PLAIN);
String content = "我是笔记内容";
plainContent.setTextContent(content);
INotes notes = topicSecond.getNotes();
notes.setContent(INotes.PLAIN, plainContent);
//把所有一级节点都加到根节点上
chapterTopics.forEach(it -> rootTopic.add(it, ITopic.ATTACHED));
workbook.save(path);
}
}
我们执行一下,看一下效果:
大功告成了,输出确实简单了点,主要是为了演示,工作中大家可以结合实际,生成需要的脑图结构!