elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema con árbol de directorios java swing [SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con árbol de directorios java swing [SOLUCIONADO]  (Leído 4,147 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Problema con árbol de directorios java swing [SOLUCIONADO]
« en: 31 Julio 2013, 02:30 am »

Hola a todos.

Quiero crear una GUI que muestre el árbol de directorios, y los subdirectorios de estos según se vaya desplegando.

En lugar de crear todo el árbol de golpe (demasiado costoso), lo que quiero es que al darle a desplegar "C:/" por ej., en ese momento se creen los nodos pertinentes y se muestren.

Lo he intentado hacer pero como el nodo raíz (C:/) al inicio está vacío, el método que tengo para caputar el TreeExpansionEvent no hace nada (aparte de que no estoy seguro de que funcione bien). ¿Qué puedo hacer?

Muchas gracias.

PD.adjunto el código:

Código:
public class DirectoryTree implements TreeExpansionListener{
    
    /* Atributos necesarios: */
    DefaultMutableTreeNode root;
    DefaultTreeModel model;
    JTree dirTree;
    
    /* COnstructor: */
    public DirectoryTree(){
        root=new DefaultMutableTreeNode("C:/");
        model=new DefaultTreeModel(root);
        dirTree=new JTree(model);
    }
    
    /* Devuelve el JTree para poder pasarselo a JScrollPane */
    public JTree getTree(){
        return this.dirTree;
    }

    @Override
    public void treeExpanded(TreeExpansionEvent event) {
        TreePath tp=event.getPath();
        Object aux2[]=tp.getPath();
        String aux="";
        for(int i=0;i<aux2.length;i++){
            aux=aux+"/"+((DefaultMutableTreeNode)aux2[i]).toString();
        }
        addFolders(aux,this.model,this.root);
    }

       private static void addFolders(String path,DefaultTreeModel m,DefaultMutableTreeNode root){
        File fil=new File(path);
        if(fil!=null){
            String aux[]=fil.list();
            for(int i=0;i<aux.length;i++){
                m.insertNodeInto(new DefaultMutableTreeNode(aux[i]), root, i);
            }
        }
    }

public static void main(String args[]){
        JFrame frame=new JFrame();
        DirectoryTree dt=new DirectoryTree();
        JScrollPane jsc=new JScrollPane(dt.getTree());
        frame.getContentPane().add(jsc);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }



« Última modificación: 31 Julio 2013, 17:53 pm por SARGE553413 » En línea

SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Problema con árbol de directorios java swing
« Respuesta #1 en: 31 Julio 2013, 17:52 pm »

Hola de nuevo. He encontrado la solución a mi problema.

El problema era que al seleccionar una "carpeta vacia" (porque recordemos que aun no se han agregado sus sub-carpetas) no ocurría un evento 'TreeExpansionEvent'.

Pero si que, al seleccionar dicha carpeta "vacía" ocurre un 'TreeSelectionEvent', de tal manera que escribiendo nuestro método dentro de un listener de ese evento, al seleccionar el "archivo (carpeta vacía)", esta pasa a convertirse en una carpeta con todas su subcarpetas asociadas.
Añadiendo un simple if(....!=null){...} conseguimos que al seleccionar archivos (que obviamente no tienen subdirectorios) no se lance una NullPointerException.

Saludos.

PD. Adjunto el código, si alguien detecta algún error agradecería que me lo comentase.

Código:

import java.io.File;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

/**
 *
 * @author Dan
 */
public class DirectoryTree implements TreeSelectionListener{
    DefaultMutableTreeNode root;
    DefaultTreeModel model;
    JTree dirTree;
   
    public DirectoryTree(){
        root=new DefaultMutableTreeNode("C:/");
        model=new DefaultTreeModel(root);
        dirTree=new JTree(model);
   
        dirTree.addTreeSelectionListener(this);
    }
   
    public JTree getTree(){
        return this.dirTree;
    }
   
    @Override
    public void valueChanged(TreeSelectionEvent e) {
        TreePath tp=e.getPath();
        Object aux2[]=tp.getPath();
        String aux="";
        for(int i=0;i<aux2.length;i++){
            aux=aux+"/"+((DefaultMutableTreeNode)aux2[i]).toString();
        }
        System.out.println(aux);
        addFolders(aux,this.model,(DefaultMutableTreeNode)tp.getLastPathComponent());
    }
   
    private static void addFolders(String path,DefaultTreeModel m,DefaultMutableTreeNode root){
        File fil=new File(path);
        if(fil!=null){
            String aux[]=fil.list();
            if(aux!=null){
                for(int i=0;i<aux.length;i++){
                    m.insertNodeInto(new DefaultMutableTreeNode(aux[i]), root, i);
                }
            }
        }
    }
   
    private static String[] getDirs(File fil){
        if(fil.exists()){
            return fil.list();
        }else{
            return null;
        }
    }
   
    public static void main(String args[]){
        JFrame frame=new JFrame();
        DirectoryTree dt=new DirectoryTree();
        JScrollPane jsc=new JScrollPane(dt.getTree());
        frame.getContentPane().add(jsc);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}



« Última modificación: 31 Julio 2013, 17:57 pm por SARGE553413 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tablas avanzadas en JTable de swing en Java
Java
kuhligerbertoni 9 11,323 Último mensaje 17 Febrero 2014, 06:15 am
por softdonet
Java Swing - Posicionar ventanas
Java
Flamethrower 4 5,389 Último mensaje 14 Octubre 2013, 07:18 am
por Chuidiang
Ejercicio en Java usando swing
Ejercicios
CarlosvAlencia 1 3,709 Último mensaje 16 Noviembre 2013, 16:31 pm
por Mitsu
Problema con permisos de diferentes grupos de usuarios en arbol de directorios
GNU/Linux
NaTxosS 0 2,012 Último mensaje 18 Abril 2016, 19:04 pm
por NaTxosS
Arbol de directorios en proyecto NetBeans
Java
Beginner Web 1 2,613 Último mensaje 27 Marzo 2019, 04:54 am
por WHK
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines