2012-04-12 10 views
9

Voglio visualizzare un albero in una GUI Java, ma non so come. L'albero rappresenta un grafico di nodi connessi, in questo modo:Come disegnare un albero che rappresenta un grafico di nodi connessi?

image

Devo dire che io ho la mia classe di albero:

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

} 

voglio solo per disegnare l'albero. Come dovrei fare?

risposta

6

Il modo più semplice che posso pensare è quello di scrivere una classe che estende JPanel e sovrascrivere la sua Metodo paintComponent(). Nel metodo paint puoi scorrere l'albero e dipingere ogni nodo. Ecco un breve esempio:

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

} 

prendere una pugnalata a dipingere l'albero, se non si riesce a capirlo dopo quello che hai provato nella sua interrogazione.

1

Credo che si solo bisogno di leggere su JTree: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

E magari qualche altra informazioni di carattere generale in merito a Swing

+0

sry ma voglio mostrare l'albero qualche cosa come questo link: lcm.csa.iisc.ernet.in/dsa/img151.gif – Oli

+0

Non sono sicuro se ci siano librerie libere per costruire alberi visivi simili. Puoi sempre disegnarlo da solo con gli strumenti grafici di base. –

13

si potrebbe considerare uno di questi:

4

Direi che vale la pena di controllare anche Abego's TreeLayout. È essenzialmente un algoritmo di layout dell'albero in modo che possa essere utilizzato con qualsiasi meccanismo di disegno, ma contiene anche alcune dimostrazioni/esempi di grafici di disegno in SVG e Swing.

Problemi correlati