2012-04-12 11 views
9

मैं जावा जीयूआई में एक पेड़ प्रदर्शित करना चाहता हूं, लेकिन मुझे नहीं पता कि कैसे।कनेक्टेड नोड्स के ग्राफ का प्रतिनिधित्व करने वाले पेड़ को कैसे आकर्षित करें?

image

मैं कहना चाहिए कि मैं अपने खुद के पेड़ वर्ग है:

public class BinaryTree 
{ 
private BinaryNode root; 
public BinaryTree() 
{ 
    root = null; 
} 

public BinaryTree(Object rootItem) 
{ 
    root = new BinaryNode(rootItem, null, null); 
} 

public BinaryTree(Object rootItem,BinaryNode a,BinaryNode b) 
{ 
    root = new BinaryNode(rootItem, a, b); 
} 

public int leavesCount(){ 
    return BinaryNode.leavesCount(root); 
} 

public boolean equal(BinaryTree a,BinaryTree b){ 
    return BinaryNode.equal(a.root, b.root); 

} 

public void printPreOrder() 
{ 
    if(root != null) 
     root.printPreOrder(); 
} 

public void printInOrder() 
{ 
    if(root != null) 
     root.printInOrder(); 
} 

public void printPostOrder() 
{ 
    if(root != null) 
     root.printPostOrder(); 
} 

public void makeEmpty() 
{ 
    root = null; 
} 


public boolean isEmpty() 
{ 
    return root == null; 
} 


public void merge(Object rootItem, BinaryTree t1, BinaryTree t2) throws MergeAbrot 
{ 
    if(t1.root == t2.root && t1.root != null) 
    { 
     throw new MergeAbrot("MergeAbrot"); 

    } 

    root=new BinaryNode(rootItem, t1.root, t2.root); 

    if(this != t1) 
     t1.root = null; 
    if(this != t2) 
     t2.root = null; 
} 

public int size() 
{ 
    return BinaryNode.size(root); 
} 

public int height() 
{ 
    return BinaryNode.height(root); 
} 

} 

मैं केवल पेड़ आकर्षित करने के लिए चाहते हैं पेड़ जुड़े नोड्स के एक ग्राफ, इस तरह का प्रतिनिधित्व करता है। मुझे कैसे करना चाहिए?

उत्तर

6

सबसे आसान तरीका मैं के बारे में सोच सकते हैं एक वर्ग है कि JPanel फैली लिखने और ओवरराइड करने के लिए है के बारे में हो सकता है कुछ अन्य सामान्य जानकारी अपने paintComponent() विधि। पेंट विधि में आप पेड़ के माध्यम से पुनरावृत्त कर सकते हैं और प्रत्येक नोड पेंट कर सकते हैं। यहाँ एक छोटी उदाहरण है:

import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class JPanelTest extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) { 
     // Draw Tree Here 
     g.drawOval(5, 5, 25, 25); 
    } 

    public static void main(String[] args) { 
     JFrame jFrame = new JFrame(); 
     jFrame.add(new JPanelTest()); 
     jFrame.setSize(500, 500); 
     jFrame.setVisible(true); 
    } 

} 

, पेड़ पेंटिंग पर एक चाकू ले लो अगर तुम इसे बाहर पोस्ट क्या आप अपने प्रश्न में की कोशिश की है समझ नहीं सकता।

1

मुझे लगता है कि तुम सिर्फ JTree के बारे में पढ़ने की जरूरत है: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

और स्विंग

+0

सूखी लेकिन मैं पेड़ को इस लिंक की तरह कुछ दिखाना चाहता हूं: lcm.csa.iisc.ernet.in/dsa/img151.gif – Oli

+0

इस तरह के दृश्य पेड़ बनाने के लिए स्वतंत्र पुस्तकालय हैं या नहीं, यह सुनिश्चित नहीं है। बुनियादी ग्राफिक्स उपकरण के साथ आप हमेशा इसे अपने आप आकर्षित कर सकते हैं। –

13

आप इनमें से किसी भी विचार कर सकते हैं:

  • JHotDraw, here, कस्टम ग्राफ संपादकों बनाने के लिए एक मेटा-पुस्तकालय का हवाला दिया।

  • Prefuse विज़ुअलाइजेशन library, सचित्र here और here

  • Batik, जो एसवीजी प्रतिपादन लागू करता है।

  • JGraphdemo और user manual

  • GraphStream, सचित्र here

  • JFreeChartXYBubbleRenderer

  • एक JTree, here सुझाव दिया, एक कस्टम TreeIcon साथ।

  • एक custom renderer, एक्स साथ पेड़ चौड़ाई का एक अंश और y प्रत्यावर्तन स्तर के आधार पर पर आधारित है।

  • draw.GraphPanel जैसे एक साधारण ग्राफ संपादक, सचित्र here

4

मैं कहूंगा कि Abego's TreeLayout भी जांचना उचित है। यह अनिवार्य रूप से एक पेड़ लेआउट एल्गोरिदम है इसलिए इसका उपयोग किसी भी ड्राइंग तंत्र के साथ किया जा सकता है, लेकिन इसमें एसवीजी और स्विंग में ग्राफ ड्राइंग के कुछ डेमो/उदाहरण भी शामिल हैं।

संबंधित मुद्दे

 संबंधित मुद्दे