Anda di halaman 1dari 15

i

El patrn de dise o o n Modelo-Vista-Controlador (MVC) y su implementacin en Java Swing o


Ernesto Bascn Pantoja o
Desarrollador de software Jalasoft e-mail: ebascon@jalasoft.com

1.

Introduccin o

Durante el proceso de ense anza de programacin, los docentes tienen que luchar n o contra el hbito natural que la mayor de los estudiantes tienen de solucionar los a a problemas en largas, desordenadas, incomprensibles y enormes cantidades de cdigo o que mezclan algoritmos de procesamiento de datos, combinaciones de colores, mensajes al usuario, iconos animados, grcos de barras y otras cosas ms que hacen de ese cdigo a a o dif de leer, de comprender y por tanto, de ser modicado, mantenido y extendido. cil El algoritmo 1 muestra esta mala forma de resolver un problema:
1 2 3 4 5 6 7 8 9 10 11 12 Mientras el usuario no termine la aplicacin, hacer: o Solicitar el ingreso de la palabra a buscar Buscar registros en la base de datos con esa palabra Lista de Resultados Si la lista de resultados est vaca: a Mostrar un mensaje de error caso contrario Recorrer la lista de resultados Sacar cada dato de la lista de resultados dato Agregar el dato a una tabla en la pantalla Mostrar la tabla en la pantalla Mostrar la lista de resultados en un grfico estadstico a Esperar que el usuario presione CONTINUAR Algoritmo 1.

Como se puede ver, el algoritmo anterior mezcla acceso a bases de datos, introduccin de datos, despliegue de resultados, procesos de b squeda, salida de mensajes de o u error y grcos estad a sticos en un simple bloque de cdigo y, aunque se ve exagerado, o una enorme cantidad de aplicaciones hechas a medida y aplicaciones web desarrolladas
Acta Nova; Vol. 2, N 4, diciembre 2004 493

i i i

494

Ernesto Bascn: El patrn de diseo Modelo-Vista-Controlador (MVC) . . . o o n

en nuestro medio estn implementadas de esa manera. Si bien ste es un error causado a e por un mal hbito del programador, las herramientas de desarrollo rpido de aplicaa a ciones (RAD1 ) como Delphi, Visual Basic y los lenguajes de scripting de desarrollo de aplicaciones web (ASP2 , JSP3 o PHP4 ) contribuyen a crear esa clase de aplicaciones muy fciles de implementar, pero muy desorganizadas y dif a ciles de comprender y modicar. El patrn de dise o presentado en el presente art o n culo, plantea un mtodo e formal para separar los mdulos de entrada, de procesamiento y de salida de datos en o una aplicacin y la forma de comunicacin entre dichos mdulos; tambin se vern las o o o e a caracter sticas, ventajas y desventajas de la implementacin de este patrn de dise o o o n en la librer de interfaz de usuario Java Swing. a

2.

El patrn de diseo Modelo-Vista-Controlador o n

Durante toda la dcada del setenta, SmallTalk y algunos otros lenguajes como Sie mula I, fueron construyendo gradualmente el paradigma de programacin orientada a o objetos y estableciendo conceptos tales como objetos, clases, encapsulacin, herencia y o polimorsmo [3]. Si bien dichos lenguajes no son usados actualmente para implementar aplicaciones comerciales, los conceptos que dejaron en el mundo del desarrollo de software estn vigentes en la actualidad y son la base de lenguajes modernos como C++, a Java o C#. SmallTalk tambin fue el primer lenguaje de programacin que permiti dise ar e o o n interfaces de usuario con m ltiples ventanas desplegadas en una misma pantalla, u concepto que despus fue aplicado por GEMS, Macintosh, X11, Windows y otras intere faces grcas de usuario modernas. El concepto central detrs de las librer de interfaz a a as de usuario provistas por SmallTalk est basado en el patrn de dise o MVC, creado a o n por el profesor Trygve Reenskaug [4]. MVC es un patrn de dise o que considera dividir una aplicacin en tres mdulos o n o o claramente identicables y con funcionalidad bien denida: El Modelo, las Vistas y el Controlador. 2.1. El modelo

