Hola a todos!
Les dejo un ejemplo de como usar SwingBuilder con un poco de GSQL, el código lo dejo aquí pero también lo pongo en GitHub por si quieren ponerle algún comentario en alguna línea…
Espero les guste…
/** * Usa cualquier base de datos en HSQLDB o de cualquier otro tipo, * sólo ajusta la dependencia del conector, los parámetros de conexión * y la consulta con la que obtienes los nombres de tabla de una base de datos * según el manejador que estés usando.... */ // Usamos la anotación @Grab para cargar la dependencia de HSQLDB @GrabConfig(systemClassLoader=true) @Grapes([@Grab(group='hsqldb', module='hsqldb', version='1.8.0.10')]) // Algunos imports import groovy.swing.* import javax.swing.* import java.awt.BorderLayout as BL // Mira, imporst estáticos import javax.swing.tree.DefaultMutableTreeNode as TreeNode // Conectamos a la base de datos, en reallidad puedes usar la que tu quieras def sql = groovy.sql.Sql.newInstance('jdbc:hsqldb:hsql://localhost/dbAsembly','sa','sa','org.hsqldb.jdbcDriver') // Una consulta a cualquier tabla def consulta = 'Select * from cliente' // Una consulta a las tablas de esta base de datos def consultaTablas = 'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.SYSTEM_TABLES WHERE TABLE_SCHEM='PUBLIC'' def columnNames = [] // Este closure se ejecuta la primera ve después de la consulta processMeta = { metaData -> columnNames = metaData.columnMetaData.collect{ column -> column.columnName } } def data = [] // Ejecutamos la consulta sql.eachRow(consulta,processMeta){ registro -> // Me gusta que tan simple es ejecutar cualquier consulta e iterarla def registroEnMapa = [:] columnNames.each{ name -> registroEnMapa.'$name' = registro['$name'] // Dinamismo en mapas } data << registroEnMapa } def nombresDeTabla = [] // Ejecutamos la consulta que obteien los nombres de todas la tablas de la BD sql.eachRow(consultaTablas){ nombresDeTabla << it['TABLE_NAME'] } // Uf! un árbol de swing JTree trainningTree // Usamos un builder, característica poderosa de Groovy swing = new SwingBuilder() // Comenzamos a construir nuestra GUI frame = swing.frame( title:'DB Poor Man', defaultCloseOperation: javax.swing.WindowConstants.EXIT_ON_CLOSE ) { borderLayout() // Así es! el mismo BorderLayout que ya conoces... scrollPane(constraints: BL.WEST, preferredSize: [160, -1]) { // scrollPane? claro JScrollPane! trainningTree = tree(rootVisible: true) // Adentro nuestro árbol } scrollPane(constraints:BL.CENTER) { // Este scrollPane en el centro table() { // Mostramos datos tabulares tableModel(list:data) { // Alimentamos la tabla columnNames.each{ columnName -> // Definimos las columnas que aparecerán propertyColumn(header:columnName, propertyName:columnName) // Goodness!!! } } } } } // borramos los elementos aactuales de nuestro árbol trainningTree.model.root.removeAllChildren() // Iteramos los nombres de las tablas nombresDeTabla.each{ def node = new TreeNode(it) // para crear nodos trainningTree.model.root.add(node) // y agregarlos al árbol } trainningTree.model.reload(trainningTree.model.root) // Hacemos un refresh frame.pack() frame.show() // Y mostramos....comments powered by Disqus