Programando en Java: XML et al (II)
Se puede decir que en estas dos semanas desde que empecé con el mundo de Thinlet en Java, he hecho bastantes progresos. Ya tengo la interface funcionando, aunque hasta hace un par de días, de forma estática. Unos campos fijos, unas etiquetas también fijas, y para variar, diálogos, botones y demás también fijos.
Al parecer esto de ser tan estático no le hace demasiada gracia a las altas esferas (director de proyecto), así que me he propuesto hacer la interface dinámica tan sólo modificando un XML con una sintaxis sencillita, tal que <filedialog buttonname="" textname="" labeltext="" /> o <camp labeltext="N: " name="camp_n" default="70"/>
La audiencia se preguntará por lo tedioso del parseado, pues bien, resulta bastante sencillo, si contamos con las herramientas adecuadas (JDom). A continuación os ejemplificaré algunas de sus utilidades.
También os explicaré como incluir un jar dentro de un jar, es decir, compilar nuestro jar del proyecto de netbeans con una librería que nos hayamos bajado que también esté en jar, dentro del mismo, para que no haya problemas de falta de librerías en otra máquina.
Y dónde está tal prodigio de la técnica al que llamas JDom? Aquí: http://www.jdom.org/
Os recomiendo compilar el JDom, porque por alguna desconocida razón no funciona incluyéndolo en las fuentes sin compilar.
Con JDom tenemos una clase llamada SAXParser, que funciona así:
SAXBuilder builder=new SAXBuilder(false);
Document doc=builder.build("archivo.xml");
Element root=doc.getRootElement();
Si guardamos todos los hijos de la raíz en una lista, podremos usar iteradores para recorrerla
List elements = root.getChildren();
Iterator i = elements.iterator();
Element e = (Element) i.next();
Comprobar el nombre del tag: e.getName();
Consultar el valor de un atributo del tag (nombre): e.getAttributeValue("name");
Esto son ejemplos sencillos, aunque si el XML es más complejo tampoco es problemático.
Lo prometido es deuda. Cómo incluir un jar externo dentro de nuestro jar del proyecto?
Cómo los jar son realmente zip con un archivo de Manifest, que básicamente indica la clase principal que tiene que ejecutar la JVM, renombramos nuestro jar a zip. Abrimos el zip, y dentro habrá una carpeta con unos archivos .class dentro. Lo único que tenemos que hacer es arrastrar esa carpeta a nuestro src/ del directorio del proyecto del NetBeans, y al hacer el Build, se incluirá automáticamente en el jar, y sin problemas de dependencias. Si no ha quedado claro, dejad un comentario y hago capturas o lo que sea.
Por hoy es suficiente, pronto más.
Salut,
Dani.
Referencias:
Programando en Java: The Thinlet World (I): http://www.gra2.com/article.php/20050214225825123
Thinlet: http://thinlet.sourceforge.net
JDom: http://www.jdom.org
Al parecer esto de ser tan estático no le hace demasiada gracia a las altas esferas (director de proyecto), así que me he propuesto hacer la interface dinámica tan sólo modificando un XML con una sintaxis sencillita, tal que <filedialog buttonname="" textname="" labeltext="" /> o <camp labeltext="N: " name="camp_n" default="70"/>
La audiencia se preguntará por lo tedioso del parseado, pues bien, resulta bastante sencillo, si contamos con las herramientas adecuadas (JDom). A continuación os ejemplificaré algunas de sus utilidades.
También os explicaré como incluir un jar dentro de un jar, es decir, compilar nuestro jar del proyecto de netbeans con una librería que nos hayamos bajado que también esté en jar, dentro del mismo, para que no haya problemas de falta de librerías en otra máquina.
Y dónde está tal prodigio de la técnica al que llamas JDom? Aquí: http://www.jdom.org/
Os recomiendo compilar el JDom, porque por alguna desconocida razón no funciona incluyéndolo en las fuentes sin compilar.
Con JDom tenemos una clase llamada SAXParser, que funciona así:
SAXBuilder builder=new SAXBuilder(false);
Document doc=builder.build("archivo.xml");
Element root=doc.getRootElement();
Si guardamos todos los hijos de la raíz en una lista, podremos usar iteradores para recorrerla
List elements = root.getChildren();
Iterator i = elements.iterator();
Element e = (Element) i.next();
Comprobar el nombre del tag: e.getName();
Consultar el valor de un atributo del tag (nombre): e.getAttributeValue("name");
Esto son ejemplos sencillos, aunque si el XML es más complejo tampoco es problemático.
Lo prometido es deuda. Cómo incluir un jar externo dentro de nuestro jar del proyecto?
Cómo los jar son realmente zip con un archivo de Manifest, que básicamente indica la clase principal que tiene que ejecutar la JVM, renombramos nuestro jar a zip. Abrimos el zip, y dentro habrá una carpeta con unos archivos .class dentro. Lo único que tenemos que hacer es arrastrar esa carpeta a nuestro src/ del directorio del proyecto del NetBeans, y al hacer el Build, se incluirá automáticamente en el jar, y sin problemas de dependencias. Si no ha quedado claro, dejad un comentario y hago capturas o lo que sea.
Por hoy es suficiente, pronto más.
Salut,
Dani.
Referencias:
Programando en Java: The Thinlet World (I): http://www.gra2.com/article.php/20050214225825123
Thinlet: http://thinlet.sourceforge.net
JDom: http://www.jdom.org

