Как автоматически вызывать органический макет в 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();
    }
Другие вопросы по тегам