## Reglas Generales para el uso de Componentes Swing

Esta sección tiene información general sobe lo que tienen en común los componentes de swing. Explica las caracteristicas que proporciona la clase JComponent a la mayoría de los componentes Swing, incluyendo código sobre cómo utilizar estás características. Un día, quizás podrámos mostrarte como se diferencia el código de programas Swing de los programas que utilizan componentes de peso pesado.

#### Qué proporciona la clase JComponent

> La mayoría de los componentes Swing están implementados como una subclase de la clase JComponent, que desciende de la clase Component. De JComponent, los componentes Swing heredan las siguientes funcionalidades:
> - Tool tips
> - acciones generados por teclado
> - Soporte para escrolado
> - Propiedades
> - Aplicación ampliamente configurable
> - Soporte para distribuciónt
> Tool tips.
>   Especificando una cadena con el método setToolTip, puedes proporcionar ayuda a los usuarios de un componente. Cuando el cursor se pare sobre el componente, la cadena especificada se mostrará en una pequeña ventana que aparece cerca del componente. Puedes ver Cómo utilizar Tool Tips para más información.

> Acciones generadas por teclado.
>   Utilizando el método registerKeyboardAction, puedes permitir que el usurio utilice el teclado, en vez del ratón, para indicar qué acción del componente debería ocurrir.

>   > Nota: Algunas clases proporcionan métodos convenientes para acciones de teclado. Por ejemplo AbstractButton proporciona setKeyAccelerator, para especificar los caracteres que, en combinación con una tecla modificadora específicada, hace que la acción del botón sea realizada. Puedes ver Cómo utilizar Buttons para ver un ejemplo de utilización de teclas aceleradoras en botones.

>   La combinación de caracteres y teclas modificadoras que el usuario debe pulsar para arrancar una acción está representada por un objeto JKeyStroke. El evento action resultante es manejado por un objeto JAction. Toda acción de teclado funciona bajo una de estas dos condiciones: cuando el componente actual tiene el foco o cuando cualquier componente de su ventana tiene el foco.

> Soporte para scrolling.
>   Con los métodos computeVisibleRect y getVisibleRect, puedes determinar que parte de un componente podría ser visible en la pantalla. Esto es especialmente útil para aumentar el rendimiento del escrolado. El método scrollRectToVisible envía un mensaje al padre del JComponent, pidiendo que muestre el área especificada. Con el método setAutoscrolls, puedes especificar que un componete se escrole automáticamente cuando sea arrastrado, si su contenedor soporta escrolado (como un JViewport).

> Propiedades.
>   Con el método putProperty, puedes asociar una o más propiedades (parejas nombre/objeto) con cualquier JComponent. Por ejemplo, un controlador de disposición podría utilizar las propiedades para asociar un objeto con cada JComponent que maneja. Puedes obtener propiedades utilizando el método getProperty.

> Aplicación ampliamente configurable.
>   Cada máquina virtual Java tiene un objeto UIFactory que determina el aspecto y comportamiento de los componentes Swing en tiempo de ejecución. Sujeto a las restricciones de seguridad puedes elegir el aspecto y comportamiento de todos los componentes Swing, llamando al método UIManager.setUIFactory. Detrás de la escena, cada objeto JComponent tiene su correspondiente objeto ComponentUI (creado por el UIFactory) que realiza las acciones de dibujo, manejo de eventos, determinación de tamaño, etc para cada JComponent.

>   Nota: Si quieres cambiar el aspecto y comportamiento de un componente individual de Swing, en vez de cambiar todo el conjunto completo de componentes, deberías reimplementar el componente individual.

> Soporte para Distribución.
>   Con métodos como setPreferredSize, setMinimumSize, setMaximumSize, setAlignmentX, setAlignmentY, y setInsets, puedes especificar restricciones de distribución sin tener que escribir tu propio componente.

#### Consideraciones para la utilización de componentes de peso ligero

> Para evitar el "parpadeo" cuando se redibujan componentes de peso ligero, necesitarás poner los componentes de peso ligero en contenedores con doble buffer. La versión de Swing incluye dos clases que puedes utilizar juntas para obtener el doble buffer: JPanel y JFrame. La clase JPanel proporciona contenedores de doble buffer y de peso ligero. La clase JFrame que desciende de Frame simplemente implementa una corrección de dibujo para permitir que JPanel funcione. Para más información sobre el parpadeo puedes ir a Eliminar el Parpadeo.

Ozito