SWING
El paquete Swing es el nuevo paquete gráfico que ha aparecido en la
versión 1.2 de
Java. Está compuesto por un amplio conjunto de componentes de
interfaces de usuario que funcionen en el mayor número posible de
plataformas.
Cada uno de los componentes de este paquete puede presentar
diversos aspectos y comportamientos en función de una biblioteca de
clases. En la versión 1.0 de Swing, que corresponde a la distribuida en
la versión 1.2 de la API de Java se incluyen tres bibliotecas de aspecto
y comportamiento para Swing:
[Link]: Aspecto y comportamiento independiente de la
plataforma.
[Link]: Basado en la interfaz Sun Motif.
[Link]: Muy similar a las interfaces Microsoft Windows 95.
La siguiente imagen muestra una aplicación de ejemplo (adjunta al
JDK 1.2) que muestra las diferentes interfaces para una misma
aplicación según se utilice una u otra biblioteca:
Diferentes aspectos de una interfaz Swing
Es la nueva clase denominada UiManager la que se encarga del
aspecto y comportamiento de una aplicación Swing en un entorno de
ejecución.
NUEVAS CARACTERÌSTICAS
La arquitectura Swing presenta una serie de ventajas respecto a su
antecedente AWT:
Amplia variedad de componentes: En general las clases que
comiencen por "J" son componentes que se pueden añadir a la
aplicación. Por ejemplo: JButton
Aspecto modificable (look and feel): Se puede personalizar el
aspecto de las interfaces o utilizar varios aspectos que existen
por defecto (Metal Max, Basic Motif, Window Win32).
Arquitectura Modelo-Vista-Controlador: Esta arquitectura da
lugar a todo un enfoque de desarrollo muy arraigado en los
entornos gráficos de usuario realizados con técnicas orientadas
a objetos. Cada componente tiene asociado una clase de
modelo de datos y una interfaz que utiliza. Se puede crear un
modelo de datos personalizado para cada componente, con sólo
heredar de la clase Model.
Gestión mejorada de la entrada del usuario: Se pueden gestionar
combinaciones de teclas en un objeto KeyStroke y registrarlo
como componente. El evento se activará cuando se pulse dicha
combinación si está siendo utilizado el componente, la ventana
en que se encuentra o algún hijo del componente.
Objetos de acción (action objects): Estos objetos cuando están
activados (enabled) controlan las acciones de varios objetos
componentes de la interfaz. Son hijos de ActionListener.
Contenedores anidados: Cualquier componente puede estar
anidado en otro. Por ejemplo, un gráfico se puede anidar en una
lista.
Escritorios virtuales: Se pueden crear escritorios virtuales o
"interfaz de múltiples documentos" mediante las clases
JDesktopPane y JInternalFrame.
Bordes complejos: Los componentes pueden presentar nuevos
tipos de bordes. Además el usuario puede crear tipos de bordes
personalizados.
Diálogos personalizados: Se pueden crear multitud de formas de
mensajes y opciones de diálogo con el usuario, mediante la
clase JOptionPane.
Clases para diálogos habituales: Se puede utilizar JFileChooser
para elegir un fichero, y JColorChooser para elegir un color.
Componentes para tablas y árboles de datos: Mediante las
clases JTable y JTree.
Potentes manipuladores de texto: Además de campos y áreas de
texto, se presentan campos de sintaxis oculta JPassword, y texto
con múltiples fuentes JTextPane. Además hay paquetes para
utilizar ficheros en formato HTML o RTF.
Capacidad para "deshacer": En gran variedad de situaciones se
pueden deshacer las modificaciones que se realizaron.
Soporte a la accesibilidad: Se facilita la generación de interfaces
que ayuden a la accesibilidad de discapacitados, por ejemplo en
Braille.
PRINCIPALES CLASES
Las clases de Swing se parecen mucho a las de AWT.
De hecho todas las clases componentes de Swing (clases hijas de
JComponent), son
hijas de la clase Component de AWT.
ButtonGroup: Muestra una lista de elementos (JRadioButton) con
solo uno seleccionable. Cada elemento tiene un círculo, que en
caso del elemento seleccionado contendrá un "punto".
JToggleButton: Es como un botón normal, pero al ser pinchado
por el usuario queda activado.
JProgressBar: Representa una barra de estado de progreso,
mediante la que habitualmente se muestra el desarrollo de un
proceso en desarrollo (ejemplo: la instalación de una aplicación).
JTabbedPane: Es una ventana con solapas (la que utiliza
Windows). Este componente había sido muy solicitado.
JApplet: Aunque ya existía una clase applet en AWT, esta nueva
versión es necesaria para crear applets Java que utilicen
interfaces Swing.
Por supuesto Swing no se limita a estas clases, sino que posee
muchas más con diversas
funcionalidades.
NUEVOS GESTORES DE IMPRESIÒN
Swing incorpora nuevos gestores de impresión, ampliando los cinco
que AWT incorporaba. Entre ellos conviene destacar los siguientes:
BoxLayout: Es similar al FlowLayout de AWT, con la diferencia
de que con él se pueden especificar los ejes (x o y). Viene
incorporada en el componente Box, pero está disponible como
una opción en otros componentes.
OverlayLayout: Todos los componentes se añaden encima de
cada componente previo.
SpringLayout: El espacio se asigna en función de una serie de
restricciones asociadas con cada componente.
ScrollPaneLayout: Incorporado en el componente ScrollPane
ViewportLayout: Incorporado en el componente Viewport
JROOTPANE
La clase JRootPane permite colocar contenido de las applets creadas
con la clase
JApplet en un determinado plano de impresión (capa).
Por orden de cercanía al usuario, estas capas son:
glassPane: Una capa que abarca toda la parte visible (por
defecto no es visible).
layeredPane: Una subclase de JComponent diseñada para
contener cuadros de diálogo, menús emergentes y otros
componentes que deben aparecer flotando entre el usuario y el
contenido.
menubar: Una capa opcional, que si aparece estará anclada en
la parte superior.
contentPane: La capa en que se dibujará la mayor parte del
contenido.
Así pues cada vez que se vayan a añadir componentes a una applet
de clase Japplet,
debe añadirse a uno de estas capas. Por ejemplo:
[Link]().add( unComponente );
NUEVOS EVENTOS DE SWING
Swing incorpora su nuevo conjunto de eventos para sus componentes.
a) Eventos Fisicos
Sólo aparecen dos nuevos eventos físicos, descendientes de
,InputEvent:
MenuKeyEvent: Un menú de árbol ha recibido un evento de
MouseEvent (acción sobre el ratón).
MenuDragMouseEvent: Un menú de árbol ha recibido un evento
de KeyEvent (pulsación de una tecla).
b) Eventos Semanticos
Son todos hijos del evento de AWT AWTEvent, que es el evento base
de la jerarquía de eventos:
AncestorEvent: Antecesor añadido desplazado o eliminado.
CaretEvent: El signo de intercalación del texto ha cambiado.
ChangeEvent: Un componente ha sufrido un cambio de estado.
DocumentEvent: Un documento ha sufrido un cambio de estado.
HyperlinkEvent: Algo relacionado con un vínculo hipermedia ha
cambiado.
InternalFrameEvent: Un AWTEvent que añade soporte para
objetos , JInternalFrame
ListDataEvent: El contenido de una lista ha cambiado o se ha
añadido o eliminado un intervalo.
ListSelectionEvent: La selección de una lista ha cambiado.
MenuEvent: Un elemento de menú ha sido seleccionado o
mostrado o bien no seleccionado o cancelado.
PopupMenuEvent: Algo ha cambiado en JPopupMenu.
TableColumnModelEvent: El modelo para una columna de tabla
ha cambiando.
TableModelEvent: El modelo de una tabla ha cambiado.
TreeExpansionEvent: El nodo de un árbol se ha extendido o se
ha colapsado.
TreeModelEvent: El modelo de un árbol ha cambiado.
TreeSelectionEvent: La selección de un árbol ha cambiado de
estado.
UndoableEditEvent: Ha ocurrido una operación que no se puede
realizar.
EL PATRON DE DISEÑO MODELO-VISTA-CONTROLADOR
Muchos de los componentes Swing están basados en un patrón de
diseño denominado
"Modelo-Vista-Controlador".
El concepto de este patrón de diseño se basa en tres elementos:
Modelo: Almacena el estado interno en un conjunto de clases.
Vista: Muestra la información del modelo
Controlador: Cambia la información del modelo (delegado).