2015-10-09 4 views
1

Я использую библиотеку JGraphX ​​и пытаюсь выполнить автоматическую раскладку с помощью mxFastOrganicLayout:Как автоматически вызывать органическое расположение в JGraphX ​​

import javax.swing.JFrame; 
import com.mxgraph.swing.mxGraphComponent; 
import com.mxgraph.view.mxGraph; 

public class FastOrganic extends JFrame { 
    public static void main(String[] args) { 
     mxGraph graph = new mxGraph(); 
     Object parent = graph.getDefaultParent(); 
     graph.getModel().beginUpdate(); 
     try { 
      Object v1 = graph.insertVertex(parent, null, "Hello", 20, 20, 80, 
        30); 
      Object v2 = graph.insertVertex(parent, null, "World!", 240, 150, 
        80, 30); 
      graph.insertEdge(parent, null, "Edge", v1, v2); 
     } finally { 
      graph.getModel().endUpdate(); 
     } 
     mxGraphComponent graphComponent = new mxGraphComponent(graph); 

     FastOrganic frame = new FastOrganic(); 
     frame.add(graphComponent); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

Я хочу, чтобы узнать, как применить быстрый органический макет , документация определяет его как mxFastOrganicLayout. Проблема заключается в том, что я не могу превратить его в компонент, как это:

mxGraphComponent graphComponent = new mxGraphComponent(graph); 

в mxGraphComponent не принимает mxFastOrganicLayout как конструктор, но mxFastOrganicLayout принимает mxGraph, который кажется правильным шагом? Я был бы признателен за любую помощь, привет.

ответ

1

Это, как вы применяете один макет:

// define layout 
    mxIGraphLayout layout = new mxFastOrganicLayout(graph); 

    // layout graph 
    layout.execute(graph.getDefaultParent()); 

Это, как вы установить некоторые свойства, прежде чем применить один макет:

// define layout 
    mxFastOrganicLayout layout = new mxFastOrganicLayout(graph); 

    // set some properties 
    layout.setForceConstant(40); // the higher, the more separated 
    layout.setDisableEdgeStyle(false); // true transforms the edges and makes them direct lines 

    // layout graph 
    layout.execute(graph.getDefaultParent()); 

Это, как вы макете с помощью морфинга:

// define layout 
    mxIGraphLayout layout = new mxFastOrganicLayout(graph); 

    // layout using morphing 
    graph.getModel().beginUpdate(); 
    try { 
     layout.execute(graph.getDefaultParent()); 
    } finally { 
     mxMorphing morph = new mxMorphing(graphComponent, 20, 1.2, 20); 

     morph.addListener(mxEvent.DONE, new mxIEventListener() { 

      @Override 
      public void invoke(Object arg0, mxEventObject arg1) { 
       graph.getModel().endUpdate(); 
       // fitViewport(); 
      } 

     }); 

     morph.startAnimation(); 
    }