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 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 packages principales: core y utils. En el package core, tenemos todas las utilidades relacionadas directamente con el uso de de Java Swing; En el package utils, tenemos clases de utilería general.

- Package com.eljavatar.swingutils.core

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

Package com.eljavatar.swingutils.core.annotations

Este package contiene las anotaciones 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
- PaginatedTableView
- TableView
- TextView
- ToggleButtonView

Anotaciones para usar en el controlador:
- ModelBean
- PropertyController

Package com.eljavatar.swingutils.core.beansupdate

Este package 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

Package com.eljavatar.swingutils.core.components

Este package contiene algunos componentes gráficos de utilería que extienden de componentes del API de Java Swing. En el momento sólo existen dos componentes:

- JPanelImage
- PaginatedTable

Package com.eljavatar.swingutils.core.componentsutils

Este package 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
- NotifyUtils
- SwingComponentsUtils

Package com.eljavatar.swingutils.core.modelcomponents

Este package contiene clases para manejar el modelo de datos que usen los distintos componentes de Java Swing o los implementados en SwingUtils.

- ComboBoxModelGeneric
- JTableDataProvider
- LazyDataProvider
- ObjectFiler
- PaginationDataProvider
- TableModelGeneric

Package com.eljavatar.swingutils.core.renderercomponents

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

- ComboBoxRendererDefault
- TitlesTableRendererDefault

Package com.eljavatar.swingutils.utils

Como ya dije antes, este package contiene clases de utilería pero que no están necesariamente relacionadas con el uso de Java Swing. En el momento, este paquete contiene las siguientes clases:

- StringUtils
- LocaleEnum

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.3.1</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.2

No hay comentarios.:

Publicar un comentario