2016-10-06 3 views
0

Я реализую алгоритм графа, и я должен создать для него интерфейс. Кадр с каждым шагом. Я сделаю это вручную. Я использую пакет Jung, но я не могу понять, как сделать этот граф похожим на дерево. Я боюсь два дня.Создайте древовидную диаграмму в java, используя 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

ответ

0

Если вы хотите график, чтобы выглядеть как дерево, вам необходимо предоставить макет, который делает это, то есть, TreeLayout CircleLayout. . будет делать то, что подсказывает название

Вы не должны реализовывать интерфейс Forest, есть уже реализация этого доступны Просто используйте DelegateTree вместо DirectedSparseGraph

0

.. вам нужно определить график, трансформатор для этикеток и Vertex и добавьте 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); 
    } 
+0

Вы можете просто использовать 'vv3.getRenderContext() setVertexLabelTransformer (новый ToStringLabeller());' и т.д. . с 'edu.uci.ics.jung.visualization.decorators.ToStringLabeller' – amoebe

Смежные вопросы