Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: JcRi$ti4n en 13 de Junio 2014, 23:46

Título: crear un jtree con una tabla recursiva en java?
Publicado por: JcRi$ti4n 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
Título: Re:crear un jtree con una tabla recursiva?
Publicado por: Alex Rodríguez 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();
                }
            });
    }       
}
Título: Re:crear un jtree con una tabla recursiva?
Publicado por: JcRi$ti4n 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
Título: Re:crear un jtree con una tabla recursiva?
Publicado por: Alex Rodríguez en 20 de Junio 2014, 13:13
Cuando obtienes query_nodos_principales[ a ][ b ] = c

¿qué signfican a, b y c?