0

我实现了一个图形算法,我必须为它创建一个接口。每一步都有一个框架。我会手动完成。我使用 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 接口,我不知道如何,我不是一个聪明的程序员。:(

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

期望结果

4

2 回答 2

0

您需要为标签和顶点定义图形、转换器并添加 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);
    }
于 2016-10-22T17:31:33.230 回答
0

如果您希望图形看起来像一棵树,您需要提供一个可以做到这一点的布局,即 TreeLayout。CircleLayout 将按照名称所暗示的那样做。

您不必实现 Forest 接口;已经有一个可用的实现。只需使用DelegateTree而不是 DirectedSparseGraph。

于 2016-10-06T23:35:39.070 回答