Base de datos:
-- -- Base de datos: 'dbbolivia' -- -- -- Estructura de tabla para la tabla 'departamento' -- CREATE TABLE departamento ( dep_id int(2) NOT NULL, dep_nombre varchar(32) NOT NULL, PRIMARY KEY (dep_id) ); -- -- Estructura de tabla para la tabla 'provincia' -- CREATE TABLE provincia ( prov_id int(2) NOT NULL auto_increment, prov_nombre varchar(32) NOT NULL, dep_id varchar(32) NOT NULL, PRIMARY KEY (prov_id) ); -- -- Estructura de tabla para la tabla 'municipio' -- CREATE TABLE municipio ( mun_id int(2) NOT NULL auto_increment, mun_nombre varchar(32) NOT NULL, prov_id int(2) NOT NULL, PRIMARY KEY (mun_id) );
¿Qué necesitamos?
- Netbeans
- Servidor MySQL
Crear la base de datos y agregar algunos datos
1. Crear una proyecto netbeans, agregar un JFrame (interfaz.java) y agregar los siguientes controles:
2. Agregar también una clase (nombre:database.java) para inter actuar con la base de datos MySQL. el código de la clase es:
import java.sql.*; /** * @web http://www.jc-mouse.net * @author Mouse */ public class database { /* DATOS PARA LA CONEXION */ private String bd = "dbbolivia"; private String login = "";//USUARIO private String password = "";//CONTRASEÑA private String url = "jdbc:mysql://localhost/"+bd; private Connection conn = null; //___________________________________________________________________________________ Soy una barra separadora :) public database(){ try{ //obtenemos el driver de para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexión conn = DriverManager.getConnection(url,login,password); if (conn!=null){ System.out.println("OK base de datos "+bd+" listo"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } //___________________________________________________________________________________ Soy una barra separadora :) public Connection getConnection() { return this.conn; } //___________________________________________________________________________________ Soy una barra separadora :) /* METODO PARA REALIZAR UNA CONSULTA A LA BASE DE DATOS * INPUT: * table => nombre de la tabla donde se realizara la consulta, puede utilizarse tambien INNER JOIN * fields => String con los nombres de los campos a devolver Ej.: campo1,campo2campo_n * where => condicion para la consulta * OUTPUT: un object[][] con los datos resultantes, sino retorna NULL */ public Object [][] select(String table, String fields, String where){ int registros = 0; String colname[] = fields.split(","); //Consultas SQL String q ="SELECT " + fields + " FROM " + table; String q2 = "SELECT count(*) as total FROM " + table; if(where!=null) { q+= " WHERE " + where; q2+= " WHERE " + where; } //obtenemos la cantidad de registros existentes en la tabla try{ PreparedStatement pstm = conn.prepareStatement(q2); ResultSet res = pstm.executeQuery(); res.next(); registros = res.getInt("total"); res.close(); }catch(SQLException e){ System.out.println(e); } //se crea una matriz con tantas filas y columnas que necesite Object[][] data = new String[registros][fields.split(",").length]; //realizamos la consulta sql y llenamos los datos en la matriz "Object" try{ PreparedStatement pstm = conn.prepareStatement(q); ResultSet res = pstm.executeQuery(); int i = 0; while(res.next()){ for(int j=0; j<=fields.split(",").length-1;j++){ data[i][j] = res.getString( colname[j].trim() ); } i++; } res.close(); }catch(SQLException e){ System.out.println(e); } return data; } //___________________________________________________________________________________ Soy una barra separadora :) }
3. Clase interfaz.java
- Las librerias que se utilizan son:
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;
private database db = new database();
public interfaz() { initComponents(); this.setTitle("JTree - http://www.jc-mouse.net/"); //se crea la raiz DefaultMutableTreeNode pais = new DefaultMutableTreeNode("Bolivia"); DefaultMutableTreeNode departamento; DefaultMutableTreeNode provincia; DefaultMutableTreeNode municipio; //se obtienen los departamentos Object[][] data_dep = db.select("departamento", " dep_id, dep_nombre", null); if( data_dep.length > 0) { for(int i=0; i < data_dep.length; i++) { //se crea hojas departamentos departamento = new DefaultMutableTreeNode(data_dep[i][1]); pais.add(departamento); //se obtiene las provincias Object[][] data_prov = db.select("provincia", "prov_id,prov_nombre" , " dep_id='" + data_dep[i][0].toString()+"' "); if( data_prov.length > 0) { for(int j=0; j< data_prov.length; j++) { provincia = new DefaultMutableTreeNode(data_prov[j][1]); departamento.add(provincia); //se obtienen los municipios Object[][] data_mun = db.select("municipio", "mun_id,mun_nombre" , " prov_id='" + data_dep[j][0].toString()+"' "); if( data_mun.length > 0) { for(int k=0; k< data_mun.length; k++) { municipio = new DefaultMutableTreeNode(data_mun[k][1]); provincia.add(municipio); } } } } } } DefaultTreeModel modelo = new DefaultTreeModel(pais); this.jTree1.setModel(modelo); jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { // Se obtiene el Path seleccionado TreePath path = e.getPath(); Object [] nodos = path.getPath(); String txt= jTextArea1.getText() + "Path seleccionado: "; for (Object nodo: nodos) txt+=nodo.toString() + " | "; txt+="\n"; // Se obtiene el Nodo seleccionado DefaultMutableTreeNode NodoSeleccionado = (DefaultMutableTreeNode)nodos[nodos.length-1]; txt+="-> Accion para Nodo Seleccionado [" + NodoSeleccionado.getUserObject().toString() + "]"; txt+="\n"; jTextArea1.setText(txt); } }); }
- Explicación: Se crea la raíz país (Bolivia), después se extrae los registros de la tabla departamentos y se añade a la raíz país, se extrae los registros provincias y se añade a su raíz departamento, se repite el proceso para municipios.
- Ejecutar
Descargar proyecto HERE








