Foros del Web » Programación para mayores de 30 ;) » Java »

Ruta en JTree

Estas en el tema de Ruta en JTree en el foro de Java en Foros del Web. Hola! Mi consulta es la siguiente: cómo puedo hacer para definir una ruta como, por ejemplo, c:/Archivos De Programa y mostrar el contenido en JTree? ...
  #1 (permalink)  
Antiguo 31/12/2013, 01:01
 
Fecha de Ingreso: diciembre-2013
Mensajes: 3
Antigüedad: 10 años, 3 meses
Puntos: 0
Ruta en JTree

Hola! Mi consulta es la siguiente: cómo puedo hacer para definir una ruta como, por ejemplo, c:/Archivos De Programa y mostrar el contenido en JTree? Conseguí esos dos distintos códigos, pero al probar cambiando la ruta, no me muestra el contenido de sólo ese directorio. Muestra todos los discos de la pc, pero al hacer doble click, no abre ninguna carpeta. Adjunto esas dos clases que son clases distintas pero que dan el mismo resultado.


Primer código:


Código:
import java.io.File;


import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;


public class Principal extends JFrame {




 JTree explorador;
 DefaultMutableTreeNode Raiz;
 
 public Principal(){
  
  Raiz=new DefaultMutableTreeNode("Raiz");
  explorador=new JTree(Raiz);
  DefaultTreeCellRenderer render=(DefaultTreeCellRenderer)explorador.getCellRenderer();
  //render.setLeafIcon(new ImageIcon(this.getClass().getResource("../Imagenes/archivo.png")));
  //render.setOpenIcon(new ImageIcon(this.getClass().getResource("../Imagenes/carpeta.png")));
  //render.setClosedIcon(new ImageIcon(this.getClass().getResource("../Imagenes/carpeta.png")));
  explorador.addTreeSelectionListener(new TreeSelectionListener(){


   @Override
   public void valueChanged(TreeSelectionEvent e) {
    try{
    DefaultMutableTreeNode sel=(DefaultMutableTreeNode)explorador.getLastSelectedPathComponent();
    //agregarHijos(sel);
    for(int i=0;i<sel.getChildCount();i++){
     DefaultMutableTreeNode nieto=(DefaultMutableTreeNode)sel.getChildAt(i);
     File fhijo=obtenerRuta(sel);
     agregarHijos(nieto);
    }
    }catch(NullPointerException npe){
     
    }
   }
   
  });
  
  for(int i=0;i<File.listRoots().length;i++){
   DefaultMutableTreeNode hijo=new DefaultMutableTreeNode(File.listRoots()[i]);
   Raiz.add(hijo);
  }  
  add(new JScrollPane(explorador));
 }
 
 public void agregarHijos(DefaultMutableTreeNode padre) throws NullPointerException{
  if(padre!=Raiz){
   File fpadre=obtenerRuta(padre);
   if(fpadre.isDirectory()){
    for(int i=0;i<fpadre.list().length;i++){
     DefaultMutableTreeNode hijo=new DefaultMutableTreeNode(fpadre.list()[i]);
     padre.add(hijo);
    }
   }
  }
 }
 
 public File obtenerRuta(DefaultMutableTreeNode p){
  String ruta="";
  for(int i=0;i<p.getPath().length-1;i++){
   ruta=ruta+p.getPath()[i+1]+"\\";
  }
  File f=new File(ruta);
  return f;
 }
 
 public static void main(String[] args) {
  Principal p=new Principal();
  p.setVisible(true);
  p.setBounds(0, 0, 400, 400);
  p.setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
}

Segundo:

Código:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TreeModelListener;
import javax.swing.JButton;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.JScrollPane;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;

// La clase principal
public class Principal2 extends JFrame {

	// el panel contenedor
	private JPanel contentPane;
	// el JFrame
	static Principal frame;

