您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

比较用于绘制网络拓扑的开源Java图形绘制框架(JUNG和Prefuse)

比较用于绘制网络拓扑的开源Java图形绘制框架(JUNG和Prefuse)

几年前(2007年?),我使用预熔技术可视化呼叫数据记录。我考虑了预注,jung,jgraph和其他一些内容,然后选择了预注。刚开始时,将我的头缠在预告片上有点困难,但是一旦我熟悉了它,它真的很容易(扩展)并且使用起来很有趣。我想对JUNG可以说相同,但我从未尝试过。

1)预先添加用于绘制平行边缘的自定义渲染器非常容易- 您可以将认EdgeRenderer子类化并覆盖render()方法。无需“基本数据级别更改”。如果您想将其视为MVC素材,则这些都在视图部分中。

2)这根本不是问题。有多种方法可以做到这一点:1)您可以有两个渲染器- 一个用于绘制有向边缘的渲染器,一个用于绘制无向边缘的渲染器,它们将很好地工作,并适当地对边缘进行分组。2)放置一个标志(在预言中在后勤表元组添加一个布尔列)以指示边缘是否有向,并根据该标志相应地在EdgeRender中跳过箭头绘制部分。

3)这很容易

4)同上

5)最后一个预发布版本是“预发布beta版本2007.10.21”。在此之前,我使用了一个,在动态添加删除节点时,它可能具有竞争条件- 我猜想它缺少一些同步关键字。我通过确保在添加删除节点时停止所有动画和动作(颜色,大小,布局)来解决该问题- 也不要忘记也更新lucene索引(如果您确实使用其内置的lucene搜索引擎)。最新的解决方案应该可以解决此比赛问题,但是我从来没有机会尝试一下。

6)既然您提到了“多个标签”,我认为这不是“修改图形并重绘”的问题- 只是自定义标签/边缘渲染器仅绘制相关标签的问题,因此这并不是一个大问题。而且我也不认为这与5相关。

7)我不惊讶于预混和JUNG的FruchtermanReingoldLayout呈现方式有所不同- 有一些因素可能会影响其中之一,即每个实现开始计算的起始节点,因此我不必担心这个问题。预先尝试不同的内置图形布局算法是很容易的,因此您可以继续进行检查,以找出最接近您想要的图形布局算法。查看RadialLayout和BalloonTreeLayout的星形布局。ForceDirectedLayout需要进行多次迭代才能使节点的放置“稳定”。请注意,不必显示这些迭代,因此您可以在后台运行它并呈现最终结果。

我没有用过JUNG,所以我无法对此发表过多评论

根据我对预涂胶的经验,我极力推荐此方法,因为它经过精心设计(IMHO),并且组件之间的可回收性分开。杰弗里·海尔(Jeffrey Heer)(预言作者)在这里确实做得很好。

如果您使用预熔,要注意的事情(这是我在使用预熔时生动地记得的两个“痛拇指”):

1)有一个错误,即当缩小时,节点标签未适当缩小,从而溢出了节点的边界框,这会在节点移动时留下字体绘制工件,因为渲染器仅清除并重新绘制节点边界内的内容框。IIRC,这是由AWT字体指标本身的错误引起的。解决方法是在标签和节点边界框??之间留出足够的边距。

2)扩展内置布局时,您可能会遇到一个或两个“范围问题”,其中您要访问的超类成员被赋予了private属性而不是protected属性,因此解决方案是修改库本身,或者创建一个不继承的新类(这可能会很痛苦!)。我猜您可以对其他一些Java库说同样的话。并非每个人都具有事后看来的好处吗?:)

由于您是大约一个月前(在撰写本文时)提出此问题的,所以我想知道您的决定是什么,如果您继续实施该计划,结果会如何。

java 2022/1/1 18:25:19 有468人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