JGraph 常见问题解答(续一)
怎样打开/保存基于 XML 的文件格式?
在新 SDK 1.4 中提供了读、写 XML 文件的内建支持。JGraph 体系,尤其是图形模式,非常类似于XML结构。因此,任何基于XML的文件能存入图形模式,而无需下载其它Java库。
参考JGraph中的 GXLReader和SVGWriter的实现 Gxl2svg 示例。GXL 导出可通过内置在 JGraphpad 中的数据转换(拖、放/剪贴板)或使用文件 > 导出 > GXL来实现。在JGraphpad中,打开文本编辑器,选定你想转换到GXL的子图, 然后执行文本编辑器中的 Edit > Copy ,Edit > Paste。这将会将GXL插入剪贴板的文本解释区。
用JGraph怎样生成 SVG 图形?
Batik 项目(http://xml.apache.org/batik/)提供了一个JavaTM的SVG生成器。要查看它的规范,可访问:http://xml.apache.org/batik/svggen.html.
基本的想法通过实例化JGraph的paint方法来创建一个特定的 Graphics2D 扩展,即 SVGGraphics2D。
注意: 与 JGraph, Batik 是个庞大的产品!
布局
算法支持什么设计?
该框架支持设计算法,但并不包括全部的核心API("JGraph")。图形算法是个非常复杂的领域,这个项目的目的是设计一个标准的Swing图形组件。
由Alex Shapiro设计的一个示例算法已成为JGraphpad源码示例中的一部分。Touch 示例主要用来演示在JGraph中生成算法实现的方法。可参考:com.jgraph.graph.Touch。
怎样实现自动布局?
Touch 算法以线程方式实现,它直接在顶点上操作(不能撤消),可以通过用户交互来修改。在普通CPU上有超过50个顶点时,速度会变慢。JGraphpad中提供了一个 "arrange" 功能用来运行多线程,大约500毫秒可以实现另一个设计功能。
作为一种替代方法,设计功能可以通过设置位置来实现,但该设计还没有完成。这种方法也用在Microsoft VisioTM中。通过增加算法也可以实现。(增加算法以改变图形是当前的基本思路。)
由于这些算法依赖于典型的应用,所以暂时还没有计划整合这些算法到枋心API中。但是,如果将这些算法到我们的站点上,也是个不错的选择!因此,如果有人实现了它,我也想知道相关信息!
JGraph 的体系也允许全新设置。我听到的一个示例是化学应用组件(分子结构),需要单独设计各个组件。 (JGraphpad 包提供了组合-查找数据结构,可以被用来计算图形组件。组件是顶点集的连接,也就是可达的有序边。)
设计后怎样刷新?
使用下面的代码:
CellView[] v = graph.getView().getRoots();
graph.setPreferredSize(AbstractCellView.getBounds(v).getSize());
graph.graphDidChange();
注意: 在模型/视图编辑上显示会自动刷新。
(待续…)