Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En java, cuando hacemos ventanas, la clase que decide cmo se reparten los botones (Y
dems controles) dentro de la ventana se llama Layout. Esta clase es la que decide en
qu posicin van los botones y dems componentes, si van alineados, en forma de
matriz, cules se hacen grandes al agrandar la ventana, etc. Otra cosa importante que
decide el Layout es qu tamao es el ideal para la ventana en funcin de los
componentes que lleva dentro.
Con un layout adecuado, el mtodo pack() de la ventana har que coja el tamao
necesario para que se vea todo lo que tiene dentro.
ventana.pack();
Las ventanas vienen con un Layout por defecto. En java hay varios layouts disponbiles
y podemos cambiar el de defecto por el que queramos.
El Layout null
Uno de los Layouts ms utilizados por la gente que empieza, por ser el ms sencillo, es
NO usar layout. Somos nosotros desde cdigo los que decimos cada botn en qu
posicin va y qu tamao ocupa
contenedor.setLayout(null); // Eliminamos el layout
contenedor.add (boton); // Aadimos el botn
boton.setBounds (10,10,40,20); // Botn en posicion 10,10 con ancho 40
pixels y alto 20
FlowLayout
El FlowLayout es bastante sencillo de usar. Nos coloca los componente en fila. Hace
que todos quepan (si el tamao de la ventana lo permite). Es adecuado para barras de
herramientas, filas de botones, etc.
contenedor.setLayout(new FlowLayout());
contenedor.add(boton);
contenedor.add(textField);
contenedor.add(checkBox);
BoxLayout
Es como un FlowLayout, pero mucho ms completo. Permite colocar los elementos en
horizontal o vertical.
// Para poner en vertical
contenedor.setLayout(new BoxLayout(contenedor,BoxLayout.Y_AXIS));
contenedor.add(unBoton);
contenedor.add(unaEtiqueta);
Un tutorial completo en
http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html
GridLayout
Este pone los componentes en forma de matriz (cuadrcula), estirndolos para que
tengan todos el mismo tamao. El GridLayout es adecuado para hacer tableros,
calculadoras en que todos los botones son iguales, etc.
// Creacin de los botones
JButton boton[] = new JButton[9];
for (int i=0;i<9;i++)
boton[i] = new JButton(Integer.toString(i));
// Colocacin en el contenedor
contenedor.setLayout (new GridLayout (3,3)); // 3 filas y 3 columnas
for (int i=0;i<9;i++)
contenedor.add (boton[i]); // Aade los botones de 1 en 1.
BorderLayout
El BorderLayout divide la ventana en 5 partes: centro, arriba, abajo, derecha e
izquierda.
Har que los componentes que pongamos arriba y abajo ocupen el alto que necesiten,
pero los estirar horizontalmente hasta ocupar toda la ventana.
Los componentes de derecha e izquierda ocuparn el ancho que necesiten, pero se les
estirar en vertical hasta ocupar toda la ventana.
Por ejemplo, es bastante habitual usar un contenedor (JPanel por ejemplo) con un
FlowLayout para hacer una fila de botones y luego colocar este JPanel en el NORTH de
un BorderLayout de una ventana. De esta forma, tendremos en la parte de arriba de la
ventana una fila de botones, como una barra de herramientas.
JPanel barraHerramientas = new JPanel();
barraHerrameientas.setLayout(new FlowLayout());
barraHerramientas.add(new JButton("boton 1"));
...
barraHerramientas.add(new JButton("boton n"));
JFrame ventana = new JFrame();
ventana.getContentPane().setLayout(new BorderLayout()); // No hace
falta, por defecto ya es BorderLayout
ventana.getContentPane().add(barraHerramientas, BorderLayout.NORTH);
ventana.getContentPane().add(componentePrincipalDeVentana,
BorderLayout.CENTER);
ventana.pack();
ventana.setVisible(true);
GridBagLayout
El GridBagLayout es de los layouts ms verstiles y complejos de usar. Es como el
GridLayout, pone los componentes en forma de matriz (cuadrcula), pero permite que
las celdas y los componentes en ellas tengan tamaos variados.
CardLayout
El CardLayout hace que los componente recibidos ocupen el mximo espacio posible,
superponiendo unos a otros. Slo es visible uno de los componentes, los otros quedan
detrs. Tiene mtodos para indicar cual de los componentes es el que debe quedar
encima y verse.
El CardLayout es el que utiliza el JTabbedPane (el de las pestaas) de forma que en
funcin de la pestaa que pinchemos, se ve uno u otro.
SpringLayout
Para los nostlgicos que usaban motif, este layout es muy similar a los attachment de
motif.
Se aaden los componentes y para cada uno de ellos tenemos que decir qu distancia en
pixel queremos que tenga cada uno de sus bordes respecto al borde de otro componente.
Por ejemplo, para decir que el borde izquierdo de una etiqueta est a 5 pixels del panel
que la contiene ponemos
layout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST,
contentPane);
Para decir que el borde derecho de la etiqueta debe estar a 5 pixels del borde izquierdo
de un JTextField, ponemos esto
layout.putConstraint(SpringLayout.WEST, textField, 5,
SpringLayout.EAST, label);
Con este layout, cuando estiramos el panel, siempre ceden aquellos componentes ms
"flexibles". Entre una etiqueta y una caja de texto, la caja de texto es la que cambia su
tamao.