2017-01-14 1 views
0

Je dessine un graphe simple (en utilisant l'interface swing Java).jgraphx change vertex size

Le graphique est OK, mais la taille par défaut/automatique des sommets est petite pour mon usage. Comment définir la taille du sommet (rectangle ou ellipse)?

je peux changer un comportement de graphique à l'aide mis() (comme put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_ELLIPSE)), mais pas la taille des sommets.

Le graphique est OK, mais la valeur par défaut/taille des sommets automatique est petit pour mon but. Comment régler la taille sommet (rectangle ou ellipse)?

puis-je avoir mal compris beaucoup au sujet jgraphx?

La documentation est très difficile à comprendre, très cryptique (au moins pour moi), je peux avoir des suggestions de livres ou des liens pour mieux comprendre jgraphx pour Java

un détail: le graphique est un élément non construit par élément, mais il vient d'un graphique construit avec l'aide JGraphT jGraphXAdapter

JGraphXAdapter<Incrocio, Strada> graphAdapter = new JGraphXAdapter<Incrocio, Strada>(listenableGraph);

+1

* « La documentation est très difficile à comprendre » * Lien vers la documentation pour la classe utilisée. –

+0

J'ai fait un pas en avant. Je peux changer la taille de vertex changeant la géométrie de cellules: Je dois itérer chaque cellule, vérifier si est un sommet, appliquer la nouvelle taille avec 'mxGeometry geometry = cell.getGeometry() ;. geometry.setWidth(); \t geometry.set Height(); ' Le graphique affiché a la nouvelle taille, mais en sélectionnant un sommet (avec un double clic de souris sur la figure du sommet) et en supprimant la sélection, le sommet est redessiné à la taille précédente. Toute suggestion est appréciée. Merci. –

+0

* "Toute suggestion est appréciée." * 1) Je vous en ai déjà donné un. 2) Le conseil suivant est apprécié. Ignorer le conseil vous verra probablement ignoré par les personnes qui essaient d'aider (gratuitement). –

Répondre

0

Merci à Andrew pour sa patience. L'anglais n'est pas ma langue, et parfois je fais des erreurs même en italien (ma langue maternelle). Ajoutez que je suis nouveau en Java. Nouveau même dans ce forum (règles liées, et ce n'est peut-être pas le bon endroit pour ma rediffusion). Je n'ai pas lu votre message précédent avec l'attention voulue.

Je mets le code, avec une solution partielle, j'espère que c'est plus clair.

package it.rex.view; 

public class StradarioViewBis2 extends JFrame { 

    private JPanel contentPane; 

    // listenableGraph is a complete graph done with JgraphT 
    public StradarioViewBis2(ListenableGraph<Incrocio, Strada> listenableGraph) { 

     JGraphXAdapter<Incrocio, Strada> graphAdapter = 
       new JGraphXAdapter<Incrocio, Strada>(listenableGraph); 

     //graphAdapter.getStylesheet().getDefaultEdgeStyle().put(mxConstants.STYLE_NOLABEL, "1"); //remove label from edge 

     graphAdapter.getModel().beginUpdate(); 
     try { 
      graphAdapter.clearSelection(); 
      graphAdapter.selectAll(); 
      Object[] cells = graphAdapter.getSelectionCells(); //here you have all cells 

      // Iterate into graph to change cells 
      for (Object c : cells) { 
       mxCell cell = (mxCell) c; //cast 
       mxGeometry geometry = cell.getGeometry(); 

       if (cell.isVertex()) { //isVertex 
        // Here I can change vertex dimensions 
        geometry.setWidth(40); 
        geometry.setHeight(40); 
       }else{ //is not a vertex, so u can get source and target 
        // cell.setStyle("orthogonalEdgeStyle"); 
        // cell.getChildAt(x); //Returns the child at the specified index. (target) 
       } 
      } 
     } 
     finally 
     { 
      graphAdapter.getModel().endUpdate(); 
     } 

     mxIGraphLayout layout = new mxCircleLayout(graphAdapter); // questo sistema le posizione degli elementi 

     layout.execute(graphAdapter.getDefaultParent()); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 550, 450); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     mxGraphComponent graphComponent = new mxGraphComponent(graphAdapter); // is JScrollPane extension 

     graphComponent.setPageVisible(true); 
     graphComponent.setBounds(30, 30, 300, 300); 
     contentPane.add(graphComponent); 

     //graphComponent.setEnabled(false); 
     graphComponent.getViewport().setBackground(Color.white); 
     ; 

    } 

} 

Après quelques essais, j'ai trouvé que la taille du sommet est de retour à la dimension initiale lorsque je change l'étiquette de la cellule, et non pas quand je me déplace l'accent mis sur de la cellule.

Je pense que je dois changer le comportement par défaut du graphique, mais je ne suis pas encore découvert comment.

Ceci est le résultat, après avoir modifié l'étiquette sur le dessus Vetex: enter image description here