Layout Managers

Anuncio
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
Layout Managers
Un layout manager es un objeto que controla el tamaño y posición de los
componentes de un contenedor. Aun cuando se puede indicar el tamaño y
alineación de los componentes a mostrar, el layout manager es el controla
finalmente la posición y tamaño de éstos.
Como establecer un layout manager
En general, solo se tiene que indicar el layout manager de los JPanel y de los
content pane. Por defecto, un objeto JPanel utiliza FlowLayout, mientras que
un content pane utiliza un BorderLayout.
Para cambiar el layout manager de un contenedor, se puede especificar el
nuevo layout manager desde el constructor como se aprecia en el primer
ejemplo.
Ejemplo
JPanel panel = new JPanel( new BorderLayout() );
También puede cambiarse el layout manager después de que se ha creado el
contenedor como se ve en el siguiente ejemplo.
Ejemplo
Container conentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());
1 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
Cómo agregar componentes a un contenedor
Cuando se agregan componentes a un contenedor, panel o content pane, los
parámetros del método add que se utilizan dependen del layout manager que
se esté utilizando. Como en el ejemplo siguiente en el que se agrega un
componente a un pane que tiene un BorderLayout.
Ejemplo
pane.add(unComponente, BorderLayout.PAGE_START);
Para cada layout manager existe una sección en la que se detallan los
argumentos requeridos por el método add.
Sugerencias de tamaño y alineación
Las dimensiones de los componentes son controlados por el layout manager sin
embargo, éstos pueden tener sugerencias en cuanto a su tamaño y alineación
que pueden o no ser tomadas en cuenta por el layout manager. La mayoría de
los layout managers no toman en cuenta las sugerencias pero BoxLayout y
SpringLayout si. Las dimensiones pueden establecerse utilizando los métodos
que los componentes tienen para este fin como son: setMinimumSize,
setPreferredSize y setMaximumSize. El siguiente ejemplo muestra una forma
de establecer la dimensiones de un componente al tamaño máximo utilizando el
objeto Dimension.
Ejemplo
component.setMaximumSize(new Dimension(Integer.MAX_VALUE,
Integer.MAX_VALUE));
2 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
Espacios entre componentes
Existen tres factores que influyen en la cantidad de espacio que aparece entre
componentes de un contenedor.
El layout manager
Algunos layout managers colocan espacio entre los componentes
automaticamente y algunos permiten especificar la cantidad de espacio entre
componentes.
Componentes invisibles
Se pueden crear componentes ligeros que no se dibujan pero que ocupan
espacio en la interfaz gráfica.
Bordes vacios
En todos los layout managers se pueden utilizar bordes vacios para insertar
espacio entre componentes. Los mejores componentes para esto son panel
y label ya que normalmente no tienen bordes por defecto.
Selección de layout managers
Los layout managers tienen distintas fortalezas y debilidades. Al seleccionar uno
deben considerarse éstas y tener una idea clara de lo que se quiere hacer.
FlowLayout
Acomoda los componentes de izquierda a derecha, como las líneas de un
párrafo. Cada línea esta centrada. Se acomodan en cada línea tantos
componentes como quepan. La Figura 1 muestra como se acomodan los
componentes en un FlowLayout. En este caso, como se puede ver en el
3 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
Listado 1 no se especifica que se utilizará un FlowLayout debido a que es el
layout manager que tiene los applets por defecto.
Figura 1 Ejemplo de FlowLayout
1 import java.awt.*;
2 import java.applet.Applet;
3
4 public class flowLayout extends Applet {
5
Button boton1, boton2, boton3;
6
public void init() {
7
boton1 = new Button("OK");
8
boton2 = new Button("Abrir");
9
boton3 = new Button("Cerrar");
10
// Por default el layout manager es FlowLayout
11
add(boton1);
12
add(boton2);
13
add(boton3);
14
}
15 }
Listado 1 Ejemplo flowLayout.java
4 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
BorderLayout
Acomoda los componentes en cinco regiones denominadas NORTH,
SOUTH, EAST, WEST y CENTER que corresponden a los puntos cardinales
y el centro. Cuando se agrega un componente a un contenedor que tiene
este layout se debe especificar el sitio en el que se desea colocar el
componente. Si se omite esta especificación, entonces el componente se
colocará en el centro por defecto. La Figura 2 muestra como se acomodan
los componentes con un BorderLayout. En el Listado 2 ejemplifica otra
forma de agregar componentes a un contenedor. Además si se elimina el
comentario de la línea 14 se podrá comprobar un comportamiento que tiene
este layout que es que solo se puede colocar un componente en cada
posición y que si se agregan mas de uno, el último sobreescribre al primero.
Figura 2 Ejemplo de BorderLayout
5 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
1 import java.awt.*;
2 import java.applet.Applet;
3
4 public class borderLayout extends Applet {
5
public void init() {
6
setLayout( new BorderLayout() );
7
// el layout manager es FlowLayout
8
add(new Button("Norte"), BorderLayout.NORTH);
9
add(new Button("SUR"), BorderLayout.SOUTH);
10
add(new Button("Este"), BorderLayout.EAST);
11
add(new Button("Oeste"), BorderLayout.WEST);
12
add(new Button("Centro"), BorderLayout.CENTER);
13
// sobreescribe al boton anterior
14
// add(new Button("Otro Centro"));
15
}
16 }
Listado 2 Ejemplo borderLayout.java
GridLayout
Acomoda los componentes en una cuadricula. El contenedor se divide en
secciones rectangulares de tamaños iguales y se coloca un componente
dentro de cada sección. La Figura 3 muestra la apariencia que tiene este
layout mientras que el Listado 3 contiene el código utilizado para producir la
figura mostrada.
6 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
Figura 3 Ejemplo GridLayout
7 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Universidad Autónoma de Baja California
Facultad de Ingeniería
Apuntes de Programación Orientada a Objetos I
1 import java.awt.*;
2 import java.applet.Applet;
3
4 public class gridLayout extends Applet {
5
public void init() {
6
setLayout( new GridLayout(3,2) );
7
add(new Button("1"));
8
add(new Button("2"));
9
add(new Button("3"));
10
add(new Button("4"));
11
add(new Button("5"));
12
add(new Button("6"));
13
}
14 }
Listado 3 Ejemplo gridLayout.java
8 de 8
Elaborado por: M.C. Cecilia M. Curlango Rosas
Descargar