2012-04-12 59 views
9

我想在Java GUI中顯示一棵樹,但我不知道如何。該樹表示連接節點的圖形,像這樣:如何繪製代表連接節點圖的樹?

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

sry但我想顯示樹這樣的鏈接:lcm.csa.iisc.ernet.in/dsa/img151.gif – Oli 2012-04-12 15:37:03

+0

不知道是否有免費的圖書館來建立這樣的視覺樹。您可以隨時使用基本的圖形工具自行繪製它。 – 2012-04-12 15:44:51

13

你可能會考慮任何這些:

4

我認爲值得看看Abego's TreeLayout。它本質上是一種樹型佈局算法,因此它可以用於任何繪圖機制,但它也包含一些在SVG和Swing中繪製圖形的演示/示例。