JUNG布局的首选大小,基于图形的大小。

3

我正在使用JUNG框架,其中包含FRLayout。代码如下:

layout = new FRLayout<String, Number>(graph);
preferredSize = new Dimension(600, 600);

final VisualizationModel<String, Number> visualizationModel = 
new DefaultVisualizationModel<String, Number>(layout, preferredSize);
vv = new VisualizationViewer<String, Number>(visualizationModel, preferredSize);

我已经将它放在GraphZoomScrollPane中。我可以缩放、移动图形,直到看起来像我想要的,但我希望在启动我的Swing应用程序时就是这样。
我想要的是,当加载大型图形时,图形的PreferredSize会根据图形大小动态调整,这样我就不必缩放一亿次才能使顶点不重叠。
没有适合面板的部分通常会“消失”在滚动条后面。
1个回答

1
您可以使用以下方式通过编程进行扩展:
double amount = 1.0;    // Or negative to zoom out.
ScalingControl scaler = new CrossoverScalingControl();
scaler.scale(vv, amount > 0 ? 1.1f : 1 / 1.1f, vv.getCenter());

注意:我之前从StackOverflow获取了这段代码(因此这段代码的功劳不是我的),但我似乎找不到原始问题。
编辑:
我找到了: 如何手动设置Jung可视化的缩放?

谢谢您的回答,我确实使用这种方法来进行我的缩放功能。但是我不知道如何根据我拥有的顶点数量和我正在使用的布局来计算因子。 - Pieter-Jan
我明白 - 我正在尝试实现类似的东西,但目前不是高优先级。如果我发现一个简单的方法,我会编辑我的帖子并让你知道。 - sdasdadas
抱歉晚了,但请尝试使用vv.scaleToLayout(new CrossoverScalingControl())。 - sdasdadas
1
不,它似乎并不能完全解决问题。但没关系,我已经找到了一个解决方法。在启动时,我会显示图表直到第二级,如果要查看更低的级别,则需要展开第二级的节点。虽然我还会再试试,但如果我找到解决方案,我会在这里发布的。 - Pieter-Jan
这是一个晚回复,但你必须在布局上设置setSize。scaleToLayout函数基于vv.getPreferredSize / layout.getSize的比率工作。 - sdasdadas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接