2010-07-01 19 views
5

Estoy buscando orientación sobre las mejores prácticas para una aplicación que utilice Java Swing para ser estructurado. Normalmente soy un tipo de webapp e intento seguir MVC. ¿MVC es típico de las aplicaciones Swing? ¿Si es así, cómo?Java Swing Program Structure

Respuesta

3

Siguiendo MVC es una muy buena idea. Por lo que yo sé, no existe un marco formal de Java Swing que haga eso, todos se concentran en el aspecto de "Vista" del problema.

En cuanto a la estructura de la aplicación y MVC, el mejor marco que conozco es Griffon. No es Java, es Groovy, pero eso es lo que lo hace más atractivo y bastante fácil de aprender. La aplicación Griffon to a Swing es lo mismo que Grails en una aplicación web.

echarle un vistazo en http://griffon.codehaus.org/

+1

Actualmente, Griffon es más Java que Groovy (al menos en su implementación). Te permite escribir una aplicación con Groovy o Java o incluso ambas al mismo tiempo. – aalmiray

+0

Actualmente estoy esperando soporte completo (generación de código también) de Scala. Eso sería realmente agradable. Pensé que estabas trabajando en algo así :) –

+0

Ya está allí. Instala el arquetipo scala y estás en el negocio. 'leonado instalar-arquetipo http: // svn.codehaus.org/leonado/arquetipos/Scala/trunk/Scala/scala-leonado-archetype.zip' ' leonado crear la aplicación de ejemplo -archetype = scala' Tenga en cuenta que el modo applet aún no es compatible. Descubrirás que puedes escribir cualquier artefacto de griffon (Modelo, Vista, Controlador, Servicio) con Scala. Incluso puede usar scala-swing en Views. – aalmiray

0

oscilación tiene una relativamente buena puesta a punto de una arquitectura MVC, pero en realidad combina la vista y el controlador. Los componentes en Swing pueden tener oyentes conectados a ellos, que es el aspecto del controlador, y luego desde dentro de estos oyentes (que están dentro de los componentes) puede modificar la vista y el modelo en consecuencia. Entonces, para responder a su pregunta, sí, Swing ayudaría con un enfoque MVC a una aplicación Java.

En Swing, todavía tiene dos piezas separadas para VC: componentes y oyentes. La razón por la que digo que están combinados es porque cada componente puede tener su propio oyente respectivo. Estos oyentes suelen hacer la manipulación y son el aspecto del controlador. Los componentes están diseñados no solo para ser vistos en la pantalla, sino también para pasar información a estos oyentes. Las pulsaciones de botones, las pulsaciones de teclas, los cambios de enfoque, los cierres de ventanas, etc. se informan a los oyentes del componente respectivo por parte del componente. Aquí hay un fragmento de código simple para un botón con un oyente de acción, que registra presionar un botón.

ActionListener buttonListener = new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     // Controller code 
    } 
}; 

JButton button = new JButton("A Button"); 
button.addActionListener(buttonListener); 

El ActionListener es esencialmente el controlador, pero depende de button para recibir la entrada del usuario. Aquí es donde oscilación confunde la diferencia entre la vista y el controlador desde un punto de vista MVC puro, pero al mismo tiempo, la distinción es todavía allí:

oyentes son los controladores (menos directamente interpretación de la entrada)
componentes son el vista (pero interpretar la entrada y lo pasan al controlador)

Espero que ayude :)

+0

No creo que los oyentes sean controladores. Simplemente pueden usarse en un controlador para responder a eventos de componentes. –

+0

Eso es lo que quise decir. En términos de MVC, no lo son, pero se puede pensar de esa manera. Los controladores toman la entrada y modifican el modelo. Los oyentes pueden no necesariamente tomar la entrada, pero sin duda se pueden utilizar para manipular el modelo y, como es con algunas interpretaciones de MVC, modificar la vista. Todo depende de qué parte de las responsabilidades del controlador desee poner más peso. – peppertherj

0

Hubo un JSR (296), que describe un marco para la construcción de oscilación de interfaz gráfica de usuario, pero parece que ha sido olvidado, echa un vistazo al siguiente artículo sin embargo:

http://java.dzone.com/news/jsr-296-end-jframe

he encontrado lo siguiente marcos, inicialmente basados ​​fuera de él, que parecen prometedores:

Estaría interesado en saber cómo funcionan en la práctica. Espero que ayuden

+0

También hay esto (pero parece inactivo) - http://github.com/hamnis/SAFF – Jon