2012-04-12 26 views
9

Tôi muốn hiển thị một cây trong giao diện Java, nhưng tôi không biết làm thế nào. Cây đại diện cho một đồ thị các nút được nối, như thế này:Làm thế nào để vẽ một cây đại diện cho một đồ thị của các nút được kết nối?

image

tôi nên nói rằng tôi có lớp cây của riêng tôi:

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

} 

Tôi chỉ muốn vẽ cây. Làm thế nào tôi nên làm gì?

Trả lời

6

Cách đơn giản nhất tôi có thể nghĩ đến là viết một lớp mà kéo dài JPanel và ghi đè lên nó paintComponent(). Trong phương thức vẽ, bạn có thể lặp qua cây và vẽ từng nút. Dưới đây là một ví dụ ngắn:

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

} 

Chụp hình tại cây nếu bạn không thể tìm ra bài bạn đã thử trong câu hỏi của bạn.

1

Tôi đoán bạn chỉ cần đọc về JTree: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

Và có lẽ một số thông tin cơ bản về Swing

+0

nhưng tôi muốn hiển thị cái cây giống như liên kết này: lcm.csa.iisc.ernet.in/dsa/img151.gif – Oli

+0

Không chắc chắn có thư viện miễn phí để xây dựng cây hình ảnh đó hay không. Bạn luôn có thể tự vẽ nó bằng các công cụ đồ họa cơ bản. –

13

Bạn có thể xem xét bất kỳ trong số này:

4

Tôi muốn nói rằng bạn cũng nên kiểm tra số Abego's TreeLayout. Về cơ bản nó là một thuật toán bố cục cây để nó có thể được sử dụng với bất kỳ cơ chế vẽ nào, nhưng nó cũng chứa một số demo/ví dụ về vẽ đồ thị trong SVG và Swing.

Các vấn đề liên quan