Как автоматически вызывать органический макет в JGraphX
Я использую библиотеку JGraphX и пытаюсь выполнить автоматическую разметку, используя mxFastOrganicLayout:
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();
}