Swing y JFC (Java Foundation Classes)

Las siguientes figuras muestran los GUIs de cinco programas, cada uno de ellos muestra cinco botones. Los botones son id�nticos, y el c�digo de los programas es casi id�ntico. �Entonces por qu� parecen tan diferentes? Porque usan diferentes controladores de distribuci�n para controlar el tama�o y posici�n de los botones.

Control de Distribuci�n es el proceso de determinar el tama�o y posici�n de los componentes. Por defecto, cada contenedor tiene un controlador de distribuci�n -- un objeto que realiza el control de la distribuci�n de los componentes dentro del contenedor. Los componentes pueden proporcionarle al controlador de disposici�n sus preferencias en cuanto a tama�o y alineamiento, pero la �ltima palabra la tiene el controlador de disposici�n.

La plataforma Java suministra cinco controladores de disposici�n comunmente utilizados: BorderLayout, BoxLayout, FlowLayout, GridBagLayout, y GridLayout. Estos controladores de distribuci�n est�n dise�ados para mostrar m�ltiples componentes a la vez, y se han visto en la figura anterior. Una sexta clase proporcionada, CardLayout, es un controlador de disposici�n de prop�sito general usado en combinaci�n con otros controladores de distribuci�n. Puedes encontrar detalles sobre cada uno de estos seis controladores, incluyendo claves para elegir el apropiado, en Usar Controladores de Distribuci�n.

Siempre que se use el m�todo add para poner un componente en un contenedor, debemos tener en cuenta el controlador de distribuci�n del contenedor. Algunos controladores como BorderLayout requiere que especifiquemos la posici�n relativa del componente en el contenedor, usando un argumento extra para el m�todo add. Ocasionalmente, un controlador de distribuci�n como GridBagLayout requiere elaborados procesos de configuraci�n. Sin embargo, muchos controladores de distribuci�n simplemente sit�an los componentes en el orden en que fueron a�adidos a su contenedor.

Todos esto probablemente suena m�s complicado de lo que �s. Si quieres puedes copiar el c�digo de nuestros ejemplos de Usar Componentes Swing o buscar el controlador de distribuci�n individual en Usar Controladores de Distribuci�n. Generalmente, s�lo tendr�s que seleccionar el controlador de distribuci�n de dos tipos de contenedores: paneles de contenido (que usan BorderLayout por defecto) y JPanel (que usan FlowLayout por defecto).

El resto de esta secci�n describe algunas de las tareas m�s comunes de la distribuci�n.

.�Seleccionar el Controlador de Distribuci�n

Podemos cambiar f�cilmente el controlador de distribuci�n que usa un contenedor. S�lo se debe llamar al m�todo setLayout del contenedor. Por ejemplo, aqu� est� el c�digo que hace que un panel use BorderLayout.

JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());

Aunque recomendamos que uses controladores de distribuci�n, se puede realizar la distribuci�n sin ellos. Seleccionando una propiedad de distribuci�n del contenedor a nulo, podemos hacer que el contenedor no use ning�n controlador de distribuci�n. Con este esquema, llamado posicionamiento absoluto, podemos especificar el tama�o y posici�n de cada componente dentro del contenedor. Una desventaja del posicionamiento absoluto es que no se ajusta bien cuando se redimensiona el contenedor de alto nivel. Tampoco se ajusta bien a las diferencias entres usuarios y sistemas, como los diferentes tama�os de fuente.

.�Proporcionar Consejos sobre un Componente

Algunas veces necesitamos personalizar el tama�o que un componente proporciona al controlador de distribuci�n del contenedor, para que el componente se vea bien. Se puede hacer esto proporcionando los tama�os m�nimo, preferido y m�ximo del componente. Tambi�n podemos llamar a los m�todos de selecci�n de tama�o del componente -- setMinimumSize, setPreferredSize, y setMaximumSize -- o podemos crear una subclase del componente que sobreescriba los m�todos apropiados -- getMinimumSize, getPreferredSize, y getMaximumSize. Actualmente, el �nico controlador de distribuci�n en la plataforma Java que presta atenci�n a la petici�n de tama�o m�ximo del componente es BoxLayout.