El modelo es un conjunto de clases que representan la informacin del mundo real o que el sistema debe procesar, as por ejemplo un sistema de administracin de datos cli o matolgicos tendr un modelo que representar la temperatura, la humedad ambiental, o a a el estado del tiempo esperado, etc. sin tomar en cuenta ni la forma en la que esa informacin va a ser mostrada ni los mecanismos que hacen que esos datos estn dentro del o e modelo, es decir, sin tener relacin con ninguna otra entidad dentro de la aplicacin. o o
1 Rapid Application Development, entornos de desarrollo integrados que proporcionan todos los mecanismos para construir rpidamente aplicaciones. a 2 Active Server Pages, (Pginas de Servidor Activas), tecnolog de Microsoft para desarrollo de a a aplicaciones web. 3 Java Server Pages, arquitectura similar a ASP pero para plataformas Java. 4 PHP: Arquitectura similar a ASP pero desarrollada para plataformas Linux.

i i i

Acta Nova; Vol. 2, N 4, diciembre 2004

Apuntes

495

El modelo desconoce la existencia de las vistas y del controlador. Ese enfoque suena interesante, pero en la prctica no es aplicable pues deben existir interfaces que pera mitan a los mdulos comunicarse entre s por lo que SmallTalk sugiere que el modelo o , en realidad est formado por dos submdulos: El modelo del dominio y el modelo de la e o aplicacin. El presente art o culo utiliza la propuesta de SmallTalk por ser la base de la implementacin de la librer Swing que es vista ms adelante. o a a

2.1.1.

Modelo del dominio

Se podr decir que el modelo del dominio (o el modelo propiamente dicho) es el a conjunto de clases que un ingeniero de software modela al analizar el problema que desea resolver; as pertenecer al modelo del dominio: El cliente, la factura, la temperatura, , an la hora, etc. El modelo del dominio no deber tener relacin con nada externo a la a o informacin que contiene. o

2.1.2.

Modelo de la aplicacin o

El modelo de la aplicacin es un conjunto de clases que se relacionan con el modelo o del dominio, que tienen conocimiento de las vistas y que implementan los mecanismos necesarios para noticar a stas ultimas sobre los cambios que se pudieren dar en el e modelo del dominio. El modelo de la aplicacin es llamado tambin coordinador de la o e aplicacin.[4] o

2.2.

Las vistas

Las vistas son el conjunto de clases que se encargan de mostrar al usuario la informacin contenida en el modelo. Una vista est asociada a un modelo, pudiendo existir o a varias vistas asociadas al mismo modelo; as por ejemplo, se puede tener una vista mos trando la hora del sistema como un reloj analgico y otra vista mostrando la misma o informacin como un reloj digital. o Una vista obtiene del modelo solamente la informacin que necesita para desplegar o y se actualiza cada vez que el modelo del dominio cambia por medio de noticaciones generadas por el modelo de la aplicacin.[2] o

2.3.

El controlador

El controlador es un objeto que se encarga de dirigir el ujo del control de la aplicacin debido a mensajes externos, como datos introducidos por el usuario u opciones o del men seleccionadas por l. A partir de estos mensajes, el controlador se encarga de u e modicar el modelo o de abrir y cerrar vistas. El controlador tiene acceso al modelo y a las vistas, pero las vistas y el modelo no conocen de la existencia del controlador. [3] La gura 1 muestra la relacin entre los mdulos de MVC: o o

i i i

496

Ernesto Bascn: El patrn de diseo Modelo-Vista-Controlador (MVC) . . . o o n

Figura 1: Relacin entre los mdulos del patrn MVC. o o o 2.4. Un ejemplo

