pasos para interfaz grafica ejemplos crear controles componente java swing user-interface architecture

java - para - ¿Cómo organizar una aplicación de GUI Swing?



swing containers (4)

He escrito algunas GUIs usando Swing y sé sobre MVC, pero nunca encontré una buena manera de organizar realmente mi código de alguna manera. Lo que estoy buscando es algo así como la estructura de carpetas que maven presenta para cada nuevo proyecto. Otro ejemplo son los rieles, donde se introduce MVC a través de la estructura de carpetas automáticamente. ¿Hay algo similar para Swing?

También sería bueno ver un libro que describa el desarrollo de una aplicación Swing más grande. Todo lo que encuentro son libros sobre pautas de diseño donde el diseño se refiere al aspecto de la aplicación. Otros libros de Swing (como O''Reilly) describen en detalle todos los componentes del swing, pero ¿dónde hay información sobre el panorama general?

¿Hay algún buen ejemplo de una GUI de swing, donde dices "Así es como organizas código / carpetas / paquetes para columpiar"?

EDITAR: Encontré el siguiente sitio http://www.ibm.com/developerworks/java/tutorials/j-springswing/section7.html que describe el uso de la primavera al crear una GUI. Es un ejemplo bastante antiguo y no responde mi pregunta, pero es un paso en la dirección correcta. También menciona Spring RCP, pero no estoy seguro de si podría ser la solución.

EDIT2: Aún no encontré ninguna respuesta mejor. ¿Alguien sabe un ejemplo para una GUI de Swing idealmente estructurada que es de código abierto? ¿Alguien sabe un libro, que lo describe? Y si no fuera por Swing, ¿entonces tal vez para GUI en general?


Aunque es Groovy , no Java , le aconsejo que eche un vistazo a Griffon , que es un " Grails for Swing ".

Aplica una estructura determinada (en términos de directorios y patrones, MVC en particular) a todas las aplicaciones que construyes con ella.

Creo que puede darte buenas ideas en general, aunque tendrías que realizar algunas pequeñas adaptaciones a Java.

Además, tenga en cuenta que Griffon también es compatible con la creación de aplicaciones en Java, y también puede proporcionar "arquetipos" para eso, por lo que también puede comprobarlo.


Desafortunadamente (o, afortunadamente, depende de cómo se mire), no es fácil desarrollar paneles genéricos utilizables para varias estructuras de datos. M a menudo está estrechamente relacionado con V, y V a menudo contiene algo de C.

Tiendo a poner el panel V y la estructura M correspondiente en el mismo paquete. También necesita algún visualizador de control central para mostrar cada uno de los paneles. La C se comparte entre el visualizador que controla central y los paneles mismos.

Ahora, si necesita más estructura en su proyecto, puede seleccionar el marco de Struts 2 para mover todas las C en algunas acciones y tener paneles (el V) que indiquen cuál debería ser el próximo M / V para mostrar. Struts se desarrolló originalmente para aplicaciones web, pero Struts 2 ahora está separado del HttpServlet.

No lo he intentado yo mismo, pero veo algunos beneficios. Podría JUnitar secuencias de pantallas de prueba sin visualizar pantallas. Simplemente cree el panel de instancias de paneles e invoque los métodos de escucha con eventos (haga clic con el mouse, etc.).

Solo una idea.


El desarrollo web te obliga a ciertos diseños de fuente y recursos. Este no es el caso con las aplicaciones Swing. Aquí puede usar el diseño que mejor se adapte a sus objetivos.

Serás mucho más productivo si usas algún IDE. NetBeans es la elección perfecta para Swing. NB te da algunas restricciones sobre cómo almacenar tus clases. Hay una carpeta de "Paquetes de origen" que contiene los paquetes de Java y un "Paquetes de prueba" para las clases de prueba de JUnit correspondientes si usa JUnit, que le recomiendo encarecidamente que haga.

En caso de que use Hibernate, debe cumplir con sus convenciones, construir what.entity y whatever.util y los archivos XML de configuración deben estar en el ''paquete predeterminado''.

Cualquier otra organización de estos paquetes depende del programador. Realizo un paquete con el JFrame que ejecuta todo el show. Y un paquete para cada unidad lógica. A veces uso un paquete para AbstractTableModels y los mantengo juntos y otro para ComboBoxModels. No es necesario hacer estructuras más profundas. Puede tener un paquete separado para los iconos que puede usar para sus botones, uno para sonidos, etc. Netbeans crea el archivo jar ejecutable para su aplicación donde se incluyen todos los archivos necesarios, incluidos los archivos jar de la biblioteca necesarios.

Aquí tienes un pequeño ejemplo. Todos los nombres de los paquetes excepto ''th'' son bastante obvios. ''th'' es el nombre de esta aplicación y tengo el JFrame que aloja la aplicación allí. Esta aplicación utiliza iReport para generar informes. Esto es para lo que es el paquete ''iReports''.

Los libros describen muestras más pequeñas y están más preocupados por las convenciones de Java.

Puede probar Apache Maven y ver la arquitectura que proporcionan con los arquetipos de la aplicación.


Puede leer la descripción general de A Swing Architecture . Pero cuando hago aplicaciones Swing más grandes, no las organizo de la misma manera que lo hago cuando hago un desarrollo web. Simplemente organizo mis aplicaciones Swing en partes funcionales. Por ejemplo, si la aplicación tiene cuatro pestañas con formularios y tablas, pongo los componentes de una pestaña en un solo paquete. Luego, por lo general, termino con algunas implementaciones personalizadas de AbstractTableModel que interactúan los formularios y las tablas. Y el Modelo guarda un caché de los datos y se comunica con la base de datos.

En mi última aplicación Swing, utilicé actores Akka para simplificar el enhebrado. Luego tuve todos mis componentes Swing ejecutados en el hilo EDT y se comunicaron con un objeto de acceso a datos que era un actor personalizado. Luego también tuve algunos TimerTask que sincronizaron datos de la base de datos con servicios en Internet, pero nunca se ejecutaron en el EDT, solo se comunicaron con el DAO (mi Actor).