使用Jung

时间:2016-10-06 12:35:04

标签: java graph jung jung2

我实现了图算法,我必须为它创建一个接口。每一步都有一个框架。我会手动完成。 我使用Jung包但我无法弄清楚如何使该图看起来像一棵树。我挣扎了两天。

这是我的尝试:

DirectedSparseGraph<String, ?> g = new DirectedSparseGraph<String, Object>();

        g.addVertex("ROOT");
        g.addVertex("A");
        g.addVertex("B");
        g.addVertex("C");
        g.addVertex("D");
        g.addVertex("E");
         VisualizationImageServer vv = new VisualizationImageServer(new CircleLayout(g), new Dimension(350, 300));  


        JFrame frame = new JFrame("First step");

        frame.getContentPane().add(vv);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

我使用CircleLayout,我应该使用TreeLayout但是我必须实现Forest接口而且我不知道如何,我不是一个聪明的程序员。 :(

我希望我的图表看起来像这样:

Desire result

2 个答案:

答案 0 :(得分:0)

如果您希望图形看起来像树,则需要提供执行该操作的布局,即TreeLayout。 CircleLayout将按照顾名思义进行。

您不必实施Forest界面;已经可以实现它了。只需使用DelegateTree而不是DirectedSparseGraph。

答案 1 :(得分:0)

您需要为标签和Vertex定义Graph,Transformer并添加VisualizationViewer

实施例

public static void main(String[] args) {
    Graph<Integer, String> graph3 = new DelegateForest<>();

    graph3.addVertex(1);
    graph3.addVertex(2);
    graph3.addVertex(3);

    graph3.addEdge("RAD-A", 1, 2);
    graph3.addEdge("RAD-B", 1, 3);

    Layout<Integer, String> layout3 = new TreeLayout<>((Forest<Integer, String>) graph3);
    VisualizationViewer<Integer, String> vv3 = new VisualizationViewer<>(layout3);

    Transformer<String, String> transformer3 = new Transformer<String, String>() {

        @Override
        public String transform(String arg0) {
        return arg0;
        }
    };

    vv3.getRenderContext().setEdgeLabelTransformer(transformer3);
    Transformer<Integer, String> transformer = new Transformer<Integer, String>() {

        @Override
        public String transform(Integer arg0) {
        return arg0.toString();
        }

    };
    vv3.getRenderContext().setVertexLabelTransformer(transformer);

    transformer3 = new Transformer<String, String>() {
        @Override
        public String transform(String arg0) {
        return arg0;
        }
    };

    final DefaultModalGraphMouse<String, Number> graphMouse3 = new DefaultModalGraphMouse<>();
    vv3.setGraphMouse(graphMouse3);
    graphMouse3.setMode(ModalGraphMouse.Mode.PICKING);

    JFrame frame3 = new JFrame("Pas 3");
    frame3.getContentPane().add(vv3);
    frame3.pack();
    frame3.setSize(350, 300);
    frame3.setVisible(true);
    }