0

私はJGraphXに取り組んでいます。graphComponent の insertEdge メソッドを使用して、2 つの頂点間にエッジを追加しました。しかし、エッジは見えません。同じファイルを保存してから閉じてから開くと、エッジが表示されます。追加したときに表示されないのはなぜですか?

同じセル、つまりgraph.insertEdge(parent、null、 "hasEntity"、newCell、newCell)のエッジを作成すると、それ自体にエッジが追加されます。つまり、ソース頂点とターゲット頂点が同じです。ここでグラフを閉じたり開いたりする必要はありません。

mxCell defaultActivityEdge = (mxCell) graph.insertEdge(parentObject, null, "hasActivity", cell3, newCell); 
graph.addCell(defaultActivityEdge); 
defaultActivityEdge.setVisible(true);
graph.clearSelection(); 
graph.refresh()
4

1 に答える 1

1

insertEdge() の戻りオブジェクトをセルとしてグラフに追加する必要はありません。以下のサンプルを見て、コードで同じものを修正してください。

public class MxGraphSample {

    public static void creategraph() {

        final JFrame frame = new JFrame();
        frame.setSize(300, 300);
        JPanel panel = new JPanel();
        panel.setSize(frame.getMaximumSize().width,
                frame.getMaximumSize().height);

        final mxGraph graph = new mxGraph();
        Object parent = graph.getDefaultParent();
        graph.getModel().beginUpdate();

        try {
            Object v1 = graph.insertVertex(parent, null, "v1", 20, 20, 80, 30);
            Object v2 = graph.insertVertex(parent, null, "v2", 120, 70, 80, 30);
            Object v3 = graph.insertVertex(parent, null, "v3", 220, 70, 80, 30,
                    "fillColor=lightgreen");

            graph.insertEdge(parent, null, "", v1, v2);
            graph.insertEdge(parent, null, "", v1, v3, "strokeColor=lightgreen");

            graph.cellsFolded(new Object[] {v1, v2, v3}, true, true);

            mxCompactTreeLayout layout = new mxCompactTreeLayout(graph);
            layout.setLevelDistance(40);
            layout.setNodeDistance(30);
            layout.setEdgeRouting(false);
            layout.setUseBoundingBox(false);
            layout.execute(graph.getDefaultParent());

        } finally {
            graph.getModel().endUpdate();
        }
        final mxGraphComponent graphComponent = new mxGraphComponent(graph);

        graphComponent.setFoldingEnabled(true);

        panel.setLayout(new BorderLayout());
        panel.add(graphComponent, BorderLayout.CENTER);

        frame.add(panel);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        creategraph();
    }
}

出力

ここに画像の説明を入力

于 2014-06-24T09:43:23.597 に答える