Foro de elhacker.net

Programación => Java => Mensaje iniciado por: JDtoar en 20 Abril 2008, 01:20 am



Título: Dibujar Arbol AVL
Publicado por: JDtoar en 20 Abril 2008, 01:20 am
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.


Título: Re: Dibujar Arbol AVL
Publicado por: Lu15_CL4 en 20 Abril 2008, 09:26 am
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


Título: Re: Dibujar Arbol AVL
Publicado por: Sk9ITk5Z en 21 Abril 2008, 22:06 pm
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();
  }
}
         


Título: Re: Dibujar Arbol AVL
Publicado por: JDtoar en 23 Abril 2008, 06:12 am
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.