Tomemos como ejemplo una aplicacin hecha para almacenar y procesar los datos o de las elecciones municipales. El modelo del dominio ser bastante simple: Un conjunto de votos, un conjunto de a mesas y un conjunto de departamentos. Cada voto almacenar la seleccin hecha por a o el votante y la mesa donde emiti su voto. Cada mesa contendr informacin sobre el o a o lugar de votacin y el departamento donde estar ubicada. o a El conjunto de vistas sobre el modelo tambin ser sencillo: Se podr obtener un e a a grco estad a stico de votos por departamento en barras, otro grco de votos por dea partamento mostrado como torta, el conjunto de votos totales en una tabla, el conjunto de votos totales en barras o en torta, etc. Como se puede ver, aunque todas las vistas estar mostrando la informacin de diferente manera, todas estar asociadas al an o an mismo modelo del dominio. El controlador se encargar de mostrar las vistas que el usuario desear ver y de a a permitir al usuario introducir informacin de votos. Si el usuario desear ver una vista, o a el controlador crear la vista solicitada, esta vista obtendr la informacin necesaria a a o del modelo y la desplegar Si el usuario aumentar informacin de votos al sistema, a. a o el controlador se encargar de actualizar la informacin contenida en el modelo del a o dominio que, al ser modicado, anunciar al modelo de la aplicacin la existencia de a o cambios y ste noticar a todas sus vistas asociadas para que se actualicen [2]. De e a esta manera, las vistas estar siempre actualizadas mostrando exactamente la misma an informacin contenida en el modelo. o 2.5. Ventajas

Desarrollar una aplicacin siguiendo este patrn de dise o tiene muchas ventajas: o o n

i i i

Acta Nova; Vol. 2, N 4, diciembre 2004

Apuntes

497

La aplicacin est implementada modularmente. o a Sus vistas muestran informacin actualizada siempre. o El programador no debe preocuparse de solicitar que las vistas se actualicen, ya que este proceso es realizado automticamente por el modelo de la aplicacin. a o Si se desea hacer una modicacin al modelo del dominio, como aumentar mtodos o e o datos contenidos, slo debe modicarse el modelo y las interfaces del mismo con o las vistas, no todo el mecanismo de comunicacin y de actualizacin entre modelos. o o Las modicaciones a las vistas no afectan en absoluto a los otros mdulos de la o aplicacin. o MVC es bastante utilizado en la actualidad en marcos de aplicacin orientados o a objeto desarrollados para construir aplicaciones de gran tama o; Java Swing, n Apache Struts, Microsoft ASP.NET, las transformaciones XSL o incluso los doA cumentos L TEX siguen este patrn de dise o. o n MVC est demostrando ser un patrn de dise o bien elaborado pues las aplicacioa o n nes que lo implementan presentan una extensibilidad y una mantenibilidad unicas comparadas con otras aplicaciones basadas en otros patrones.

2.6.

Desventajas El tiempo de desarrollo de una aplicacin que implementa el patrn de dise o o o n MVC es mayor, al menos en la primera etapa, que el tiempo de desarrollo de una aplicacin que no lo implementa, ya que MVC requiere que el programador o implemente una mayor cantidad de clases que en un entorno de desarrollo com n u no son necesarias. Sin embargo, esta desventaja es muy relativa ya que posteriormente, en la etapa de mantenimiento de la aplicacin, una aplicacin MVC es o o much simo ms mantenible, extensible y modicable que una aplicacin que no lo a o implementa. MVC requiere la existencia de una arquitectura inicial sobre la que se deben construir clases e interfaces para modicar y comunicar los mdulos de una aplicacin. o o Esta arquitectura inicial debe incluir, por lo menos: un mecanismo de eventos para poder proporcionar las noticaciones que genera el modelo de aplicacin; una clase o Modelo, otra clase Vista y una clase Controlador genricas que realicen todas las e tareas de comunicacin, noticacin y actualizacin que sern luego transparentes o o o a para el desarrollo de la aplicacin. o MVC es un patrn de dise o orientado a objetos por lo que su implementacin es o n o sumamente costosa y dif en lenguajes que no siguen este paradigma. cil

i i i

498

Ernesto Bascn: El patrn de diseo Modelo-Vista-Controlador (MVC) . . . o o n

3.

MVC en Java Swing

