【发布时间】:2014-08-18 10:12:13
【问题描述】:
我正在使用 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);
我正在将顶点的形状更改为矩形而不是默认圆形。
但是,在输出图中,顶点是重叠的。
如何控制顶点之间的距离,以免发生重叠。
我想要一个顶点之间有适当距离的树状结构。
感谢阅读!
【问题讨论】:
-
嗨,Vicky,我的情况和你一样,一个节点可以有多个父节点和多个子节点,我需要绘制一棵树,所以你在 JUNG 中为此使用了哪个图的 impl,最后还有哪个布局?谢谢!