	/**
	 * esta es la función que primero se ejecuta creando el JFRame y visualizándolo
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frame = new Principal();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * la creación del JFrame principal donde está programado todo lo de éste ejemplo
	 */
	public Principal2() {
		// título de ventana
		setTitle("Java Swing 8 El JTree by Jnj");
		// operación al cerra el JFrame
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// dimensiones y posición en el escritorio
		setBounds(100, 100, 450, 306);
		// se crea el panel
		contentPane = new JPanel();
		// los bordes
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		// se establece
		setContentPane(contentPane);
		contentPane.setLayout(null);

		// se pone el botón en la ventana
		JButton btnCargarrbolDe = new JButton(
				"Cargar \u00E1rbol de directorios");
		btnCargarrbolDe.setBounds(10, 11, 200, 23);
		contentPane.add(btnCargarrbolDe);

		// las barras de escroll para el JTree
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 45, 414, 206);
		contentPane.add(scrollPane);

		// el JTree
		final JTree tree = new JTree();
		// que captura el evento click
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			public void valueChanged(TreeSelectionEvent e) {
				// se obtiene el nodo seleccionado
				DefaultMutableTreeNode nseleccionado = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
				// visualiza el path del nodo
				JOptionPane.showMessageDialog(frame, nseleccionado.getPath());
			}
		});
		// se pone el árbol en el panel de las barras de scroll
		scrollPane.setViewportView(tree);

		// aquí el botón que borra el último elemento de los primeros hijos
		// es decir, desde el nodo root, borra sólo el último hijo
		JButton btnBorrarltimoNodo = new JButton("Borrar \u00FAltimo nodo");
		btnBorrarltimoNodo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				DefaultTreeModel arbol = (DefaultTreeModel) tree.getModel();
				DefaultMutableTreeNode padre = (DefaultMutableTreeNode) arbol.getRoot();
				int numeroDeHijos = arbol.getChildCount(padre);

				// borra el último hijo del padre
				arbol.removeNodeFromParent((MutableTreeNode) arbol.getChild(
						padre, numeroDeHijos - 1));
			}
		});
		btnBorrarltimoNodo.setBounds(220, 11, 204, 23);
		contentPane.add(btnBorrarltimoNodo);

		// evento click del botón de carga del árbol
		// simplemente añade el nodo root y llama a la función de carga
		// para añadir todos los nodos hijos al nodo root
		btnCargarrbolDe.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				DefaultTreeModel arbol = (DefaultTreeModel) tree.getModel();
				DefaultMutableTreeNode nroot = new DefaultMutableTreeNode(
						"Árbol de directorios");

				arbol.setRoot(nroot);

				CargaEstructuraDirectorios(arbol, nroot, "/");
				
			}
		});
		
	
	}

	// función recursiva que lista todos los directorios y subdirectorios
	// a partir de una ruta, añadiéndolos a la estructura en árbol
	private void CargaEstructuraDirectorios(DefaultTreeModel arbol,
			DefaultMutableTreeNode padre, String ruta) {
		DefaultMutableTreeNode aux = null;

		File archivo = new File(ruta); // puntero al directorio de la ruta
		File[] archivos = archivo.listFiles(); // lista todos los archivos de la ruta

		// recorre lo que hay en la ruta
		if (archivos != null) {
			for (int i = 0; i < archivos.length; i++) {

				// creando un nodo con cada cosa del directorio
				aux = new DefaultMutableTreeNode(archivos[i].getName());
				// inserta el nodo hijo 
				arbol.insertNodeInto(aux, padre, i);

				// si encontramos un directorio volvemos a hacer lo mismo con sus hijos
				if (archivos[i].isDirectory()) {
					try {
						
						// llamando recursivamente de nuevo a ésta misma función
						CargaEstructuraDirectorios(arbol, aux,
								archivos[i].getAbsolutePath() + "/");
						
					} catch (Exception e) {
						System.out.println(e.getMessage()); // por si acaso le he puesto un try xD
					}
				}

			}

		}
	}
	
	// termina la creación del frame
}

// fin de la clase

Desde ya, gracias!

Etiquetas: workbench
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.