Java es un lenguaje orientado a objetos desarrollado por Sun Microsystems que tiene como caracter sticas fundamentales su portabilidad a un gran n mero de plataformas u (Java es en s una plataforma), su simplicidad y su extenso conjunto de librer as. La librer de interfaces grcas de usuario que viene en el SDK5 de Java se llama a a Java Swing y tiene estas caracter sticas sobresalientes: Implementa bastantes componentes visuales (botones, campos de texto, tablas, barras de men s, rboles, etc.). u a Los componentes provistos por Java Swing son independientes de la plataforma donde se ejecuta la aplicacin (contrario a la idea de AWT6 , otra librer de intero a faces de usuario de Java, que utiliza componentes nativos de la interfaz de usuario del sistema operativo donde se ejecuta la aplicacin) y por tanto, la portabilidad o de las aplicaciones desarrolladas con Swing est garantizada. a Permite conectar y desconectar estilos de interfaz de usuario (llamados look and feels) que modican la forma en que se muestra y se comporta toda la interfaz de usuario, as la misma aplicacin puede verse como una aplicacin Windows o , o o 7 como una aplicacin Motif simplemente conmutando el look and feel en tiempo o de ejecucin. o Cumple con el dise o de JavaBeans que hace que los componentes de esta librer n a puedan ser utilizados en entornos de desarrollo integrados (IDEs) como JBuilder, Sun Forte for Java o Eclipse. Su arquitectura est profundamente basada en MVC, lo que proporciona un alto a grado de extensibilidad y de personalizacin de los componentes de la librer o a. 3.1. Arquitectura de Java Swing

Si bien Swing se basa en el patrn de dise o MVC, presenta algunas diferencias o n en su implementacin: La diferencia ms notoria es que el controlador y la vista estn o a a implementados como un unico elemento denominado delegado de interfaz de usuario (UI delegate). Cada componente est asociado a un conjunto de datos (modelo del a dominio) a travs de un modelo de aplicacin y del delegado de interfaz. Este delegado e o ha sido dise ado debido a la incapacidad de programar un controlador genrico con n e conocimiento de la vista a la que hubiera podido controlar, por tanto, cada componente tiene asociado un delegado de interfaz que a su vez, est asociado a un modelo de a aplicacin que proporciona toda la informacin que el delegado requiere y que notica o o
5 SDK: Software Development Kit, en el caso de Java es el conjunto de clases provistas por Sun Microsystems para desarrollar aplicaciones. 6 AWT: Abstract Windowing Toolkit, primera librer de interfaz de usuario de Java, Swing utiliza a un conjunto muy pequeo de las clases de AWT como base de su arquitectura. n 7 Motif, estilo de interfaz de usuario implementado en CDE (Common Desktop Environment), una interfaz de usuario bastante difundida en entornos UNIX.

i i i

Acta Nova; Vol. 2, N 4, diciembre 2004

Apuntes

499

al componente si alg n cambio se ha dado en el modelo del dominio [5]; por tanto, Java u Swing implementa el modelo MVC en una implementacin por componente. o

Figura 2: Relacin entre los mdulos de Java Swing. o o En la gura 2 se observa tambin la existencia de un elemento denominado admie nistrador de interfaz de usuario (UI manager); este elemento permite conectar un look and feel espec co a cada componente visualizado y almacena tambin informacin e o general a la apariencia de los componentes en su visualizacin (color de fondo por deo fecto, tipo de letra por defecto, tipos de bordes, etc.). Todos los componentes de Swing estn manejados por el mismo administrador de interfaz de usuario. a Los modelos implementados en Swing estn clasicados en dos categor Modelos a as: de estado de interfaz de usuario y modelos de datos. Los modelos de estado de interfaz denen el estado visual de un componente, como por ejemplo, el estado de un botn o est presionado o informacin de los a o tems seleccionados en determinada lista. Los modelos de datos representan informacin que est contextualizada en la aplicacin. o a o Estos modelos de datos sirven como puente de comunicacin entre el modelo del dominio o y el delegado de interfaz de un componente. El cuadro 1 muestra la relacin entre los componentes de Java Swing, sus delegados o de interfaz y el modelo que tienen asociado [1]. 3.2. Modelos y componentes

