2011-03-13 66 views
3

我有一些图,我想使用JUNG2来显示,如下图所示。JUNG布局问题

enter image description here

我已经打了JUNG2的一些布局,但我总是得到这样的图像:

enter image description here

是否有可能,我想铺陈图不写一个新的布局?

在此先感谢

德米特里

UPD:这里是我用于可视化图形代码:

private Embedded createSampleGraph() { 
Embedded imageComponent = null; 

try { 
    final DocumentBuilderFactory docBuilderFactory = 
      DocumentBuilderFactory 
        .newInstance(); 
    final DocumentBuilder docBuilder = 
      docBuilderFactory.newDocumentBuilder(); 
    final Document document = docBuilder.newDocument(); 
    final Element svgelem = document.createElement("svg"); 
    document.appendChild(svgelem); 

    final SVGGraphics2D graphic2d = new SVGGraphics2D(document); 

    final Graph<String, String> graph = createGraph(); 
    final VisualizationImageServer<String, String> server = 
      createServer(graph); 

    server.printAll(graphic2d); 

    final Element el = graphic2d.getRoot(); 
    el.setAttributeNS(null, "viewBox", "0 0 350 350"); 
    el.setAttributeNS(null, "style", "width:100%;height:100%;"); 

    final ByteArrayOutputStream bout = new ByteArrayOutputStream(); 

    final Writer out = new OutputStreamWriter(bout, "UTF-8"); 
    graphic2d.stream(el, out); 

    final JungResource source = new JungResource(bout); 

    TPTApplication.getCurrentApplication().addResource(source); 

    imageComponent = new Embedded("", source); 

    imageComponent.setWidth(DEFAULT_WIDTH_PIXELS, UNITS_PIXELS); 
    imageComponent.setHeight(DEFAULT_HEIGHT_PIXELS, UNITS_PIXELS); 
    imageComponent.setMimeType("image/svg+xml"); 
    addComponent(imageComponent); 
} catch (final UnsupportedEncodingException exception) { 
    LOGGER.error(ErrorCodes.M_001_UNSUPPORTED_ENCONDING, exception); 
} catch (final SVGGraphics2DIOException exception) { 
    LOGGER.error(ErrorCodes.M_002_SVG_GRAPHICS_2D_IO, exception); 
} catch (final ParserConfigurationException exception) { 
    LOGGER.error(ErrorCodes.M_003_PARSER_CONFIGURATION, exception); 
} 
return imageComponent; 
} 

private VisualizationImageServer<String, String> createServer(
    final Graph<String, String> aGraph) { 
final Layout<String, String> layout = new FRLayout<String, String>(
     aGraph); 

layout.setSize(new Dimension(300, 300)); 
final VisualizationImageServer<String, String> vv = 
     new VisualizationImageServer<String, String>(
       layout, new Dimension(350, 350)); 
vv.getRenderContext().setVertexLabelTransformer(
     new ToStringLabeller<String>()); 
return vv; 
} 

private Graph<String, String> createGraph() { 
final Graph<String, String> graph = 
     new DirectedSparseMultigraph<String, String>(); 
final String vertex1 = "IE"; 
final String vertex2 = "P1"; 
final String vertex3 = "P2"; 
final String vertex4 = "P3"; 
final String vertex5 = "FE"; 

graph.addVertex(vertex1); 
graph.addVertex(vertex2); 
graph.addVertex(vertex3); 
graph.addVertex(vertex4); 
graph.addVertex(vertex5); 

graph.addEdge("1", vertex1, vertex2, EdgeType.DIRECTED); 
graph.addEdge("2", vertex2, vertex3, EdgeType.DIRECTED); 
graph.addEdge("3", vertex3, vertex5, EdgeType.DIRECTED); 
graph.addEdge("4", vertex1, vertex4, EdgeType.DIRECTED); 
graph.addEdge("5", vertex4, vertex5, EdgeType.DIRECTED); 
return graph; 
} 

UPD 17.03.2011

现在我可以得出一个曲线图像这样:

enter image description here

+0

您的图片并没有露面......他们成了1×1图片...是http://i.imgur.com/个人STOR年龄网站? – eee

+0

没关系...似乎我的办公室防火墙阻止链接到i.imgur.com – eee

回答

1

它与你如何在JUNG中创建顶点和边缘有关。

对于领先地位,建议你指createVertices()和createEdges()在JUNG示例方法WorldMapGraphDemo.classedu.uci.ics.jung.samples荣样品下-2.0.1.jar从您的JUNG 2.0框架库。

与使用Map对象存储用户定义的顶点和边缘信息的其他示例相比,方法中使用的方法更加清晰。其余的则使用随机生成的,库生成的或文件生成的信息。

一旦明确给你,你可以参考PluggableRendererDemo.class提高你的图形(如相应的包装edu.uci.ics.jung.visualization.decorators下装饰变压器渲染edu.uci.ics.jung.visualization.renderers用于装饰和渲染顶点,边,方向箭头,形状,大小等)

+0

谢谢。我了解JUNG2的基础知识,但我不明白我需要将哪些变换应用到我的图中,例如:a)IE节点位于图的最左侧位置并且垂直居中到除FE外的所有其他节点); b)FE节点位于最右侧位置并垂直居中(相对于除IE以外的所有其他节点)。我怎样才能做到这一点? –

1

好吧......现在,我明白你真的想解决。德米特里,你可以检查另一个JUNG的例子,L2RTreeLayoutDemo.class ...它看起来如此接近你想达到的目标。如果您想要锁定特定顶点的位置,请为每一个下面创建Layout之后将其添加到VisualizationViewer/VisualizationImageServerCan Jung graphics appear in the same place every time?

+0

感谢您的提示。我实际上看了L2RTreeLayoutDemo,现在我可以看见树木(请参阅我的消息中的最后一张图片)。但是,问题是项目网络不是一棵树。所有“最终”节点都连接到“最终事件”节点。有没有办法以某种方式重新使用TreeLayout的代码非树? –

+0

@Dmitri:在这种情况下,你不能使用'Tree'或'Forest'类...可能,你可以像使用** WorldMapGraphDemo.class **例子那样使用'StaticLayout'布局,并修改它来定位节点一个M×N网格(其中每个节点位置将位于布局的相应网格点) – eee

+0

是否还有其他解决方案(如配置FRLayout以使其符合我的需求)?我知道那个网格算法,但我不想重新发明轮子。 –