2017-05-23 2 views
0

Je rencontre des problèmes avec JGraphX ​​et mxGraphModel. Je convertis un réseau de Pétri décrit par Hashmap> en un modèle graphique. Dans l'ordre, j'ai construit la boucle suivante. Cependant, il semble que lors de l'itération sur les enfants d'un nœud, il peut trouver les cellules existantes dans le modèle et ajouter un nouveau avec le même label. La ligne v2=((mxGraphModel)(graph.getModel())).getCell(childVertex); ne fonctionne pas: La méthode renvoie null même si un vertice avec le même ID est présent. Résultat plusieurs sommets avec le même label et un graphe incorrect.JGraphX ​​getCell (id) ne trouve rien

  int j=0; 
     for(String vertex: dataPetri.keySet()) 
     { 
      Object v1 =((mxGraphModel)(graph.getModel())).getCell(vertex); 
      Object v2; 
      //Add only if new vertex 
      if(v1 == null) 
       v1 = graph.insertVertex(parent, null, vertex, 100, 100*j, 40, 40, "whiteSpace=wrap;textOpacity=100"); 
      else 
       System.out.println("//Found existing parent ////"); 
      //Looking for links from this vertex 
      ArrayList<String> childs = dataPetri.get(vertex); 
      if(childs != null) 
      { 
       int i = 0; 
       for(String childVertex: childs) 
       { 
        v2=((mxGraphModel)(graph.getModel())).getCell(childVertex); 
        if(v2 == null) 
         v2 = graph.insertVertex(parent, null, childVertex, 100*i, 100, 40, 40, "whiteSpace=wrap;textOpacity=100"); 
        else 
         System.out.println("/////////Found existing"); 
        graph.insertEdge(parent, null, "", v1, v2); 
        ++i; 
       } 
      } 
      ++j; 
     } 

Produced graph

+0

define * ne fonctionne pas. * –

+0

Modifié pour être plus clair. La méthode retourne null même si un vertice avec le même ID est présent. Résultat plusieurs sommets avec le même label et un graphe incorrect. – Vanpourix

Répondre

0

Je l'ai résolu. Il ne vient pas de 2=((mxGraphModel)(graph.getModel())).getCell(childVertex); mais de v2 = graph.insertVertex(parent, null, childVertex, 100*i, 100, 40, 40, "whiteSpace=wrap;textOpacity=100");

En mettant null au lieu de childVertex, JGraph fournir un id par défaut qui n'est pas le label.