Tooltips en celdas de JTable

Hace poco, trabajando con el proyecto discography-generator me encontré el problema de hacer que las celdas de un javax.swing.JTable mostraran un tooltip o "mensaje emergente" cuando el ratón estuviera encima.

Lo único que estaba buscando era que se mostrara el contenido de la celda, algo muy simple a priori pero que, como ocurre casi siempre en Swing, acaba siendo algo rebuscado. La solución la encontré en la documentación oficial de SUN:
En este post veremos el código necesario para implementar este comportamiento.

Sistema de plantillas en menos de 50 líneas

En este post presentaré una solución cómoda y rápida (que no tiene porqué ser la mejor) para crear un sistema de plantillas basado en Java. En primer lugar voy a aclarar a qué quiero referirme cuando hablo de "sistema de plantillas". La idea es la siguiente, partiendo de un texto como el siguiente:
Hola ${usuario}, hoy es ${fecha}

Vamos a diseñar un sistema que reciba este texto (en forma de String o InputStream) y un mapa de propiedades, de forma que sustituya todo lo que encuentre del tipo ${clave} por el valor correspondiente en el mapa.

Estructura de directorios de Maven

En esta breve entrada se expondrá la estructura estándar de directorios de Maven. Se expondrán la estructura para cada tipo de proyecto.

Proyecto J2SE (JAR):

proyecto
|-src
|_|-main
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|_|-test
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|-target


Proyecto WAR:

proyecto
|-src
|_|-main
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|_|_|-webapp
|_|_|_|-<contenido-web>
|_|_|_|-WEB-INF
|_|_|_|-META-INF
|_|-test
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|-target

Cargar un fichero de propiedades en Java

En esta entrada voy a explicar cómo cargar un fichero de propiedades de Java. Esta operación aunque sencilla puede ayudarnos mucho en la separación de responsabilidades entre las distintas partes de nuestro sistema.

Por ejemplo, si tenemos que mostrar una serie de mensajes por pantalla. En lugar de embeber los mensajes dentro del código Java escribiremos dichos mensajes en un fichero .properties asociados cada uno a una clave. Si en un futuro queremos cambiar los mensajes, podemos simplemente cambiar el fichero de propiedades sin tener la necesidad de cambiar el código fuente y volver a compilar la clase donde estuvieran.

Proyectos en los que participo

El motivo de esta entrada es que conozcáis los proyectos en los que estoy involucrado y soy propietario.

En primer lugar el proyecto rolemaster. Este proyecto es un asistente para RMSS (Rolemaster Standard System). RMSS es un juego de rol ya descatalogado pero que seguimos practicando mis amigos y yo. Decidimos crear esta aplicación con el objetivo de facilitar la dirección del juego de forma que no se perdiera tanto tiempo consultando las reglas una y otra vez. Cabe mencionar que la principal característica de este juego con respecto a otros similares es que existe una tabla y una regla para todo, lo que provoca que muchas veces todo vaya muy lento. El proyecto está alojado en Google Code en la siguiente URL:
El proyecto está elaborado en JSF y JPA (se ha elegido Hibernate como implementación) y precisa de una Base de Datos MySQL. Las mejoras que se están barajando son:
  • Hacer que la BBDD sea una SQLite o alguna similar para que pueda estar empotrada en el proyecto.
  • Actualmente el asistente sólo controla la experienciaspor lo que se está pensando en ampliar el asistente al combate y otras situaciones.
El otro proyecto en el que estoy involucrado es discography-generator. Este proyecto consiste en generar una aplicación HTML a partir de carpetas con MP3 de forma que podamos navegar por las páginas web e ir escuchando las canciones. Está pensado para gestionar discografías de forma que tengas una aplicación web por cada discografía y puedas ir navegando este los distintos discos, escuchándo las canciones.

Nota: No incluye ni descaga MP3 alguno, debes tenerlos en el disco duro.

Este proyecto también está alojado en Google Code:
Está elaborado en Swing y precisa de Java 1.6. Actualmente genera la aplicación web, pero se encuentra en una fase de desarrollo muy temprana y precisa de muchas mejoras que puedes consultar en la lista de Issues.

Configurar el MANIFEST con Maven para añadir librerías al classpath

En una de las anteriores entradas de este blog (http://tutorialexception.blogspot.com/2009/03/copiar-dependencias-al-directorio.html) se vio como copiar las dependencias de un proyecto al directorio 'target/lib'. En este blog voy a explicar cómo configurar Maven para que al empaquetar nuestro proyecto JAR y copiar las dependencias al directorio 'target/lib' podamos ejecutarlo con un simple "java -jar proyecto.jar".

Para poder alcanzar este objetivo, lo que tenemos que conseguir es que el fichero MANIFEST configure el classpath indicando las librerías de las que depende. Esto se consigue configurando el plugin maven-jar-plugin:

Hacer que Maven ignore ciertos recursos al empaquetar el proyecto

Seguimos con la configuración de Maven. En este caso vamos a hacer que Maven ignore algunos recursos cuando empaquete nuestra aplicación JAR.

En mi caso, tengo un proyecto JAR realizado en Maven que depende de algunas librerías que no se encuentran en ningún repositorio de Maven. Esto es un pequeño problema, puesto que Maven las intentará descargar la primera vez al realizar cualquier acción sobre el proyecto y generará un error avisando que no puede encontrar dichas dependencias.

Copiar dependencias al directorio target en Maven

Cuando desarrollamos un proyecto J2SE en Maven2, a menudo queremos que al empaquetar nuestro proyecto, las librerías de las que dependen se copien las dependencias del proyecto al directorio target/lib.

Este comportamiento, sencillo a primera vista, se convirtió para mí en una pequeña odisea que finalmente solucioné gracias al siguiente enlace:
En él se hace la misma pregunta y los comentarios dan la solución. A continuación expongo mi adaptación a mi proyecto.

Bienvenido

Os doy la bienvenida a mi blog sobre programación. La mayor parte de las entradas estarán relacionadas con el lenguaje de programación de SUN. Espero que lo disfrutéis.