2012-02-19 25 views
5

JUNG ग्राफ विज़ुअलाइज़ेशन में कस्टम वर्टेक्स लेबल का उपयोग कैसे करें?जंगल ग्राफ विज़ुअलाइजेशन में कस्टम वर्टेक्स लेबल कैसे जोड़ें?

मैं Jung 2.0 Tutorial का अनुसरण कर रहा हूं, जहां मुझे पता चला कि setVertexLabelTransformer() को शिखर लेबल करने के लिए उपयोग किया जा सकता है, लेकिन इन लेबलों को मेरे ज्ञान के लिए अनुकूलित नहीं किया जा सकता है।

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);  
    } 
} 

मैं कैसे "Q0" जैसे लेबल जोड़ सकता हूँ:

उदाहरण के लिए, नीचे दिए गए कोड तीन कोने, होने शिखर-लेबल 1,2,4 पैदा करता है?

+1

कृपया निम्नलिखित ट्यूटोरियल का उद्धरण दें। यह भी देखें [* प्रारंभिक थ्रेड *] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)। – trashgod

+1

आप 'के रूप में' SparseMultigraph <पूर्णांक, स्ट्रिंग> 'जहां पूर्णांक के रूप में शिखर के लिए सामान्य वी और स्ट्रिंग के रूप में बढ़त के लिए सामान्य ई, इसलिए प्रत्येक शिखर के लेबल मूल्य पूर्णांक में है और प्रत्येक बढ़त के लेबल' SparseMultigraph की जेनरिक परिभाषित किया है के बाद से स्ट्रिंग में इसलिए, यदि आप Q1, वी 2, आदि, सामान्य V के लिए उपयोग स्ट्रिंग, जैसे नामों से प्रत्येक शिखर चाहते हैं तो आप एक शीर्ष नाम इस 'g.addVertex (" q1 ") की तरह पारित कर सकते हैं;' – ecle

+0

डिफ़ॉल्ट शिखर लेबल ट्रांसफार्मर को बदलने के लिए एक जंग प्रतिपादन संदर्भ में, कीवर्ड के लिए खोज 'getRenderContext() setVertexLabelTransformer' – ecle

उत्तर

5

जब से तुम SparseMultigraph<Integer, String> रूप SparseMultigraph<V, E> की जेनरिक परिभाषित किया है जहां पूर्णांक के रूप में शिखर और String के रूप में बढ़त के लिए सामान्य ई के लिए सामान्य V, इसलिए प्रत्येक शिखर के लेबल मूल्य Integer में है और String में प्रत्येक बढ़त के लेबल। इसलिए, यदि आप Q1, वी 2, आदि जैसे नामों से प्रत्येक शिखर चाहते हैं, सामान्य V के लिए String उपयोग करते हैं, तो आप आप नोड्स के लिए एक कस्टम वर्ग है, तो इस g.addVertex("q1");

3

की तरह एक शीर्ष नाम पारित कर सकते हैं, मैं एक दे देंगे मेरी परियोजना से उदाहरण। //

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

} 

तुम बस नीचे की तरह बदलने ओवरराइड करने के लिए की जरूरत है:: मैं एक वर्ग नोड जो की तरह है

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

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

// यह में प्रत्येक नोड के लिए एक लेबल के रूप screenname संपत्ति दिखाएगा ग्राफ। // मुझे आशा है कि यह वही है जो आप खोज रहे हैं।