Por favor, activa JavaScript y desactiva tu adblock para este sitio

El Javatar

Blog dedicado a la Programación en Java, C, PHP, Phyton, HTML, SQL y Mucho Más

miércoles, 13 de septiembre de 2017

SwingUtils - Librería de Utilidades para Java Swing

SwingUtils - Librería de Utilidades para Java Swing
Existen muchas librerías de utilidades disponibles para trabajar con Java Swing que hacen una u otra cosa y que facilitan el trabajo ya sea a nivel de vista, de modelo o de controlador. Sin embargo, siempre hay algo que requerimos pero que las librerías que encontramos no cumplen con esas necesidades.

Por eso decidí crear SwingUtils, una librería con una serie de utilidades que suelo usar en muchos proyectos que he desarrollado usando Java Swing.

¿En qué consiste SwingUtils?

Como ya lo mencioné, la librería SwingUtils posee una serie de utilidades que pueden facilitar el desarrollo de ciertos componentes cuando trabajamos con el API de Java Swing, sin embargo, una de las principales características y que fue la que me motivó a desarrollar esta librería es la siguiente:

Cuando trabajas con Java Enterprise Edition y el framework de JavaServer Faces, notas lo fácil que es la sincronización de datos entre una vista y el controlador, ya que los value en la vista tan sólo deben ser declarados usando EL (Expression Language) de la forma #{claseControlador.atributo} donde atributo puede ser un objeto del API de Java o un objeto de una clase creada por nosotros y a través del cual podemos acceder a sus atributos de la forma #{claseControlador.miObjeto.atributo}; y por otro lado, el controlador es un bean el cual lo único que debe tener es una inyección de dependencias usando la anotación @Named.


En otro artículo entraré más a fondo sobre todo este mundo de Java Enterprise Edition, por ahora sólo me interesa que se aprecie lo fácil que se hace la sincronización de datos entre la vista y el controlador cuando hacemos uso de JEE; sin embargo, cuando trabajamos con Java Standard Edition y el API de Java Swing para desarrollar vistas, vemos que el trabajo se hace un poco más tedioso.

Si has trabajado con Java Swing, sabrás que si quieres obtener los datos de 8 campos de texto por ejemplo, tendrás que hacerlo uno a uno de la siguiente forma:

String dato1 = vista.jTFdato1.getText();
String dato2 = vista.jTFdato2.getText();
...
String dato8 = vista.jTFdato8.getText();

Y en caso de que quieras mostrar valores en dichos campos de texto, igualmente debes hacerlo uno a uno de la siguiente forma:

vista.jTFdato1.setText("Texto 1...");
vista.jTFdato2.setText("Texto 2...");
...
vista.jTFdato8.setText("Texto 8...");

Como verás, es algo que se vuelve un poco tedioso, sobre todo cuando nuestras vistas tienen formularios un poco grandes.

Me di a la tarea de buscar primero si el API de Java Swing tenía una forma de simplificar este este trabajo tal como lo hace JavaServer Faces, sin embargo no la encontré; busqué en algunas librerías, y sólo encontré JDAL, la cual tiene cosas muy interesantes, sin embargo no me convencía del todo ya que debía hacer grandes cambios en vistas que ya estuvieran desarrolladas.

Así que pensé en crear anotaciones mediante las cuales podría controlar los cambios tanto desde la vista como desde el controlador, y hacer uso del patrón Observer para notificar dichos cambios tanto a la vista como al controlador.

Entendiendo Cómo Funciona SwingUtils

Actualmente, SwingUtils posee dos paquetes principales: core y utils. En el paquete core, tenemos todas las utilidades relacionadas directamente con el uso de de Java Swing; En el paquete utils, tenemos clases de utilería general.

- Paquete com.eljavatar.swingutils.core

Como mencioné, en este paquete están contenidas las clases de utilería que están relacionadas con el uso de Java Swing, y a su vez, éste paquete contiente los siguientes paquetes: annotations, beansupdate, componentsutils, modelcomponents y renderercomponents.

- Paquete com.eljavatar.swingutils.core.annotations

Este paquete contiene las notaciones que deben ser usadas en la vista o en el controlador para permitir la gestión de actualizaciones en cualquiera de los dos.

Anotaciones para usar en la vista:
- ComboBoxView
- ComponentView
- DateTextView
- NumberTextView
- TableView
- TextView
- ToggleButtonView

Anotaciones para usar en el controlador:
- ModelBean
- PropertyController

- Paquete com.eljavatar.swingutils.core.beansupdate

Este paquete contiene las clases que implementan la lógica para notificar los cambios a la vista y al controlador.

- AbstractObservable
- AbstractObserverController (ésta es la clase que debe ser extendida desde el controlador)
- ObjectUpdate
- TipoUpdateEnum

- Paquete com.eljavatar.swingutils.core.componentsutils

Este paquete contiene clases de utilería para trabajar con los distintos componentes de Java Swing; actualmente sólo hay unos pocos, que son los que más frecuentemente uso, pero la idea es ampliar la lista ;)

- JComboBoxUtils
- JTableUtils
- SwingComponentsUtils

- Paquete com.eljavatar.swingutils.core.modelcomponents

Este paquete contiene clases para manejar el modelo de datos que usen los distintos componentes de Java Swing.

- ComboBoxModelGeneric
- TableModelGeneric

- Paquete com.eljavatar.swingutils.core.renderercomponents

Este paquete contiene clases para manejar el renderer que usen los distintos componentes de Java Swing.

- ComboBoxRendererDefault
- TitlesTableRendererDefault

- Paquete com.eljavatar.swingutils.utils

Como ya dije antes, este paquete contiene clases de utilería pero que no están necesariamente relacionadas con el uso de Java Swing. En el momento, este paquete sólo tiene una clase:

- StringUtils

Aquí sólo me limitaré a mencionar las clases que posee la librería, ya que posteriormente le realizaré un artículo a cada una de las características de la misma.

Cómo descargar SwingUtils

Para descargar la librería sólo se debe agregar la siguiente dependencia Maven:

<dependency>
    <groupId>com.eljavatar</groupId>
    <artifactId>SwingUtils</artifactId>
    <version>1.0</version>
</dependency>

En caso de no tener un proyecto gestionado con maven, puede descargar la librería directamente desde su enlace en el repositorio maven e importarla al proyecto que se desee:

==> Proyecto SwingUtils v1.0

No hay comentarios.:

Publicar un comentario