Java JUNG Graph:有些边缘错过了箭头

时间:2011-10-19 15:42:34

标签: java graph jung

我用StaticLayout创建了一个图形并更改了顶点的形状\颜色。我没有改变任何与边缘相关的东西。所有边缘都是定向的,但有些边缘错过了箭头!怎么会发生这种情况?

screenshot http://i54.tinypic.com/2niqzon.jpg

图形可视化代码:

    Layout<Object, String> layout = new StaticLayout<Object, String>(graphProvider.graphFor(market),new MarketVertexLayoutTransformer(market,panel.getMarketGraphPane().getSize() )) ;
    layout.setSize(panel.getMarketGraphPane().getSize());
    VisualizationViewer<Object,String> graphPanel = new VisualizationViewer<Object,String>(layout);
    graphPanel.getRenderContext().setVertexShapeTransformer(new MarketVertexShapeTransformer());
    graphPanel.getRenderContext().setVertexFillPaintTransformer(new MarketVertexColorTransformer());
    panel.getMarketGraphPane().add(graphPanel, BorderLayout.CENTER);
    panel.getMarketGraphPane().revalidate();

图表是

graph = new DirectedSparseGraph<Object, String>();

和边缘就是这样创建的

   graph.addEdge(bundle.getGood()+"->"+transformation,bundle.getGood(),transformation);
   graph.addEdge(transformation+"->"+bundle.getGood(),transformation,bundle.getGood());

由于

2 个答案:

答案 0 :(得分:2)

箭头放置是通过细分边缘直到远段包围在顶点形状中,然后向后移动一个来完成的。如果在操作开始时远端点不在顶点形状内,则应该抛出异常。您选择了正确的解决方案,即在将顶点形状转换到原位之前将它们居中放置在原点上。 汤姆尼尔森

答案 1 :(得分:0)

问题是由EdgeRenderer引起的。如果边连接到顶点的左上角,则会感到困惑。当我从

改变形状时
CIRCLE(new Ellipse2D.Double(0,0,40,40)),
BOX(new Rectangle2D.Double(0,0,40,40));

CIRCLE(new Ellipse2D.Double(-20,-20,40,40)),
BOX(new Rectangle2D.Double(-20,-20,40,40));

连接点移动到顶点的中心,从那里EdgeRenderer可以毫无问题地完成它的魔力。 但是,我不明白为什么改变形状的框架位置会产生差异。如果有人能够解释这一点会很高兴。