
31/12/2013, 01:01
|
| | Fecha de Ingreso: diciembre-2013
Mensajes: 3
Antigüedad: 11 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! |