2012-04-12 15 views
9

Quiero mostrar un árbol en una GUI de Java, pero no sé cómo. El árbol representa un gráfico de nodos conectados, como esto:Cómo dibujar un árbol que representa un gráfico de nodos conectados?

image

debo decir que tengo mi propio árbol de la clase:

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

} 

sólo quiero dibujar el árbol. ¿Cómo debería hacer?

Respuesta

6

La forma más simple que puedo pensar es escribir una clase que se extiende JPanel y anular su paintComponent() método. En el método de pintura puede iterar a través del árbol y pintar cada nodo. Aquí está un ejemplo corto:

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

} 

tomar una puñalada en la pintura del árbol, si no puede resolverlo después lo que ha intentado en su pregunta.

1

supongo que sólo tiene que leer sobre JTree: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

Y tal vez alguna otra información general sobre Swing

+0

sry pero quiero mostrar al árbol algo así como este enlace: lcm.csa.iisc.ernet.in/dsa/img151.gif – Oli

+0

No estoy seguro de si hay librerías libres para compilar tales árboles visuales. Sin embargo, siempre puede dibujarlo solo con las herramientas gráficas básicas. –

13

usted podría considerar cualquiera de estos:

4

Yo diría que vale la pena comprobar también Abego's TreeLayout. Es esencialmente un algoritmo de diseño de árbol por lo que se puede utilizar con cualquier mecanismo de dibujo, pero también contiene algunas demostraciones/ejemplos de gráficos de dibujo en SVG y Swing.

Cuestiones relacionadas