jueves, 24 de noviembre de 2011

Layouts en Java

Los Layouts son clases que dicen como se van a acomodar los componentes en una interfaz gráfica en Java.
Algunos de ellos, son GridLayout, GridBagLayout, FlowLayout, BorderLayout, etc.

Cada Layout tiene una manera diferente de acomodar los componentes como botones, labels, textfields, etc., en una ventana.

Explicaré el uso de algunos de los Layouts de Java, con el siguiente código.

Uso del BorderLayout, GridLayout y FlowLayout.
import java.awt.*;
import javax.swing.*;

public class Layouts{

public Layouts(){
}

public static void main(String[] args) {

JFrame ventana = new JFrame(); //creacion de la ventana

ventana.setSize(1028, 740); //tamaño de la ventana
ventana.setLocation(0, 25); //donde se localiza la ventana
ventana.setTitle("Ventana"); //como se llama la ventana
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //cuando se cierra la ventana

JPanel p = new JPanel(); //panel contenedor de los demas paneles
JPanel pBorder = new JPanel(); //panel para el BorderLayout
JPanel pGrid = new JPanel(); //panel para el GridLayout
JPanel pFlow = new JPanel(); //panel para el FlowLayout

ventana.setContentPane(p); //la ventana contiene el panel p
p.add(pBorder);
p.add(pGrid); //el panel p contiene a los paneles pBorder, pGrid y pFlow
p.add(pFlow);

p.setLayout(new GridLayout(3, 1));
pBorder.setLayout(new BorderLayout());
pGrid.setLayout(new GridLayout(3, 2));
pFlow.setLayout(new FlowLayout());

p.setBackground(Color.WHITE);
pBorder.setBackground(Color.YELLOW); //colores de los layouts
pGrid.setBackground(Color.GREEN);
pFlow.setBackground(Color.RED);

JLabel centro = new JLabel("¡Centro!");
JLabel norte = new JLabel("¡Norte!");
JLabel sur = new JLabel("¡Sur!"); //labels
JLabel este = new JLabel("¡Este!");
JLabel oeste = new JLabel("¡Oeste!");

JPanel panel = new JPanel(); //panel que esta en el centro del panel pBorder
panel.add(centro); //este panel agrega el label centro
pBorder.add(panel, BorderLayout.CENTER);
pBorder.add(norte, BorderLayout.NORTH); //este panel agrega el label norte al norte
pBorder.add(sur, BorderLayout.SOUTH); //este panel agrega el label sur al sur
pBorder.add(este, BorderLayout.EAST); //este panel agrega el label este al este
pBorder.add(oeste, BorderLayout.WEST); //este panel agrega el label oeste al oeste

JButton bot1 = new JButton("Boton1");
JButton bot2 = new JButton("Boton2");
JButton bot3 = new JButton("Boton3"); //botones
JButton bot4 = new JButton("Boton4");
JButton bot5 = new JButton("Boton5");
JButton bot6 = new JButton("Boton6");

pGrid.add(bot1);
pGrid.add(bot2);
pGrid.add(bot3); //el panel pGrid agrega todos estos botones
pGrid.add(bot4);
pGrid.add(bot5);
pGrid.add(bot6);

JLabel lab = new JLabel("Ejemplo");
JButton bot = new JButton("Boton");
JButton boton = new JButton("Boton");
JLabel label = new JLabel("Ejemplo");

pFlow.add(lab);
pFlow.add(bot); //el panel pFlow contiene estos componentes
pFlow.add(boton);
pFlow.add(label);

ventana.setVisible(true);

return;
}
}
Imagen de la ejecución

BorderLayout
Como se ve en el código anterior el BorderLayout se usa para acomodar los componentes al norte, sur, este, oeste y centro de una ventana. Solo hay que agregar un componente a un BorderLayout y decir donde queremos que se vea, ya sea al centro, al norte, al sur, al este o al oeste.

GridLayout
El GridLayout se utiliza para crear matrices en una ventana. Acomoda los componentes en un mismo tamaño. Es útil para realizar calculadoras.
Como se muestra en el código, para decir cuantas filas y columnas queremos en la matriz, se coloca primero el número de filas y después el número de columnas, por ejemplo, en el código, en el GridLayut del panel pGrid hay 3 filas y dos columnas, pGrid.setLayout(new GridLayout(3, 2)).

FlowLayout
Este Layout es muy sencillo, ya que solo acomoda los componentes en fila hasta donde se lo permita la ventana.

Referencias

3 comentarios:

KrlOs Ruiz dijo...
Este comentario ha sido eliminado por el autor.
KrlOs Ruiz dijo...

Sabes como hacer un layout tipo matriz usando la libreria SWT, ya que el GridLayout no es el mismo porque solo pide un parametro entero y otro booleanlo he aqui la documentacion http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Flayout%2Fpackage-summary.html

joge dijo...

Y cómo sería si los botones tuvieran imagenes o algun label, para que la imagen se redimensione tambien??

Publicar un comentario