Como se pudo ver hasta el momento, cada tipo de componente tiene asociado un tipo particular de modelo de aplicacin. Swing provee estos tipos de modelo como ino terfaces (declaraciones de mtodos sin implementaciones, por ejemplo el TableModel), e adems proporciona modelos por defecto (DefaultTableModel) que proporcionan funa cionalidad bsica y lista para usarse. La ventaja de que los modelos de aplicacin sean a o implementados como interfaces, es que el desarrollador puede implementar un modelo de aplicacin adecuado al modelo del dominio que tiene, sin tener que reestructurar sus o datos seg n requerimientos de Swing. u Veamos todo esto con un ejemplo: Se desea hacer un programa que muestre en una tabla una lista de personas, para lo cual se implementa primeramente una clase Persona que tenga nombre, apellido, carnet de identidad y telfono como atributos: e

i i i

500

Ernesto Bascn: El patrn de diseo Modelo-Vista-Controlador (MVC) . . . o o n

Componente JButton JToggleButton JCheckBox JRadioButton JMenu JMenuItem JComboBox JProgressBar JScrollBar JSlider JTabbedPane JList JTable JTree JTextArea JTextField

Delegado de interfaz (controlador, vista) ButtonUIB ButtonUI ButtonUI ButtonUI MenuBarUI MenuItemUI ComboBoxUI ProgressBarUI ScrollBarUI SliderUI TabbedPaneUI ListUI TableUI TreeUI TextUI TextUI

Modelo de aplicacin o ButtonModel ButtonModel ButtonModel ButtonModel SingleSelectionModel ButtonModel ComboBoxModel BoundedRangeModel BoundedRangeModel BoundedRangeModel SingleSelectionModel ListModel TableModel TreeModel Document Document

Tipo Estado Estado Estado Estado Estado Estado Datos Dat./Est. Dat./Est. Dat./Est. Estado Datos Datos Datos Datos Datos

Cuadro 1: Relacin entre los componentes de Java Swing, sus delegados de interfaz y sus o modelos.

class Persona { protected String protected String protected String protected String

nombre; apellido; carnet; telefono;

public Persona(String aNombre, String aApellido, String aCarnet, String aTelefono) { nombre = aNombre; apellido = aApellido; carnet = aCarnet; telefono = aTelefono; } public String getNombre() { return nombre; } public String getApellido() {

i i i

Acta Nova; Vol. 2, N 4, diciembre 2004

Apuntes

501

return apellido; } public String getCarnet() { return carnet; } public String getTelefono() { return telefono; } } Segmento de cdigo 1: Implementacin de la clase Persona. o o Luego se construye una clase denominada ListaDePersonas que implementa los mtodos para agregar y acceder a las personas a la lista: e class ListaDePersonas { protected Vector vectorDePersonas; public ListaDePersonas() { vectorDePersonas = new Vector(); } public void agregarPersona(Persona aPersona) { vectorDePersonas.add(aPersona); } public int getNumeroDePersonas() { return vectorDePersonas.size(); } public Persona getPersona(int aIndex) { return (Persona) vectorDePersonas.elementAt(aIndex); } } Segmento de cdigo 2: Implementacin de la clase ListaDePersona. o o

i i i

502

Ernesto Bascn: El patrn de diseo Modelo-Vista-Controlador (MVC) . . . o o n

