upper tattoo look libreria library jtattoo feel essential descargar best and java user-interface swing guice

libreria - look and feel java tattoo



Swing con guice (4)

Ya estoy usando Guice para el modelo de datos de mi aplicación, y hasta ahora estoy bastante contento con eso. Sin embargo, la parte de la GUI está a punto de convertirse en una gran bola de barro. Me resulta difícil usar Guice aquí, porque los componentes y modelos de Swing están estrechamente acoplados y, a menudo, obligan a cierto orden de inicialización.

Mi aplicación consiste básicamente en un encabezado con muchos filtros, un componente central y bastante complejo de JTree, y muchas acciones (por ejemplo, desde un JPopup), menús, diálogos, asistentes, etc. El problema principal es que tengo muchos acoplamiento entre los componentes y las acciones (por ejemplo, validaciones complicadas, actualizaciones de árbol ...). ¿Podría darme algunos consejos sobre cómo estructurar esa GUI con Guice?

Soy consciente de librerías como GUTS, pero la documentación es muy delgada, prefiero evitar agregar otra dependencia a mi proyecto y aprender otra API (p. Ej., No conozco Swing Application Framework).


Creo que el problema es probablemente la arquitectura en general. Probablemente quiera ver si puede refactorizar la aplicación para que sea más simple y más modular. Como recomendó Boris, también sugeriría usar el patrón de modelo de presentación (búsqueda de Martin Fowler y Karsten Lentzsch) y la biblioteca JGoodies.

Para el problema con las acciones, vea cómo las plataformas Swing Application Framework y Netbeans Plaform las manejan. Por ejemplo, si se usa una Acción tanto en una vista como en un menú, es posible que desee que esté disponible a través de un mapa global.


Hemos comenzado recientemente en GUICE con swing. Esto es lo que hemos hecho, que puede ser de ayuda para usted.

a. Cuando desee inyectar un modelo en una tabla / árbol, podría inyectar un proveedor de modelos en su lugar y hacer un provider.get () para obtener el modelo en el contructor.

por ejemplo

public class Mytable extends JTable { public Mytable(Provider<MytableModel> modelProvider) { this.setModel(modelProvider.get()); } }

segundo. Podrías hacer un modelo genérico y usar el mismo modelo en diferentes tablas.

do. El modelo podría tener un identificador de fuente de datos que podría ser inyectado por una fábrica donde sea necesario con inyección asistida. Número de ejemplos disponibles en desbordamiento de pila.

re. Su modelo podría ser una estructura de datos flexible que utilice el modelo para devolver el valor de celda / hoja / otro relevante.

mi. Cuando tiene acciones, inyecta acciones en sus constructores de componentes y las adjunta a los componentes relevantes.

F. Use la anotación @Singleton donde tenga un objeto compartido como el modelo inyectado en 2 objetos diferentes, como la acción y el componente.]

sol. Use el alcance personalizado cuando necesite usar varios conjuntos de instancias de objetos. Los ámbitos personalizados son excelentes para esto, ya que mantiene el código realmente limpio.

Espero que lo anterior ayude ...


Prefiero sugerir un MVC adecuado, incluso mejor Modelo de presentación - Vista - Controlador. Separe su código correctamente y Guice encajará naturalmente. Por ejemplo:

Las clases de vista deben tener una parte de construcción que dibuje el contenido estático (etiquetas, el árbol, botones, etc.) y un código de actualización que reaccione a los cambios en el Modelo de presentación. Todos los oyentes de acción deben invocar algún código en el controlador. Tanto el Modelo de presentación como el controlador deben ser inyectados por Guice, como todas las demás dependencias.

Esta organización permitiría realizar pruebas fácilmente reemplazando la Vista con un código de prueba que escuchará los cambios en el Modelo de presentación e invocará acciones en el controlador.


Yo aconsejaría mirar Guts-GUI . Es un marco de Swing UI basado en el modelo de inyección de dependencia de Guice.