小编典典
几年前(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库说同样的话。并非每个人都具有事后看来的好处吗?:)
由于您是大约一个月前(在撰写本文时)提出此问题的,所以我想知道您的决定是什么,如果您继续实施该计划,结果会如何。
2020-12-03