Las clases Persona y ListaDePersonas se constituyen en el modelo del dominio de la aplicacin de ejemplo. Para que este modelo pueda ser mostrado por un eleo mento de interfaz, debe construirse un modelo de aplicacin, en este caso, la clase o PersonasTableModel que se basa en la clase AbstractTableModel que dene la funcionalidad bsica del modelo de la tabla: a class PersonasTableModel extends AbstractTableModel { protected ListaDePersonas listaDePersonas; PersonasTableModel(ListaDePersonas aListaDePersonas) { listaDePersonas = aListaDePersonas; } public int getRowCount() { return listaDePersonas.getNumeroDePersonas(); } public int getColumnCount() { return 4; //hay cuatro atributos en la clase Persona } public Object getValueAt(int aRow, int aCol) { Persona persona = listaDePersonas.getPersona(aRow); switch (aCol) { case 0: return persona.getNombre(); case 1: return persona.getApellido(); case 2: return persona.getCarnet(); case 3: return persona.getTelefono(); } return ; } public String getColumnName(int aCol) { switch (aCol) { case 0: return Nombre; case 1: return Apellido; case 2: return C.I.; case 3: return Telefono;

i i i

Acta Nova; Vol. 2, N 4, diciembre 2004

Apuntes

503

} return ; } } Segmento de cdigo 3: Implementacin de la clase PersonasTableModel. o o Los mtodos implementados en la clase PersonasTableModel, son mtodos denidos e e en la clase AbstractTableModel que se encargan de proporcionar toda la informacin o que el delegado de la tabla necesita para mostrar esa informacin. Como se puede ver o en el ejemplo, la clase PersonasTableModel sirve como un puente entre el modelo del dominio y el delegado de interfaz de usuario y permite que el componente se adapte a la estructura de datos manejada. Una vez denidas estas clases, se procede a colocar el componente JTable (asociado al modelo denido anteriormente) en una ventana: import javax.swing.*; public class PersonasTableFrame extends JFrame { protected JTable table; protected ListaDePersonas listaDePersonas; public MVCTestFrame() { setSize(400, 300); setTitle(PersonasTableModel); initData(); initUI(); setVisible(true); } protected void initData() { listaDePersonas = new ListaDePersonas(); //Datos ejemplo listaDePersonas.agregarPersona(new Persona(Julio, Prez, e 3949345 PT,4295453)); listaDePersonas.agregarPersona(new Persona(Alfredo, Lpez, o 3554352 LP, 591-4-4481353)); listaDePersonas.agregarPersona(new Persona(Ricardo, Loayza, 4002321 CB, 591-2-6227587)); listaDePersonas.agregarPersona(new Persona(Elena,

i i i

504

Ernesto Bascn: El patrn de diseo Modelo-Vista-Controlador (MVC) . . . o o n

Mendoza, 3443432 CB, 591-4-4443211)); } protected void initUI() { setDefaultCloseOperation(EXIT ON CLOSE); getContentPane().setLayout(new BorderLayout(5, 5)); PersonasTableModel tableModel = new PersonasTableModel(listaDePersonas); table = new JTable(tableModel); JScrollPane tableScrollPane = new JScrollPane(table); getContentPane().add(tableScrollPane, BorderLayout.CENTER); } } Segmento de cdigo 4: Implementacin de la ventana principal. o o

Figura 3: Ejecucin del ejemplo descrito. o

3.3.

Noticaciones

A lo largo de todo este art culo hemos hablado de noticaciones hechas a las vistas debido a cambios ocurridos en el modelo. Java Swing maneja el paso de noticaciones por medio de un mecanismo de eventos y de escuchadores (listeners) de eventos. Para que una vista se actualice debido al cambio de su modelo asociado, Swing provee dos tipos de noticaciones: Las noticaciones ligeras (lightweight) y las noticaciones de estado (stateful).

i i i

Acta Nova; Vol. 2, N 4, diciembre 2004

Apuntes

505

Las noticaciones ligeras env a las vistas un mensaje de modelo modicado. Es an la vista la que debe solicitar al modelo ms informacin sobre los cambios realizados. a o Este tipo de noticaciones es bastante til cuando la frecuencia de modicaciones al modelo es alta (como en el modelo del JScrollPane que se modica cada que se arrastra el control del scroll ) y es bastante usado en modelos que almacenan estado de interfaz. El cuadro 2 muestra los modelos, los listeners y los eventos que funcionan con esta clase de noticaciones: Modelo BoundedRangeModel ButtonModel SingleSelectionModel Listener ChangeListener ChangeListener ChangeListener Evento ChangeEvent ChangeEvent ChangeEvent

Cuadro 2: Modelos con sus respectivos Listeners y eventos para noticaciones ligeras.

