## Sobre el JFC y Swing

Esta página responde cuatro preguntas:

- ¿Qué son el JFC y Swing?
- ¿Qué versiones contienen el API Swing?
- ¿Qué paquetes Swing debería utilizar?
- ¿Que tienen de diferente los componentes Swing de los componentes AWT?

#### ¿Qué son el JFC y Swing?

> JFC es la abreviatura de JavaTM Foundation Classes, que comprende un grupo de características para ayudar a construir interfaces gráficos de usuario (GUIs).
> Los componentes Swing
>   Inlcuye todo desde botones hasta splitpanes o tablas. Puedes ver imágenes de todos los componentes en Índice Visual de Componente Swing.
> Soporte de Aspecto y Comportamiento Conectable
>   Le ofrece a cualquier componente Swing una amplia selección de aspectos y comportamientos. Por ejemplo, el mismo programa puede usar el Aspecto y Comportamiento Java o el Aspecto y Comportamiento Windows. Esperamos mucho más de los paquetes de Aspecto y Comportamiento -- incluyendo algo que use sonido en lugar de un 'look' visual.
> API de Accesibilidad
>   Permite tecnologías asistivas como lectores de pantalla y display Braille para obtener información desde el interface de usuario.
> Java 2D API (sólo JDK 1.2 )
>   Permite a los desarrolladores incorporar fácilmente graficos 2D de alta calidad, texto, e imágenes en aplicaciones y applets Java.
> Soporte de Drag&Drop (sólo JDK 1.2)
>   Proporciona la habilidad de arrastrar y soltar entre aplicaciones Java y aplicaciones nativas.

> Las tres primeras caracterísitcas del JFC fueron implementadas sin ningún código nativo, tratando sólo con el API definido en el JDK 1.1. Cómo resultado, se convirtieron en una extensión del JDK 1.1. Esta versión fue liberada como JFC 1.1, que algunas veces es llamada 'Versión Swing'. El API del JFC 1.1 es conocido como el API Swing.

> > Nota: "Swing" era el nombre clave del proyecto que desarrolló los nuevos componentes. Aunque no es un nombre oficial, frecuentemente se usa para referirse a los nuevos componentes y al API relacionado. Está inmortalizado en los nombres de paquete del API Swing, que empiezan con "javax.swing."

> Esta sección se concentra en los componentes Swing. Te ayudaremos a elegir los apropiados para tu GUI, te diremos cómo usarlos, y te daremos la información que necesites para usarlos de forma efectiva. Explicaremos el Aspecto y Comportamiento Conectable y el soporte de Accesibilidad cuando afecten a la forma de escribir programas Swing. No cubre aquellas caracterísitcas del JFC que sólo aparecen en el JDK 1.2. Para información sobre ellas, puedes ver Gráficos 2D y la Home Page del JFC.

> Los siguientes gráficos muestran tres vistas de un GUI que usa componentes Swing. Cada imagen muestra el mismo programa pero con un Aspecto y Comportamiento diferente. El programa, llamado Converter, se explica en detalle al final de la siguiente lección, Características y Conceptos Swing.

> Java Look & Feel | CDE/Motif Look & Feel | Windows Look & Feel
> --- | --- | ---

#### ¿Qué Versiones Contienen el API Swing?

> El API Swing se presenta en dos versiones:
> - JDK 1.2
> - JFC 1.1 (para usar con JDK 1.1)

> La versión que deberías usar depende de si necesitas usar JDK 1.1 o JDK 1.2. Es más sencillo usar JDK 1.2, ya que no necesitas añadir librerías para poder usar el API Swing; el JFC construido dentro del JDK 1.2. Sin embargo, si necesitas usar el JDK 1.1, añadir el API Swing (usando JFC 1.1) no es díficil. Las instrucciones para hacer ambas cosas están en Compilar y Ejecutar Programas Swing.

> Esta sección describe el API Swing 1.1, que es la versión presente en JDK 1.2 y en la versión llamada 'JFC 1.1 (con Swing 1.1).' El código de esta sección, funciona, sin ninguna modificación, en ambas versiones.

> Sun ha liberado muchas versiones del JFC 1.1, que están identificadas por la versión del API Swing que contienen. Por ejemplo, una versión anterior del JFC 1.1, fue llamada "JFC 1.1 (con Swing 1.0.3)." La siguiente tabla muestra algunas de las versiones importantes que contienen el API Swing. La fuente en negrita indica las versiones típicamente usadas en productos comerciales.

> Versión del API Swingg | Versión del JFC 1.1 Correspondiente | Versión del JDK 1.2 Correspondiente | Comentarios
> --- | --- | --- | ---
> Swing 0.2 | JFC 1.1 (con Swing 0.2) | ninguna | La primera verión púbica del JFC 1.1.
> Swing 1.0.3 | JFC 1.1 (con Swing 1.0.3) | ninguna | La versión del JFC 1.1 incluida en Java Plug-in 1.1.1. Soportada para el uso en productos comerciales.
> Swing 1.1 Beta | JFC 1.1 (con Swing 1.1 Beta) | JDK 1.2 Beta 4 | La primera versión del JDK 1.2 que usa los mismos nombres de paquetes Swing que la correspondiente versión del JFC 1.1.
> Swing 1.1 Beta 3 | JFC 1.1 (con Swing 1.1 Beta 3) | JDK 1.2 RC1 | La primera versión con los nombres finales de los paquetes Swing.
> Swing 1.1 Nota: Este es el API cubierto por este tutorial. | JFC 1.1 (con Swing 1.1) | JDK 1.2 FCS | La primera versión que contiene el API final de Swing 1.1 que está soportada para el uso en productos comerciales. Java Plug-in 1.1.2 y Java Plug-in 1.2 proporciona soporte para applets para JDK 1.1 + Swing 1.1 y JDK 1.2, respectivamente.

