layout

6
Los layout managers o manejadores de composición, en traducción literal, ayudan a adaptar los diversos Componentes que se desean incorporar a un Panel, es decir, especifican la apariencia que tendrán los Componentes a la hora de colocarlos sobre un Contenedor, controlando tamaño y posición (layout) automáticamente. Java dispone de varios, en la actual versión, tal como se muestra en la imagen: ¿Por qué Java proporciona estos esquemas predefinidos de disposición de componentes? La razón es simple: imaginemos que se desean agrupar objetos de distinto tamaño en celdas de una rejilla virtual: si confiados en nuestro conocimiento de un sistema gráfico determinado, se codificase a mano tal disposición, se debería preveer el redimensionamiento del applet, su repintado cuando sea cubierto por otra ventana, etc., además de todas las cuestiones relacionadas con un posible cambio de plataforma (uno nunca sabe a donde van a ir a parar los propios hijos, o los applets). Sigamos imaginando, ahora, que un hábil equipo de desarrollo ha previsto las disposiciones gráficas más usadas y ha creado un gestor para cada una de tales configuraciones, que se ocupará, de forma transparente para nosotros, de todas esas cuitas de formatos. Bien, pues estos gestores son instancias de las distintas clases derivadas de LayoutManager y que se utilizan en el applet que genera la figura siguiente, donde se muestran los diferentes tipos de layouts que proporciona el AWT.

Upload: boris-salleg

Post on 03-Jul-2015

1.044 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Layout

Los layout managers o manejadores de composición, en traducción literal, ayudan a adaptar los diversos

Componentes que se desean incorporar a un Panel, es decir, especifican la apariencia que tendrán los

Componentes a la hora de colocarlos sobre un Contenedor, controlando tamaño y posición (layout)

automáticamente. Java dispone de varios, en la actual versión, tal como se muestra en la imagen:

¿Por qué Java proporciona estos esquemas predefinidos de disposición de componentes? La razón es

simple: imaginemos que se desean agrupar objetos de distinto tamaño en celdas de una rejilla virtual: si

confiados en nuestro conocimiento de un sistema gráfico determinado, se codificase a mano tal

disposición, se debería preveer el redimensionamiento del applet, su repintado cuando sea cubierto por

otra ventana, etc., además de todas las cuestiones relacionadas con un posible cambio de plataforma (uno

nunca sabe a donde van a ir a parar los propios hijos, o los applets).

Sigamos imaginando, ahora, que un hábil equipo de desarrollo ha previsto las disposiciones gráficas más

usadas y ha creado un gestor para cada una de tales configuraciones, que se ocupará, de forma

transparente para nosotros, de todas esas cuitas de formatos. Bien, pues estos gestores son instancias de

las distintas clases derivadas de LayoutManager y que se utilizan en el applet que genera la figura

siguiente, donde se muestran los diferentes tipos de layouts que proporciona el AWT.

Page 2: Layout

FlowLayout

Es el más simple y el que se utiliza por defecto en todos los Paneles si no se fuerza el uso de alguno de los

otros. Los Componentes añadidos a un Panel con FlowLayout se encadenan en forma de lista. La cadena

es horizontal, de izquierda a derecha, y se puede seleccionar el espaciado entre cada Componente.

Si el Contenedor se cambia de tamaño en tiempo de ejecución, las posiciones de los Componentes se

ajustarán automáticamente, para colocar el máximo número posible de Componentes en la primera línea.

Los Componentes se alinean según se indique en el constructor. Si no se indica nada, se considera que los

Componentes que pueden estar en una misma línea estarán centrados, pero también se puede indicar que

se alineen a izquierda o derecha en el Contenedor.

Codigo Ejemplo

Instancia un objeto FlowLayout object alieado al Centro

// y con una separacion de 3 pixels en horizonal y vertical

FlowLayout miFlowLayout = new FlowLayout( FlowLayout.CENTER,3,3 );

// Se fija este FlowLayout para que sea el controlador de

// posicionamiento de componentes para el objeto Frame

miFrame.setLayout( miFlowLayout );

Page 3: Layout

BorderLayout

La composición BorderLayout (de borde) proporciona un esquema más complejo de colocación de los

Componentes en un panel. La composición utiliza cinco zonas para colocar los Componentes sobre ellas:

Norte, Sur, Este, Oeste y Centro. Es el layout o composición que se utilizan por defecto Frame y Dialog.

El Norte ocupa la parte superior del panel, el Este ocupa el lado derecho, Sur la zona inferior y Oeste el

lado izquierdo. Centro representa el resto que queda, una vez que se hayan rellenado las otras cuatro

partes. Así, este controlador de posicionamiento resuelve los problemas de cambio de plataforma de

ejecución de la aplicación, pero limita el número de Componentes que pueden ser colocados en

Contenedor a cinco; aunque, si se va a construir un interfaz gráfico complejo, algunos de estos cinco

