Las JFC (Java Foundation Classes) son parte de la API de Java compuesto por clases que sirven para crear interfaces gráficas visuales para las aplicaciones y applets de Java.
Así como Sun presenta estas JFC, Microsoft ha desarrollado otro paquete propio con el nombre de AFD (Application Foundation Classes).
Las JFC contienen dos paquetes gráficos: AWT y Swing.
AWT presenta componentes pesados, que en cada plataforma sólo pueden tener una representación determinada. Está disponible desde la versión 1.1 del JDK como java.awt.
Swing presenta componentes ligeros, que pueden tomar diferente aspecto y comportamiento pues lo toman de una biblioteca de clases. Está disponible desde la versión 1.2 del JDK como javax.swing aunque antes se podían encontrar versiones previas como com.sun.java. o como java.awt.swing.
AWT se estudia con más detenimiento en el apartado "IV.2.AWT" de este tutorial, mientras que Swing se estudia en el apartado "IV.3.Swing" de este tutorial.
B. Modelo de eventos
Tanto AWT como Swing tienen en común un sistema para gestionar los eventos que se producen al interactuar con el usuario de la interfaz gráfica; su modelo de eventos.
El funcionamiento del modelo de eventos se basa en la gestión de excepciones.
Para cada objeto que represente una interfaz gráfica, se pueden definir objetos "oyentes" (Listener), que esperen a que suceda un determinado evento sobre la interfaz. Por ejemplo se puede crear un objeto oyente que esté a la espera de que el usuario pulse sobre un botón de la interfaz, y si esto sucede, él es avisado, ejecutando determinada acción.
La clase base para todos estos eventos que se pueden lanzar es la clase AWTEvent (perteneciente al paquete java.awt).
El modelo de eventos de AWT depende del paquete java.awt.event, que en Swing se amplía con el paquete javax.swing.event.
Existen dos tipos básicos de eventos:
Físicos: Corresponden a un evento hardware claramente identificable. Ej: se ha pulsado una tecla (KeyStrokeEvent).
Semánticos: Se componen de un conjunto de eventos físicos, que sucedidos en un determinado orden tienen un significado más abstracto: El usuario ha elegido un elemento de una lista desplegable (ItemEvent).
C. Subpaquetes de AWT
A continuación se enumeran los paquetes que componen las JFC, así como su funcionalidad, ordenados por orden de antigüedad. Esto es importante, porque debe de tenerse en cuenta si se va a utilizar para crear applets, ya que normalmente los navegadores no soportan la última versión de la API de Java en su propia máquina virtual.
Si queremos que nuestra applet se vea igual en varios navegadores, deberemos de tener en cuenta qué paquetes podemos utilizar y cuáles no, comprobando la versión de Java que soportan los navegadores que nos interesen.
a.) Desde la versión 1.0
java.awt: Contiene todas las clases básicas de AWT para crear interfaces e imprimir gráficos e imágenes, así como la clase base para los eventos en componentes: AWTEvent.
java.awt.image: Para crear y modificar imágenes. Utiliza productores de imágenes, filtros y "consumidores de imágenes". Permite renderizar una imagen mientras está siendo generada.
b.) Desde la versión 1.1
java.awt.datatransfer: Transferencia de datos entre aplicaciones. Permite definir clases "transferibles" entre aplicaciones, y da soporte al mecanismo del portapapeles (copiar y pegar).
java.awt.event: Modelo de eventos de AWT. Contiene eventos, oyentes y adaptadores a oyentes.
c.) Desde la versión 1.2
java.awt.color: Utilización de colores. Contiene la implementación de una paleta de colores basada en la especificada por el ICC (Consorcio Internacional de Color).
java.awt.dnd: Operaciones de arrastrar y soltar.
java.awt.font: Todo lo referente a las fuentes de texto. Soporta fuentes del tipo True Type, Type 1, Type 1 Multiple Master, y OpenType.
java.awt.geom: Aporta clases de Java 2D, para crear objetos en 2 dimensiones, utilizando geometría plana (elipses, curvas, áreas...).
java.awt.im: Para utilizar símbolos Japoneses, Chinos o Coreanos.
java.awt.image.renderable: Para producir imágenes que sean independientes de redering (animación).
java.awt.print: Para imprimir documentos. Incorpora capacidad para gestionar diversos tipos de documentos, formatos de página e interactuar con el usuario para controlar la impresión de trabajos.
D. Subpaquetes de Swing
A continuación se enumeran los paquetes que componen Swing, así como su funcionalidad:
javax.swing: Tiene los componentes básicos para crear componentes ligeros Swing.
javax.swing.border: Para dibujar bordes personalizados en los componentes Swing.
javax.swing.colorchooser: Para utilizar el componente JColorChooser.
javax.swing.event: Eventos lanzados por componentes Swing, así como oyentes para dichos eventos. Extiende los que se encuentran en el paquete AWT java.awt.event.
javax.swing.filechooser: Para utilizar el componente JFileChooser.
javax.swing.plaf: Permite a Swing utilizar múltiples representaciones. Se utiliza por aquellos desarrolladores que no pueden crear un nuevo aspecto de interfaz, basado en los que Swing ya incorpora (como Basic o Metal).
javax.swing.plaf.basic: Objetos que utilizan interfaces de aspecto "Basic". Este aspecto es el que presentan por defecto los componentes Swing. En este paquete se encuentran gestores de impresión, eventos, oyentes y adaptadores. Se puede crear un aspecto personalizado de interfaz utilizando este paquete.
javax.swing.plaf.metal: Objetos que utilizan interfaces de aspecto "Metal".
javax.swing.plaf.multi: Permite a los usuarios combinar aspectos de interfaz, entre auxiliares y los que existen por defecto.
javax.swing.text: Para manejar componentes de texto (modificables o no). Soporta sintaxis resaltada, edición, estilos...
javax.swing.text.html: Contiene la clase HTMLEditorKit, basada en la versión 3.2 de la especificación HTML, y clases para crear editores de texto HTML
javax.swing.text.html.parser: Contiene analizadores de texto HTML.
javax.swing.text.rtf: Contiene la clase RTFEditorKit para crear editores de documentos en formato RTF (Rich-Text-Format).
javax.swing.tree: Para personalizar la forma en que son utilizados los árboles generados por la clase java.awt.swing.JTree.
javax.swing.undo: Permite realizar operaciones de deshacer/rehacer en las aplicaciones que cree el usuario.