Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
LAYOUTS
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. 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 deseamos agrupar objetos de distinto tamaño en celdas de una rejilla virtual: si
confiados en nuestro conocimiento de un sistema gráfico determinado, codificamos a mano tal disposición,
deberemos 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 ager y que se utilizan en el applet que genera la figura siguiente, donde se muestran los diferentes
tipos de layouts que proporciona el AWT.
Profesor: Quiñones Nieto, Yamil Página 1
Lenguaje de Prgramacion II
En el applet que genera la figura siguiente, se utilizan los diferentes tipos de layouts que proporciona el
AWT.
El ejemplo AwtGui.java, ilustra el uso de paneles, listas, barras de desplazamiento, botones, selectores,
campos de texto, áreas de texto y varios tipos de layouts.
En el tratamiento de los Layouts se utiliza un método de validación, de forma que los Componentes son
marcados como no válidos cuando un cambio de estado afecta a la geometría o cuando el Contenedor tiene
un hijo incorporado o eliminado. La validación se realiza automáticamente cuando se llama a pack() o
show(). Los Componentes visibles marcados como no válidos no se validan automáticamente.
1.‐ 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.
Por ejemplo, podemos poner un grupo de botones con la composición por defecto que proporciona
FlowLayout:
Profesor: Quiñones Nieto, Yamil Página 2
Lenguaje de Prgramacion II
Codigo Fuente
import java.awt.*;
import java.applet.Applet;
add( boton1 );
add( boton2 );
add( boton3 );
}
}
import javax.swing.JFrame;
import javax.swing.*;
/**
*
* @author usuario
*/
public class FlowLayout extends JFrame{
JButton boton;
public FlowLayout()
{
setTitle("El titulo");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
Profesor: Quiñones Nieto, Yamil Página 3
Lenguaje de Prgramacion II
setLayout(new java.awt.BorderLayout());
setSize(300,300);
//setIconImage(new ImageIcon("c:\\editpaste.png").getImage());
boton=new JButton("Soy un boton");
boton.setBounds(20, 20, 160, 20);//x,y,ancho,largo
getContentPane().add(boton);
setVisible(true);
}
public static void main(String args[])
{
j_frame f= new j_frame();
}
}
2.‐ 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.
Con BorderLayout se podrían representar botones de dirección:
Profesor: Quiñones Nieto, Yamil Página 4
Lenguaje de Prgramacion II
import java.awt.*;
import java.applet.Applet;
3.‐ GridLayout
La composición GridLayout proporciona gran flexibilidad para situar Componentes. El layout se crea con un
número de filas y columnas y los Componentes van dentro de las celdas de la tabla así definida.
En la figura siguiente se muestra un panel que usa este tipo de composición para posicionar seis botones en
su interior, con tres filas y dos columnas que crearán las seis celdas necesarias para albergar los botones:
Profesor: Quiñones Nieto, Yamil Página 5
Lenguaje de Prgramacion II
4.‐ 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 layout más sofisticado y versátil de los que actualmente soporta AWT.
En la figura siguiente vemos la imagen generada por un panel que usa el GridBagLayout para soportar diez
botones en su interior:
import java.awt.*;
import java.applet.Applet;
setLayout( gridbag );
Profesor: Quiñones Nieto, Yamil Página 6
Lenguaje de Prgramacion II
add( boton2 );
gbc.gridwidth = GridBagConstraints.REMAINDER;
Button boton3 = new Button( "Botón 3" );
gridbag.setConstraints( boton3,gbc );
add( boton3 );
gbc.weightx = 0.0;
Button boton4 = new Button( "Botón 4" );
gridbag.setConstraints( boton4,gbc );
add( boton4 );
gbc.gridwidth = GridBagConstraints.RELATIVE;
Button boton5 = new Button( "Botón 5" );
gridbag.setConstraints( boton5,gbc );
add( boton5 );
gbc.gridwidth = GridBagConstraints.REMAINDER;
Button boton6 = new Button( "Botón 6" );
gridbag.setConstraints( boton6,gbc );
add( boton6 );
gbc.gridwidth = 1;
gbc.gridheight = 2;
gbc.weighty = 1.0;
Button boton7 = new Button( "Botón 7" );
gridbag.setConstraints( boton7,gbc );
add( boton7 );
gbc.weighty = 0.0;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.gridheight = 1;
Button boton8 = new Button( "Botón 8" );
gridbag.setConstraints( boton8,gbc );
add( boton8 );
Button boton9 = new Button( "Botón 9" );
gridbag.setConstraints( boton9,gbc );
add( boton9 );
}
}
Para aprovechar de verdad todas las posibilidades que ofrece este layout, hay que pintar antes en papel
como van a estar posicionados los Componentes; utilizar gridx, gridy, gridwidth y gridheight en vez de
GridBagConstraints.RELATIVE, porque en el proceso de validación del layout pueden quedar todos los
Componentes en posición indeseable. Además, se deberían crear métodos de conveniencia para hacer más
fácil el posicionamiento de los Componentes. En el ejemplo siguiente, AwtGBagConv.java, creamos el
método de conveniencia addComponente() para la incorporación de nuevos Componentes al layout, lo que
hace más sencillo el manejo de los Constraints:
Profesor: Quiñones Nieto, Yamil Página 7
Lenguaje de Prgramacion II
import java.awt.*;
import java.applet.Applet;
5.‐ 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 lista (Choice), de tal
modo que cada selección determina el panel (grupo de componentes) que se presentarán.
En la figura siguiente mostramos el efecto de la selección sobre la apariencia de la ventana que contiene el
panel con la composición CardLayout:
Profesor: Quiñones Nieto, Yamil Página 8
Lenguaje de Prgramacion II
import java.awt.*;
import java.applet.Applet;
c.addItem( PanelBoton );
c.addItem( PanelTexto );
ac.add( c );
add( "North",ac );
Lenguaje de Prgramacion II
6.‐CREAR UN LAYOUT
Se puede crear un Layout personalizado en base a la interface LayoutManager. Hay que redefinir los cinco
métodos que utiliza este interface, lo cual puede no resultar sencillo, así que en lo posible se deben utilizar
los métodos de colocación de componentes que proporciona AWT, fundamentalmente en el momento en
que parezca que ninguno de los Layouts que hemos visto satisface nuestras exigencias, deberíamos volver a
comprobar que el GridBagLayout, que es el más flexible, de verdad no cumple nuestros requerimientos.
No obstante, vamos a implementar un layout propio, MiLayout.java, para poder colocar los Componentes en
posiciones absolutas del panel que contenga a este layout. Derivamos nuestro nuevo layout de
LayoutManager y redefinimos los cinco métodos de la clase para que podamos posicionar los Componentes.
import java.awt.*;
// Constructor
public MiLayout() {
}
Profesor: Quiñones Nieto, Yamil Página 10
Lenguaje de Prgramacion II
Profesor: Quiñones Nieto, Yamil Página 11
Lenguaje de Prgramacion II
// se pueda hacer
public void layoutContainer( Container parent ) {
int numero = parent.countComponents();
comp.resize( d.width,d.height );
}
}
}
Y ahora vamos a ver un ejemplo en que utilicemos nuestro Layout. Posicionaremos tres botones en el panel
y un campo de texto con una etiqueta precediéndolo. La apriencia que tendrá en pantalla será la que se
muestra en la figura:
import java.awt.*;
import java.applet.Applet;
Profesor: Quiñones Nieto, Yamil Página 12
Lenguaje de Prgramacion II
Profesor: Quiñones Nieto, Yamil Página 13