Componentes pueden Contenedores, con lo cual el número de Componentes puede verse ampliado.

En los cuatro lados, los Componentes se colocan y redimensionan de acuerdo a sus tamaños preferidos y

a los valores de separación que se hayan fijado al Contenedor. El tamaño prefijado y el tamaño mínimo

son dos informaciones muy importantes en este caso, ya que un botón puede ser redimensionado a

proporciones cualesquiera; sin embargo, el diseñador puede fijar un tamaño preferido para la mejor

apariencia del botón. El controlador de posicionamiento puede utilizar este tamaño cuando no haya

indicaciones de separación en el Contenedor, o puede ignorarlo, dependiendo del esquema que utilice.

Ahora bien, si se coloca una etiqueta en el botón, se puede indicar un tamaño mínimo de ese botón para

que siempre sea visible, al menos, el rótulo del botón. En este caso, el controlador de posicionamiento

muestra un total respeto a este valor y garantiza que por lo menos ese espacio estará disponible para el

botón.

Codigo Ejemplo

Frame miFrame = new Frame( "Tutorial de Java, AWT" );

// Se instancia un objeto BorderLayout con una holgura en vertical y

// horizontal de 3 pixels

BorderLayout miBorderLayout = new BorderLayout( 3,3 );

// Se fija este BorderLayout para que sea el controlador de

// posicionamiento de componentes para el objeto Frame

miFrame.setLayout( miBorderLayout );

Page 4: Layout

CardLayout

Este es el tipo de composición que se utiliza cuando se necesita una zona de la ventana que permita

colocar distintos Componentes en esa misma zona. Este layout suele ir asociado con botones de selección

(Choice), de tal modo que cada selección determina el panel (grupo de componentes) que se presentarán.

Codigo Ejemplo

panel1.setLayout( miGridLayout );

// Se instancia un objeto layout de tipo CardLayout para ser

// utilizado con el Panel

CardLayout miCardLayout = new CardLayout();

// Instancia el primero de los dos objetos Panel que sera

// integrado en el objeto Frame

Panel panel1 = new Panel();

// Fijamos el layout que habiamos definido para el panel

panel1.setLayout( miCardLayout );

Frame miFrame = new Frame( "Tutorial de Java, AWT" );

// IMPORTANTE: Se añaden los dos objetos Panel que se han

// preparado al objeto Frame para crear el interfaz definitivo

miFrame.add( panel1,"North" );

Page 5: Layout

GridLayout

La composición GridLayout proporciona gran flexibilidad para situar Componentes. El controlador de

posicionamiento se crea con un determinado número de filas y columnas y los Componentes van dentro

de las celdas de la tabla así definida.

Si el Contenedor es alterado en su tamaño en tiempo de ejecución, el sistema intentará mantener el mismo

número de filas y columnas dentro de los márgenes de separación que se hayan indicado. En este caso,

estos márgenes tienen prioridad sobre el tamaño mínimo que se haya indicado para los Componentes, por

lo que puede llegar a conseguirse que sean de un tamaño tan pequeño que sus etiquetas sean ilegibles.

Codigo Ejemplo

panel1.setLayout( miGridLayout );

// Se instancia un objeto layout de tipo GridLayout para ser

// utilizado con el Panel

GridLayout miGridLayout = new GridLayout( 2,3 );

// Instancia el primero de los dos objetos Panel que sera

// integrado en el objeto Frame

Panel panel1 = new Panel();

// Fijamos el layout que habiamos definido para el panel

panel1.setLayout( miGridLayout );

Frame miFrame = new Frame( "Tutorial de Java, AWT" );

// IMPORTANTE: Se añaden los dos objetos Panel que se han

// preparado al objeto Frame para crear el interfaz definitivo

miFrame.add( panel1,"North" );

Page 6: Layout

GridBagLayout

Es igual que la composición de GridLayout, con la diferencia que los Componentes no necesitan tener el

mismo tamaño. Es quizá el controlador de posicionamiento más sofisticado de los que actualmente

soporta AWT.

A la hora de ponerse a trabajar con este controlador de posicionamiento, hay que tomar el rol de un

auténtico aventurero. Parece que la filosofía de la gente de JavaSoft es que todo debe hacerse en el

código. La verdad es que hasta que no haya en Java algo semejante a los recursos de X, el trabajo del

programador, si quiere prescindir de herramientas de diseño, es un tanto prehistórico en su forma de hacer

las cosas.

Si el lector acepta una recomendación, el consejo es que evite como la peste el uso del GridBagLayout,

porque tanta sofisticación lo único que acarrea son dolores de cabeza; y, siempre se puede recurrir a la

técnica de combinar varios paneles utilizando otros controladores de posicionamiento, dentro del mismo

programa. Loa applets no apreciarán esta diferencia, al menos no tanto como para justificar los problemas

que conlleva el uso del GridBagLayout