Autor Tema: crear un jtree con una tabla recursiva en java?  (Leído 5150 veces)

JcRi$ti4n

  • Sin experiencia
  • *
  • Mensajes: 9
    • Ver Perfil
crear un jtree con una tabla recursiva en java?
« en: 13 de Junio 2014, 23:46 »
Saludos comunidad otra vengo con una duda, se que en este lugar podre solucionar , tengo lo sguiente tengo una bd con una tabla que es recursiva y quiero que realizando consultas al mismo me cargue al arbol, la tabla es la sigt
Código: [Seleccionar]

CREATE TABLE estructura (
  estructura_id int(11) NOT NULL,
  nombre varchar(70) COLLATE utf8_bin NOT NULL,
  descripcion varchar(70) COLLATE utf8_bin DEFAULT NULL,
  depende_id int(11) NOT NULL,
  PRIMARY KEY (estructura_id),
  FOREIGN KEY (depende_id)  REFERENCES estructura (estructura_id),

Ahora tengo un jtree donde realizando una consulta me carga todo los datos de la tabla y no asi creando padres y sus hijos, esta es la clase donde realiza la consulta
Código: [Seleccionar]
public Object[][] select_normal(String table,String campo,String where,String condicion)
{
int registros =0;
String colunombre[]=campo.split(",");
String sql="SELECT "+campo+" from "+table;
String sql2="select count(*) as total from "+table;
if(where !=null || condicion !=null)
{ sql+=" where "+where+" group by "+condicion;
sql2+=" where "+where;

}
System.out.println(sql);
try
{ PreparedStatement presta=conex.prepareStatement(sql2);
ResultSet res=presta.executeQuery();
res.next();
registros=res.getInt("total");
res.close();

}catch(SQLException e)
{
System.out.print(e);
}
Object[][] data= new String[registros][campo.split(",").length];

try
{ PreparedStatement pst=conex.prepareStatement(sql);
ResultSet res=pst.executeQuery();
int i=0;
while(res.next())
{

for(int j=0;j<=campo.split(",").length-1;j++)
{
data[i][j]=res.getString(colunombre[j].trim());
}
i++;
}
res.close();


}catch(SQLException e)
{
System.out.print(e);

}
return data;
}

y esta es con la que dibujo el jtree en un jframe

Código: [Seleccionar]
public class Principal extends JFrame {
private conexion c=new conexion();
private DefaultTreeModel modelo;
public Principal() {
Object [][] query_nodos_principales=c.select_normal("estructura as e, estructura as e1"," e.nombre,e.estructura_id,e.depende_id ","e.estructura_id=e1.depende_id");

if(query_nodos_principales.length>0)
{

for(int i=0;i<query_nodos_principales.length;i++)
{
DefaultMutableTreeNode prueba =new DefaultMutableTreeNode(query_nodos_principales[i][0]);
Directorio.add(prueba);
modelo=new DefaultTreeModel(Directorio);
JTree tree = new JTree(modelo);
tree.setVisibleRowCount(15);
tree.setFont(new Font("Consolas", Font.BOLD | Font.ITALIC, 17));
}
}
}
espero y pueden colaborarme en ejemplo el siguiente
.
estructura_id |nombre |depende_id |
0 |directorio |0
1 |general |0
2 |administrativo |1
3 |contabilidad |2
esto en realidad deberia resultar
directorio
      ------+ general
                    ------+ administrativo
                                    ----------- contabilidad

pero me dibuja todo en uno sin jerarquias

directorio
general
administrativo
contabilidad
« Última modificación: 13 de Septiembre 2014, 19:18 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Re:crear un jtree con una tabla recursiva?
« Respuesta #1 en: 14 de Junio 2014, 00:25 »
No estoy seguro de que estés manejando correctamente el JTree. Si quieres establecer una dependencia jerárquica, tienes que crear un nodo y luego añadir el nodo hijo al nodo creado. Por ejemplo si la raíz es directorio, creas directorio, luego a directorio le añades general, a general le añades administrativo, a administrativo le añades contabilidad y así sucesivamente. Si añades todos los hijos al nodo raíz, todos los hijos estarán al mismo nivel y no tendrás la jerarquía.

Ejemplo creación de dependencias y jerarquía:

Código: [Seleccionar]
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;

public class TreeEjemplo extends JFrame
{
    private JTree tree;
    public TreeEjemplo()
    {
        //create the root node
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Directorio");
        //create the child nodes
        DefaultMutableTreeNode aNode = new DefaultMutableTreeNode("General");
        DefaultMutableTreeNode bNode = new DefaultMutableTreeNode("Administrativo");
        DefaultMutableTreeNode cNode = new DefaultMutableTreeNode("Contabilidad");

        //add the child nodes to the root node
        root.add(aNode);
        aNode.add(bNode);
        bNode.add(cNode);

        //create the tree by passing in the root node
        tree = new JTree(root);
        add(tree);

        for (int i = 0; i < tree.getRowCount(); i++) {
         tree.expandRow(i);
}
       
        this.setSize(200,330);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("JTree Example");       
        //this.pack();
        this.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new TreeEjemplo();
                }
            });
    }       
}

JcRi$ti4n

  • Sin experiencia
  • *
  • Mensajes: 9
    • Ver Perfil
Re:crear un jtree con una tabla recursiva?
« Respuesta #2 en: 17 de Junio 2014, 23:26 »
gracias por la respuesta Alex Rodríguez pero creo que no me deje entender muy bien , en el ejemplo que planteas realizas la creacion de nodos definidos por codigo y lo que yo busco es que sea un jtree dinamico que cree el directirio padre y los demas hijos apartir de una consulta a una tabla , la misma es una tabla recursiva como describi al principio espero y puedan ayudar

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Re:crear un jtree con una tabla recursiva?
« Respuesta #3 en: 20 de Junio 2014, 13:13 »
Cuando obtienes query_nodos_principales[ a ][ b ] = c

¿qué signfican a, b y c?


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".