Dibujar Arbol AVL

Iniciado por JDtoar, 20 Abril 2008, 01:20 AM

0 Miembros y 1 Visitante están viendo este tema.

JDtoar

Hola,

Tengo implementado un menú con las opciones de insertar, eliminar, buscar y recorrer un arbol AVL.
Ahora quiero agregarle la opcion de que me lo dibuje, y es precisamente aqui donde no tengo muy claro los conceptos graficos de java. Tal vez lo pueda hacer con la libreria Graphics y un JFrame o en un canvas, pero no se que sera mejor.

Me podrian por favor dar sugerencias de cual es la mejor manera para dibujar el arbol... gracias de antemano.

Lu15_CL4

eso depende de ti... usa lo que mejor sepas usar, java trae un objeto que te muestra los arboles igual que la organizacion de carpetas de windows, asi:
__
|__|
    |
    |___
    ||__|
    |___
    ||__|
    |___
    ||__|
    |    |___
    |    ||__|
    |___
    ||__|

javax.swing.JTree
no recuerdo como se usa... U_u
Te regalo .1 centavo de dolar diario, registrate aqui, pideme + info por PM ^^, el .1 centavo puede ir creciendo hasta el infinito!!! :xD ^^

Sk9ITk5Z

Mira si quieres mostrar algo en forma de arbol es con el JTREE que si tiens un buen IDE lo puedes jalar y arrastrar sino haslo con codigo... te dejo un ejmplo de como crear uno pero a qui tu le tienes que decile lso nombres de los nodos...espero ek te sirva de algo...

package EjemploJtree;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class ModelJTree extends JFrame {

  private JTree tree;

  private DefaultTreeModel model;

  private DefaultMutableTreeNode rootNode;

  public ModelJTree() {
    DefaultMutableTreeNode philosophersNode = getPhilosopherTree();
    model = new DefaultTreeModel(philosophersNode);
    tree = new JTree(model);
    //*****************************Botones*************************************//
    JButton addButton = new JButton("Añadir Objeto");
    addButton.addActionListener(new ActionListener() {
            @Override
      public void actionPerformed(ActionEvent event) {
        addPhilosopher();
      }
    });
   
    JButton removeButton = new JButton("Remover un objeto");
    removeButton.addActionListener(new ActionListener() {
            @Override
      public void actionPerformed(ActionEvent event) {
        removeSelectedPhilosopher();
      }
    });
   
    JButton saveButton = new JButton("Guardar");
    saveButton.addActionListener(new ActionListener() {
            @Override
      public void actionPerformed(ActionEvent event) {
        saveSelectedPhilosopher();
      }
    });
   
    JButton cargaButton = new JButton("Abrir");
    cargaButton.addActionListener(new ActionListener() {
            @Override
      public void actionPerformed(ActionEvent event) {
        cargaSelectedPhilosopher();
      }

         
    });
//*****************************Fin Botones*************************************//
   
    JPanel inputPanel = new JPanel();
    inputPanel.add(addButton);
    inputPanel.add(removeButton);
    inputPanel.add(saveButton);
    inputPanel.add(cargaButton);

    Container container = getContentPane();

    container.add(new JScrollPane(tree), BorderLayout.CENTER);

    container.add(inputPanel, BorderLayout.NORTH);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(435, 300);
    setVisible(true);

  }

  private void addPhilosopher() {
    DefaultMutableTreeNode parent = getSelectedNode();
    if (parent == null) {
      JOptionPane.showMessageDialog(ModelJTree.this, "Selecciona un area", "Error",
          JOptionPane.ERROR_MESSAGE);

      return;
    }
    String name = JOptionPane.showInputDialog(ModelJTree.this, "Dame el nombre:");
    model.insertNodeInto(new DefaultMutableTreeNode(name), parent, parent.getChildCount());

  }

  private void removeSelectedPhilosopher() {
    DefaultMutableTreeNode selectedNode = getSelectedNode();
    if (selectedNode != null)
      model.removeNodeFromParent(selectedNode);
  }

  private void saveSelectedPhilosopher(){
   DefaultMutableTreeNode selectedNode = getSelectedNode();
   
  }
 
  private void cargaSelectedPhilosopher(){
   DefaultMutableTreeNode selectedNode = getSelectedNode();
   
  }
 
  private DefaultMutableTreeNode getSelectedNode() {
    return (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
  }

  private DefaultMutableTreeNode getPhilosopherTree() {
    //String rai = JOptionPane.showInputDialog(ModelJTree.this, "Dame el nombre raiz:");
    DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Transpote");
   
    return rootNode;
  }
  public static void main(String args[]) {
    new ModelJTree();
  }
}
         
Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.

JDtoar

Ok, muchas gracias por responder.
Finalmente lo hice con una libreria grafica llamada StdDraw que encontre en la red... de este modo lo pude realizar recursivo en un JFrame.