Comment ajouter des étiquettes de sommets personnalisés dans la visualisation graphique JUNG?

StackOverflow https://stackoverflow.com/questions/9350583

  •  27-10-2019
  •  | 
  •  

Question

Comment utiliser les étiquettes des sommets personnalisés dans la visualisation graphique JUNG?

Je Jung 2.0 Tutorial où j'ai trouvé que setVertexLabelTransformer() peut être utilisés pour marquer les sommets, mais ces étiquettes ne peuvent pas être personnalisés, à ma connaissance.

Par exemple, le produit ci-dessous le code trois sommets, ayant sommet-étiquettes 1,2,4:

import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseMultigraph;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import java.awt.Dimension;
import javax.swing.JFrame;

public class SimpleGraphView {
    Graph<Integer, String> g;

    public SimpleGraphView() {       
        g = new SparseMultigraph<Integer, String>();
        g.addVertex((Integer)1);
        g.addVertex((Integer)2);
        g.addVertex((Integer)4); 
    }

    public static void main(String[] args) {
        SimpleGraphView sgv = new SimpleGraphView(); 
        Layout<Integer, String> layout = new CircleLayout(sgv.g);
        layout.setSize(new Dimension(800,800));  
        BasicVisualizationServer<Integer,String> vv =
            new BasicVisualizationServer<Integer,String>(layout);
        vv.setPreferredSize(new Dimension(850,850)); 

        JFrame frame = new JFrame("Simple Graph View");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv); 
        frame.pack();
        frame.setVisible(true);       
    }
}

Comment puis-je ajouter des étiquettes comme "Q0"?

Était-ce utile?

La solution

Puisque vous avez défini les génériques de SparseMultigraph<V, E> comme SparseMultigraph<Integer, String> où le V générique pour sommet comme entier et le E générique bord comme String, d'où la valeur de l'étiquette de chaque sommet est Integer et l'étiquette dans String de chaque bord. Donc, si vous voulez que chaque sommet par des noms tels que q1, v2, etc., l'utilisation String pour V générique, vous pouvez passer un nom de sommet comme celui-ci g.addVertex("q1");

Autres conseils

Si vous avez une classe personnalisée pour les nœuds, je vais donner un exemple de mon projet. J'ai un nœud de classe qui est comme:

public class Node 
{

public long tweetId = 0L;
public long nodeId = 0L;
public String screenName = "";
public Date reTweetDate = new Date();
public boolean isMainNode = false;
public int size = 0;

public Node()
{
}

}

// Vous avez juste besoin de passer outre à transformer comme ci-dessous:

vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {
                @Override
                public String transform(Object v) {

                    return ((Node)v).screenName;
                }});

// Il montrera la propriété ScreenName comme une étiquette pour chaque noeud dans le graphique. // J'espère que c'est ce que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top