## Cómo Seleccionar el Aspecto y Comportamiento

Si no te importa que aspecto y comportamiento usan tus programas, puedes saltarte está página. Por ejemplo, la mayoría de los programas de esta sección no especifican el aspecto y comportamiento, por lo que podremos ejecutar programas fácilmente sin seleccionar el aspecto y comportamiento.

Cuando un programa no selecciona el aspecto y comportamiento, el controlador del Swing debe imaginarse cual utilizar. Primero chequea si el usuario ha especificado un aspecto y comportamiento preferidos. Si es así, intentan utilizarlo. Si no es así, o el usuario a elegido uno no válido, entonces el UI elige el aspecto y comportamiento Java.

- Cómo seleccionar el Aspecto y Comportamiento
- Cómo el controlador de UI elige el Aspecto y Comportamiento
- Cambiar el Aspecto y Comportamiento después de arrancar

#### Cómo seleccionar el Aspecto y Comportamiento

> Para especificar programáticamente el aspecto y comportamiento, se usa el método UIManager.setLookAndFeel. Por ejemplo, el código en negrita del siguiente fragmento hace que el programa use el aspecto y comportamiento Java:

>     public static void main(String[] args) {
>         try {
>             UIManager.setLookAndFeel(
>                 UIManager.getCrossPlatformLookAndFeelClassName());
>         } catch (Exception e) { }

>         new SwingApplication(); //Create and show the GUI.
>     }

> El argumento para setLookAndFeel es el nombre totalmente cualificado de la subclase apropiado de LookAndFeel. Para especificar el aspecto y comportamiento Java, hemos usado el método getCrossPlatformLookAndFeelClassName. Si queremos especificar el aspecto y comportamiento nativo para cualquier platadorma en la que el usuario ejecute el programa, usaremos getSystemLookAndFeelClassName, en su lugar. PAra especificar un UI, podemos usar el nombre real de la clase. Por ejemplo, si hemos diseñado un programa para que parezca mejor con el aspecto y comportmiento Windows, deberíamos usar este código para seleccionarlo:

>     UIManager.setLookAndFeel(
>     	    "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

> Aquí podemos ver algunos de los argumentos que podemos usar con setLookAndFeel:
> UIManager.getCrossPlatformLookAndFeelClassName()
>   Devuelve el string para uno de los aspecto-y-comportamiento garantizados que funciona -- el aspecto y comportamiento Java.
> UIManager.getSystemLookAndFeelClassName()
>   Especifica el aspecto y comportamiento de la plataforma actual. En plataformas Win32, esto especifica el aspecto y comportamiento Windows. En plataforma Mac OS , esto especifica el aspecto y comportamiento Mac OS. En plataformas Sun, especifica el aspecto y comportamiento CDE/Motif.
> "javax.swing.plaf.metal.MetalLookAndFeel"
>   Especifica el aspecto y comportamiento Java. (El nombre código para este aspecto y comportamiento era Metal.) Este string es el valor devuelto por el método getCrossPlatformLookAndFeelClassName.
> "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
>   Especifica el aspecto y comportamiento Windows. Actualmente, sólo podemos usar este aspecto y comportamiento en systemas Win32.
> "com.sun.java.swing.plaf.motif.MotifLookAndFeel"
>   Especifica el aspecto y comportamiento CDE/Motif. Este puede ser utilizado sobre cualquier plataforma.
> "javax.swing.plaf.mac.MacLookAndFeel"
>   Especifica el aspecto y comportamiento Mac OS. En el momento de crear este tutor, este aspecto y comportamiento estába en fase bera y no está disponible como parte del JFC 1.1 o JDK 1.2. en su lugar, puedes descargarlo, siguiendo las instrucciones de la JFC Home Page.

> No estamos limitados a los argumentos precedentes. Podemos especificar el nombre de cualquier aspecto y comportamiento que esté en nuestro class path.

#### Cómo elige el UI el Aspecto y Comportamiento

> Aquí están los pasos que sigue el controlador del UI para determinar el aspecto y comportamiento cuando se inicializa a sí mismo:
> 1. Si el programa selecciona el aspecto y comportamiento antes de crear ningún componente, el UI trata de crear un ejemplar de la clase especificada. Si tiene éxito, todos los componentes usarán ese aspecto y comportamiento.
> 2. Si el programa no ha tenido éxito con el aspecto y comportamiento especificado, antes de crear el primer componente, el UI comprueba si el usuario ha especificado uno en un fichero llamado swing.properties. Busca el fichero en el directorio lib de la versión de Java. Por ejemplo, si estamos usando el intérprete Java en javaHomeDirectory\bin, entonces el fichero swing.properties (si existe) está en javaHomeDirectory\lib. Si el usuario ha especificado un aspecto y comportamiento, de nuevo el UI intenta ejemplarizar la clase especificada. Aquó hay un ejemplo de los contenidos de un fichero swing.properties:

>        # Swing properties

>        swing.defaultlaf=com.sun.java.swing.plaf.motif.MotifLookAndFeel

> 3. Si ni el programa ni el usuario han especificado un aspecto y comportamiento adecuados, el programa usar el aspecto y comportamiento Java.

#### Cambiar el Aspecto y Comportamiento después de la Arrancada

> Se puede cambiar el aspecto y comportamiento con setLookAndFeel incluso después de que el GUI del programa sea visible. Para hacer que los componentes existente, reflejen el nuevo aspecto y comportamiento, se llama al método SwingUtilities updateComponentTreeUI una vez por cada contenedor de alto nivel. Luego podríamos desear redimensionar cada uno de nuestros contenedores de alto nivel para reflejar los nuevos tamaños de sus componentes. Por ejemplo:

>     UIManager.setLookAndFeel(lnfName);
>     SwingUtilities.updateComponentTreeUI(frame);
>     frame.pack();

Ozito