#### ¿Qué Paquetes Swing Debería Utilizar?

> El API Swing es poderoso, flexible -- e inmenso. Por ejemplo, la versión JFC 1.1 tiene 15 paquetes públicos: javax.accessibility, javax.swing, javax.swing.border, javax.swing.colorchooser, javax.swing.event, javax.swing.filechooser, javax.swing.plaf, javax.swing.plaf.basic, javax.swing.plaf.metal, javax.swing.plaf.multi, javax.swing.table, javax.swing.text, javax.swing.text.html, javax.swing.tree, y javax.swing.undo.

> Afortunadamente, la mayoría de los programas sólo usan un subconjunto de este API. Esta sección ordena el API para tí, ofreciendo el código más común y guiándote por los métodos y clases que podrías necesitar. La mayoría del código de esta sección usa sólo uno o dos paquetes swing:

> - javax.swing
> - javax.swing.event (no siempre es necesario)

#### ¿Que tienen de diferente los componentes Swing de los componentes AWT?

> Si no te importan los componentes AWT, puedes saltarte esta seccción. Puedes obtener una introducción más general a los componentes Swing en Una ruta rápida por el código de una aplicación Swing y Características y Conceptos Swing.

> Los componentes AWT son aquellos proporcionados por las plataformas JDK 1.0 y 1.1. Aunque JDK 1.2 todavía soporta componentes AWT, recomendamos encarecidamente el uso de componente Swing en su lugar. Puedes indentificar los componentes Swing porque sus nombres empiezan con J. Por ejemplo, la clase button del AWT se llama Button, y la clase buttón de Swing se llama JButton. Los componentes AWT están en el paquete java.awt, mientras que los componentes Swing están en el paquete javax.swing.

> La mayor diferencia entre los componentes AWT y los componentes Swing es que éstos últimos están implementados sin nada de código nativo. Esto significa que los componentes Swing pueden tener más funcionalidad que los componentes AWT, porque no están restringidos al denominador común -- las características presentes en cada plataforma. El no tener código nativo también permite que los componentes Swing sean vendidos como añadidos al JDK 1.1, en lugar de sólo formar parte del JDK 1.2.

> Incluso el más sencillo de los componentes Swing tiene capacidades que van más allá de lo que ofrecen los componentes AWT. Por ejemplo:

> - Los botones y las etiquetas Swing pueden mostrar imágenes en lugar de o además del texto.
> - Se pueden añadir o modificar fácilmente los bordes dibujados alrededor de casi cualquier componente Swing. Por ejemplo, es fácil poner una caja alrededor de un contenedor o una etiqueta.
> - Se puede modificar fácilmente el comportamiento o la apariencia de un componente Swing llamando a métodos o creando una subclase.
> - Los componentes Swing no tienen porque ser rectangulares. Por ejemplo, los botones pueden ser redondos.
> - Las tecnologías asistivas como los lectores de pantallas pueden fácilmente obtener información desde los componentes Swing. Por ejemplo, una herramienta puede fácilmente obtener el texto mostrado en un botón o en una etiqueta.

> Otra caracterísitca Swing es que se puede especificar el Aspecto y Comportamiento que utilice el GUI de nuestro programa. Por el contrario, los componentes AWT siempre tienen el aspecto y comportamiento de la plataforma nativa.

> Otra característica interesante es que los componentes Swing con estado usan modelos para mantener el estado. Por ejemplo, un JSlider usa un objeto BoundedRangeModel para contener su valor actual y un rango de valores legales. Los modelos se configuran automáticamente, por eso no tenemos que tratar con ellos, a menos que queramos tomar ventaja de la potencia que pueden ofrecernos.

> Si estás acostumbrado a usar componentes AWT, necesitarás tener cuidado con algunas reglas cuando uses componentes Swing:

> - Como regla, los programas no deberían usar componentne de 'peso pesado' junto con componentes Swing. Los componentes de peso pesado incluyen todos los componentes AWT listos para usar (como Menu y ScrollPane) y todos los componentes que desciendan de las clases Canvas y Panel del AWT. Esta restricción existe porque cuando un componente Swing (u otro componente de 'peso ligero') se solapa con componentes de peso pesado, éste último siempre se dibuja encima. Para más información puedes ver Mezclar Componentes de peso ligero y pesado, un artículo de 'The Swing Connection'.
> - Los componentes Swing no son de thread seguro. Si modificas un componente Swing visible -- llamando a su método setText, por ejemplo -- desde cualquier lugar que no sea el manejador de eventos, necesitas seguir unos pasos especiales para hacer que la modificación se ejecute en el thread de despacho de eventos. Esto no es ningún problema para la mayoría de los programas Swing, ya que el código que modifica los componentes normalmente se encuentra en los manejadores de eventos.
> - La herencia de contenidos de cualquier ventana o applet que contenga componentes swing debe tener un contenedor de alto nivel Swing como raíz del árbol. Por ejemplo, una ventana principal debería ser implementada como un ejemplar de JFrame en vez de como un ejemplar de Frame.
> - No se añaden directamente los componentes a un contenedor de alto nivel como un JFrame. En su lugar, se añaden los componentes a un contenedor (llamado panel de contenido) que a su vez está contenido por el JFrame.

> Convertir a Swing explica más cosas sobre las diferencias entre los componentes Swing y los componentes AWT.

Ozito