2

I've created a graph using the JGraphT library:

g = new ListenableUndirectedWeightedGraph <String, MyEdge>(MyEdge.class);
graphAdapter = new JGraphXAdapter<String, MyEdge>(g);

layout = new mxOrganicLayout(graphAdapter);
layout.execute(graphAdapter.getDefaultParent());

mxGraphComponent component = new mxGraphComponent(graphAdapter);

component.setPreferredSize(new Dimension(dim.width - 50, dim.height - 200));

add(component);

I want to dynamically add a new vertex after pushing a button

@Override
public void actionPerformed(ActionEvent e) {
    String a="1";
    String b="2";
    g.addVertex(a);
    g.addVertex(b);
    g.addEdge(a,b);

}

public static class MyEdge extends DefaultWeightedEdge { //weight
    @Override
    public String toString() {
        return String.valueOf(getWeight());
    }
}

How can I refresh the view?

kryger
  • 12,906
  • 8
  • 44
  • 65
Michał Urban
  • 113
  • 12

2 Answers2

1

try this:

public void actionPerformed(ActionEvent e) {
    String a="1";
    String b="2";
    [your mxGraph variable].getModel().beginUpdate();
    g.addVertex(a);
    g.addVertex(b);
    g.addEdge(a,b);
    [your mxGraph variable].getModel().endUpdate();
    [your mxGraph variable].refresh();

}

Java API for mxGraph
Java API for mxIGraphModel

TobiasH
  • 83
  • 1
  • 8
0

TobiasH it doesn't work but I've tried something like this and it works properly

 if (e.getSource() == add) {
        String a = vertex.getText().toString();
        if (a != null && !a.equals("")) {
            g.addVertex(a);

            vertexSet.add(a);

            if (checked) {
                String b = vertex1.getText().toString();

                vertexSet.add(b);
                edges.add(new Edge(a, b)); // zbiór krawędzi


                g.addVertex(b);
                g.addEdge(a, b);
            }
            layout.execute(graphAdapter.getDefaultParent());
        }
    }
Michał Urban
  • 113
  • 12