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
-
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
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
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
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
-
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:
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();
}
});
}
}
-
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
-
Cuando obtienes query_nodos_principales[ a ][ b ] = c
¿qué signfican a, b y c?