2017-05-28 2 views
2

J'ai créé un graphique en utilisant la bibliothèque JGraphT:Comment mettre à jour une vue JGraphT après avoir ajouté un sommet?

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); 

Je veux ajouter dynamiquement un nouveau sommet après avoir appuyé sur un bouton

@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()); 
    } 
} 

Comment puis-je actualiser la vue?

Répondre

1

essayez ceci:

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

0

TobiasH il ne fonctionne pas, mais je l'ai essayé quelque chose comme ça et il fonctionne correctement

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()); 
     } 
    }