我正在使用Jung绘制图表。在我的例子中,一个节点可以同时拥有多个父节点和多个子节点。
因为,一个节点可以有多个父节点,我不能使用树形布局来将我的图形绘制为树。
因此,我正在使用DAGLayout。但是,在DAGLayout中,绘图是自下而上的。
要解决此问题,我已将图形旋转180度以从上到下绘制图形。
以下是代码:
// generate layout
Layout<SimpleTaskDomain, Integer> layout = new DAGLayout<SimpleTaskDomain, Integer>(g);
// fix layout size
layout.setSize(new Dimension(700, 700));
VisualizationViewer<SimpleTaskDomain, Integer> vv = new VisualizationViewer<SimpleTaskDomain, Integer>(layout);
vv.setBackground(Color.white);
vv.setPreferredSize(new Dimension(800, 800));
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<SimpleTaskDomain>());
Dimension d = layout.getSize();
Point2D center = new Point2D.Double(d.width / 2, d.height / 2);
vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).rotate(Math.PI, center);
vv.setVertexToolTipTransformer(vv.getRenderContext().getVertexLabelTransformer());
// vv.getRenderContext().setEdgeShapeTransformer(new
// EdgeShape.Orthogonal<SimpleTaskDomain, Integer>());
vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<SimpleTaskDomain, Integer>());
VertexFontTransformer<SimpleTaskDomain> vff = new VertexFontTransformer<SimpleTaskDomain>();
vff.setBold(true);
vv.getRenderContext().setVertexFontTransformer(vff);
Transformer<SimpleTaskDomain, Paint> vertexPaint = new Transformer<SimpleTaskDomain, Paint>() {
public Paint transform(final SimpleTaskDomain i) {
return Color.GREEN;
}
};
vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
Transformer<SimpleTaskDomain, Shape> vertexSize = new Transformer<SimpleTaskDomain, Shape>() {
public Shape transform(final SimpleTaskDomain i) {
Rectangle2D.Double rectangle = new Rectangle2D.Double(-40, -20, 80, 40);
return AffineTransform.getScaleInstance(2, 2).createTransformedShape(rectangle);
}
};
vv.getRenderContext().setVertexShapeTransformer(vertexSize);
vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
我正在将顶点的形状更改为矩形而不是默认圆。
但是,在输出图中,顶点重叠。
如何控制顶点之间的距离,以避免重叠。
我想要一个树状结构,顶点之间有适当的距离。
感谢阅读!
答案 0 :(得分:0)
你的问题是&#34; DagLayout&#34;,但你的代码示例说&#34; FRLayout&#34;。
无论如何,DagLayout不允许您指定节点距离。
我建议您遵循MinimumSpanningTreeDemo中的大纲:
(1)从图表中提取适当的生成树。
(2)使用TreeLayout布局生成树(允许您指定间距)。
(3)使用树形布局中的布局位置为原始图形创建一个新的StaticLayout实例,并使用该布局进行可视化。