## Más Características y Conceptos Swing

Esta lección ha explicado algunos de los mejores conceptos que necesitarás conocer para construir GUIs Swing -- el árbol de contenidos, el control de distribución, el manejo de eventos, el dibujado, y los threads. Además, hemos tocado tópicos relacionados, como los bordes. Esta sección explica algunas características Swing que no se han explicado todavía:

- Características que Proporciona JComponent
- Iconos
- Actions
- Aspecto y Comportamiento Conectable
- Soporte de Tecnologías Asistivas
- Modelos de Datos y Estados Separados

#### Características que ProporcionaJComponent

> Excepto los contenedores de alto nivel, todos los componentes que empiezan con J descienden de la clase JComponent. Obtienen muchas características de esta clase, como la posibilidad de tener bordes, tooltips, y Aspecto y Comportamiento configurable. También heredan muchos métodos de conveniencia. Para más detalles, sobre lo que proporciona la clase JComponent puedes ver La clase JComponent

#### Iconos

> Muchos componentes Swing -- principalmente los botones y las etiquetas -- pueden mostrar imágenes. Estas imágenes se especifican como objetos Icon. Puedes ver Cómo usar Iconos para ver instrucciones y una lista de ejemplos que usa iconos.

#### Actions

> Con objetos Action, el API Swing proporciona un soporte especial para compartir datos y estados entre dos o más componentes que pueden generar eventos action. Por ejemplo, si tenemos un botón y un ítem de menú que realizan la misma función, podríamos considerar la utilización de un objeto Action para coordinar el texto, el icono y el estado de activado de los dos componentes. Para más detalles, puedes ver Cómo usar Actions.

#### Aspecto y Comportamiento Conectable

> Un sencillo programa puede tener uno o varios aspectos y comportamientos. Se puede permitir que el usuario determine el aspecto y comportamiento, o podemos determinarlos programáticamente. Puedes ver Cómo seleccionar el Aspecto y Comportamiento para más detalles.

#### Soporte para Tecnologías Asistivas

> Las tecnologías asisticas como los lectores de pantallas pueden usar el API de accesibilidad para obtener información sobre los componentes Swing. Incluso si no hacemos nada, nuestro programa Swing probablemente funcionará correctamente con tecnologías asistivas, ya que el API de accesibilidad está construido internamente en los componentes Swing. Sin embargo, con un pequeño esfuerzo extra, podemos hacer que nuestro programa funcione todavía mejor con tecnologías asistivas, lo que podría expandir el mercado de nuestro programa. Puedes ver Cómo Soportar Tecnologías Asistivas para más detalles.

#### Módelos de Datos y Estados Separados

> La mayoría de los componentes Swing no-contenedores tienen modelos. Por ejemplo, un botón (JButton) tiene un modelo (ButtonModel) que almacena el estado del botón -- cuál es su mnemónico de teclado, si está activado, seleccionado o pulsado, etc. Algunos componentes tienen múltiples modelos. Por ejemplo, una lista (JList) usa un ListModel que almacena los contenidos de la lista y un ListSelectionModel que sigue la pista de la selección actual de la lista.

> Normalmente no necesitamos conocer los modelos que usa un componente. Por ejemplo, casi todos los programas que usan botones tratan directamente con el objeto JButton, y no lo hacen en absoluto con el objeto ButtonModel.

> Entonces ¿Por qué existen modelos separados? Porque ofrecen la posibilidad de trabajar con componentes más eficientemente y para compartir fácilmente datos y estados entre componentes. Un caso común es cuando un componente, como una lista o una tabla, contiene muchos datos. Puede ser mucho más rápido manejar los datos trabajando directamente con un modelo de datos que tener que esperar a cada petición de datos al modelo. Podemos usar el modelo por defecto del componente o implementar uno propio.

> Para más información sobre los modelos, puedes visitar las páginas individuales de cada componente o La Anatomía de un Programa Basado en Swing que describe algunos modelos personalizados usados por el programa creado en esa sección.

Ozito