2016-08-11 1 views
1

Je crée différents types de bords en modifiant le DefaultEdgeStyle. Chaque style dépend du bouton cliqué dans l'interface utilisateur et les bords sont ajoutés en faisant glisser d'un sommet à l'autre et non la méthode de bord d'insertion.GetEdgeStyle return null JGraphX ​​

Mon problème est que lorsque je veux obtenir le style de bord, une valeur nulle est retournée.

Pourquoi cela se passe-t-il? J'utilise JgraphX ​​(v6)

private void applyEdgeNew2(mxStylesheet stylesheet) { 
    // Settings for edges 
    Map<String, Object> edge = new HashMap<String, Object>(); 
    edge.put(mxConstants.STYLE_ROUNDED, true); 
    edge.put(mxConstants.STYLE_ORTHOGONAL, false); 
    edge.put(mxConstants.STYLE_EDGE, "elbowEdgeStyle"); 
    edge.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_CONNECTOR); 
    edge.put(mxConstants.STYLE_ENDARROW, mxConstants.ARROW_CLASSIC); 
    edge.put(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE); 
    edge.put(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER); 
    edge.put(mxConstants.STYLE_STROKECOLOR, "#FF0000"); // default is #6482B9 
    edge.put(mxConstants.STYLE_FONTCOLOR, "#446299"); 
    stylesheet.putCellStyle("edge2", edge); 
    stylesheet.setDefaultEdgeStyle(edge); 
} 

private void applyEdgeNew3(mxStylesheet stylesheet) { 
    // Settings for edges 
    Map<String, Object> edge = new HashMap<String, Object>(); 
    edge.put(mxConstants.STYLE_EDGE, mxConstants.EDGESTYLE_SEGMENT); 
    edge.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_CONNECTOR); 
    edge.put(mxConstants.STYLE_ENDARROW, mxConstants.ARROW_CLASSIC); 
    edge.put(mxConstants.STYLE_STROKECOLOR, "#6482B9"); // default is #6482B9 
    stylesheet.putCellStyle("edge3", edge); 
    stylesheet.setDefaultEdgeStyle(edge); 

} 


graphComponent.getGraphControl().addMouseListener(new MouseListener() { 

    @Override 
    public void mouseReleased(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mousePressed(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseExited(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     mxCell cell =(mxCell) graphComponent.getCellAt(e.getX(), e.getY()); 
     if(cell != null) 
     { 
     System.out.println("Edge:"+cell.isEdge()); 
     System.out.println("Vertex:"+cell.isVertex()); 
     if (cell.isEdge()){ 

     System.out.println(cell.getStyle()); //Here is the problem(It return null value) 
     System.out.println(cell.getId()); 
     System.out.println(cell.getSource()); 
     System.out.println(cell.getTarget()); 
    } 
    if (cell.isVertex()){ 
     System.out.println(cell.getStyle()); 
     System.out.println(cell.getId()); 
    } 
} 

}

Répondre

1

null est retourné, parce que chaque bord utilise le defaultEdgeStyle, défini dans le mxStylesheet.

Les bords créés précédemment n'ont simplement pas été mis à jour dans la vue. Si vous dérangez un peu avec eux, vous reconnaîtrez qu'ils vont changer leur style pour le nouveau defaultEdgeStyle défini.

Si vous voulez des styles différents, vous devez créer les arêtes et leur attribuer un paramètre style. Cela peut être soit une clé d'une entrée que vous avez ajoutée dans l'objet mxStylesheet de votre graphique, soit un style totalement nouveau, par ex. strokeColor=#0ff00f