2012-02-19 10 views
5

Jak używać niestandardowych etykiet wierzchołków w wizualizacji wykresów JUNG?Jak dodać niestandardowe etykiety wierzchołków w wizualizacji wykresów JUNG?

Podążam za Jung 2.0 Tutorial, gdzie stwierdziłem, że do oznaczania wierzchołków można użyć setVertexLabelTransformer(), ale etykiety te nie mogą być dostosowane do mojej wiedzy.

Na przykład poniższy kod tworzy trzy wierzchołki, posiadające wierzchołków Etykiety 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);  
    } 
} 

Jak mogę dodać etykiety takie jak „Q0”?

+1

Proszę zacytować samouczek, który obserwujesz. Zobacz także [* Initial Threads *] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod

+1

Ponieważ zdefiniowałeś generics 'SparseMultigraph ' jako 'SparseMultigraph ' gdzie generyczny V dla wierzchołka jako Integer i ogólny E dla krawędzi jako String, stąd wartość każdej etykiety werteksa jest liczbą całkowitą i etykietą każdej krawędzi w String. Tak więc, jeśli chcesz, aby każdy wierzchołek miał nazwy takie jak q1, v2, itp., Użyj ciągu znaków dla ogólnego V, abyś mógł podać nazwę wierzchołka, taką jak ta 'g.addVertex (" q1 ");' – ecle

+0

Aby zmienić domyślny transformator etykiet wierzchołków w kontekście renderowania JUNG wyszukaj słowo kluczowe "getRenderContext(). setVertexLabelTransformer' – ecle

Odpowiedz

5

Od zdefiniowaniu generyków SparseMultigraph<V, E> jak SparseMultigraph<Integer, String> gdzie generyczny V na wierzchołku As Integer i generycznego E na skraju jako String, stąd wartość etykieta każdy wierzchołek jest w Integer i etykieta każdej krawędzi w String. Tak więc, jeśli chcesz, aby każdy wierzchołek przez nazwach takich jak Q1, v2, itd, użyj String dla rodzajowego V, więc można przekazać nazwę wierzchołków jak ten g.addVertex("q1");

3

Jeśli masz klasę niestandardową dla węzłów, Podam przykład z mojego projektu. Mam klasy węzła, który jest podobnym

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

} 

// Wystarczy zastąpić przekształcać jak poniżej:

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

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

// To pokaże właściwość screenname jako etykiety dla każdego węzła w wykres. // Mam nadzieję, że tego właśnie szukasz.

Powiązane problemy