Adem�s de proporcionar preferencias de tama�o, podemos especificar preferencias de alineamiento. Por ejemplo, podemos especificar que los bordes superiores de dos componentes deber�an estar alineados. Se seleccionan los consejos de alineamiento llamando a los m�todos setAlignmentX y setAlignmentY del componente, o sobreescribiendo los m�todos, getAlignmentX y getAlignmentY del componente. Realmente BoxLayout es el �nico controlador de distribuci�n que presta atenci�n a los consejos de alineamiento.

.�Poner Espacio entre Componentes

Tres factores influyen en la cantidad de espacio entre los componentes visibles de un contenedor.

El controlador de distribuci�n
Algunos controladores de distribuci�n ponen autom�ticamente espacio entre los componentes; otros no. Algunos permiten incluso especificar la cantidad de espacio entre los componentes. Puedes ver Distribuir Componentes dentro de un Contenedor sobre el soporte de espaciado de cada controlador de distribuci�n.
Componentes invisibles.
Se pueden crear componentes de peso ligero que no realicen dibujo, pero que ocupen espacio en el GUI. Frecuentemente se usan los componentes invisibles en contenedores controlados por BoxLayout. Puedes ver C�mo usar BoxLayout para ver ejemplos de uso de componentes invisibles.
Bordes vac�os
No importa cual sea el controlador de distribuci�n, podemos afectar la aparente cantidad de espacio entre componentes a�adiendoles bordes. Los mejores candidatos para los bordes vac�os son los que t�picamente no tienen bordes, como los paneles y las etiquetas. Algunos otros componentes, como paneles desplazables, no funcionan bien con bordes en algunas implementaciones del Aspecto y Comportamiento, debido a la forma en que implementan su c�digo de dibujo. Para m�s informaci�n sobre los bordes puedes ver C�mo usar Bordes.

.�C�mo Ocurre el Control de Distribuci�n

Aqu� hay un ejemplo de secuencia de control de distribuci�n para un frame (JFrame).

  1. Despu�s de que el GUI est� construido, se llama al m�todo pack sobre el JFrame. Esto especifica que el frame deber�a ser de su tama�o preferido.
  2. Para encontrar el tama�o preferido del frame, el controlador de distribuci�n a�ade el tama�o de los lados del frame al tama�o preferido del componente directamente contenido por el frame. Esto es la suma del tama�o preferido del panel de contenido, m�s el tama�o de la barra de men� del frame, si existe.
  3. El controlador de disposici�n del panel de contenido es responsable de imaginarse el tama�o preferido del panel de contenido. Por defecto, este controlador de disposici�n es un objeto BorderLayout. Sin embargo, asumamos que lo hemos reemplazado con un objeto GridLayout que se ha configurado para crear dos columnas. Lo interesante de gridlayout es que fuerza a que todos los componentes sean del mismo tama�o, e intenta hacerlos tan anchos como la anchura preferida del componente m�s ancho, y tan altos como la altura preferida del componente m�s alto.

    Primero, el controlador gridlayout pregunta el panel de contenido por su insets -- el tama�o del borde del panel de contenido, si existe. Luego, el controlador de gridlayout le pregunta a cada componente del panel de contenido sus tama�os preferidos, anotando la mayor anchura preferida y la mayor altura preferia. Luego calcula el tama�o preferido del panel de contenido.

  4. Cuando a cada bot�n se le pide su tama�o preferido, el bot�n primero comprueba si el usuario ha especificado un tama�o preferido. Si es as�, reporta este tama�o. Si no es as�, le pregunta a su Aspecto y Comportamiento el tama�o preferido.

El resultado final es que para determinar el mejor tama�o de un frame, el sitema determina los tama�os de los contenedores en la parte inferior del �rbol de contenidos. Estos tama�os filtran el �rbol de contenidos, eventualmente determinan el tama�o total del frame. De forma similar ocurren los c�lculos cuando se redimensiona el frame.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR