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!