El segmento de cdigo 5 muestra cmo el mtodo stateChanged procesa noticao o e ciones cuando el modelo de un botn es modicado: o protected void initUI() { boton = new JButton(Evento); boton.setBounds(10, 10, 75, 25); ButtonModel modelo = boton.getModel(); modelo.addChangeListener(this); //Listener getContentPane().add(boton); } //mtodo encargado de escuchar la notificacin e o public void stateChanged(ChangeEvent aEvent) { contador++; mensaje.setText(Modelo cambiado: + contador + veces); } Segmento de cdigo 5: Ejemplo de procesamiento de cambio de estado de modelo. o Las noticaciones de estado proporcionan informacin mucho ms precisa sobre el o a cambio que se ha dado en el modelo. El cuadro 3 muestra los modelos, los listeners y los eventos que funcionan con esta clase de noticaciones: En el segmento de cdigo 6 se ve cmo el mtodo insertUpdate se encarga de proo o e cesar las noticaciones de estado cuando se inserta texto en el documento de un campo de texto:
protected void initUI() {

i i i

506

Ernesto Bascn: El patrn de diseo Modelo-Vista-Controlador (MVC) . . . o o n

M odelo ListModel ListSelectionModel ComboBoxModel TreeModel TreeSelectionModel TableModel Document

Listener ListDataListener ListSelectionListener ListDataListener TreeModelListener TreeSelectionListener TableModelListener DocumentListener

E vento ListDataEvent ListSelectionEvent ListDataListener TreeModelEvent TreeSelectionEvent TableModelEvent DocumentEvent

Cuadro 3: Modelos con sus respectivos listeners y eventos para noticaciones de estado.

textField = new JTextField(); textField.setBounds(10, 10, 175, 22); textField.getDocument().addDocumentListener( new DocumentListener() //listener { public void insertUpdate(DocumentEvent aEvent) //evento { contador++; mensaje.setText(Modelo cambiado: + contador + veces); } public void changedUpdate(DocumentEvent aEvent) { } public void removeUpdate(DocumentEvent aEvent) { } }); getContentPane().add(textField); }

Segmento de cdigo 6: Ejemplo de procesamiento de noticacin de cambio de estado. o o 3.4. Ventajas

La implementacin de Swing del patrn de dise o MVC presenta muchas ventajas: o o n Permite la creacin de interfaces de usuario de una manera sencilla y rpida, o a permitiendo el manejo del patrn MVC pero ocultando los detalles de su impleo mentacin. o El mecanismo de eventos de Java se adapta perfectamente al mecanismo de noticaciones de MVC. Al estar los modelos separados de la vista, las posibilidades de extensin de la o librer y de personalizacin de componentes ya existentes son enormes. a o

i i i

Acta Nova; Vol. 2, N 4, diciembre 2004

Apuntes

507

Permite al usuario crear sus propias estructuras de datos y adaptar la interfaz de usuario a ellas y no a la inversa, como sucede con librer ya implementadas. as 3.5. Desventajas La principal desventaja de esta implementacin es que, aunque la arquitectura de o Java Swing lo permite, la personalizacin y extensin de los modelos de algunos o o componentes (especialmente tablas y rboles), es bastante dicultosa. a Los modelos de estado y los modelos de datos de Java Swing no estn claramente a diferenciados en la implementacin y, si bien el modelo de datos es la implemeno tacin del modelo de la aplicacin, el modelo de estado est muy alejado de la o o a denicin de modelo que MVC introdujo. o El controlador denido por MVC es casi inexistente en Java Swing y su trabajo puede confundirse con el del administrador de interfaz de usuario.

Referencias
[1] Java Swing architecture.
http://www.cs.unc.edu/Courses/wwwp-s99/members/walkera/swing/presentSwingII.htm.

[2] Joseph Bergin. Building Graphical User Interfaces with the MVC pattern. http://csis.pace.edu/ bergin/mvc/mvcgui.html. [3] Steve Burbeck. Applications Programming in Smalltalk-80(TM): How to use Model-View-Controller (MVC). http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html. [4] John Deacon. Model-View-Controller (MVC) Architecture. http://www.jdl.co.uk/briefings/mvc.pdf. [5] Amy Fowler. A Swing architecture overview. http://java.sun.com/products/jfc/tsc/articles/architecture/. [6] Sun Microsystems. JavaT M 2 Platform, Standard Edition, v 1.4.2, API Specication. http://java.sun.com/products/jdk1.4/doc.

i i i

Anda mungkin juga menyukai