BoxLayout
El BoxLayout es un Layout simple que permite poner los componentes de forma horizontal (igual que un FlowLayout) o de forma vertical.
El siguiente código coloca los componentes en la ventana (el botón y la etiqueta) en vertical y centrados.
package chuidiang.ejemplos;
import java.awt.Component;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
public class PruebaBoxLayout {
public static void main(String [] args)
{
// Se crea la ventana con el BoxLayout
JFrame v = new JFrame();
v.getContentPane().setLayout(new BoxLayout(v.getContentPane(),BoxLayout.Y_AXIS));
// Se crea un botón centrado y se añade
JButton boton = new JButton("B");
boton.setAlignmentX(Component.CENTER_ALIGNMENT);
v.getContentPane().add(boton);
// Se crea una etiqueta centrada y se añade
JLabel etiqueta = new JLabel("una etiqueta larga");
etiqueta.setAlignmentX(Component.CENTER_ALIGNMENT);
v.getContentPane().add(etiqueta);
// Visualizar la ventana
v.pack();
v.setVisible(true);
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
Lo de BoxLayout.Y_AXIS es para que coloque los componente en vertical, de arriba a abajo. Con BoxLayout.X_AXIS los coloca igual que un FlowLayout, de izquierda a derecha.
También hay BoxLayout.LINE_AXIS e BoxLayout.PAGE_AXIS, pero el comportamiento por defecto es igual. El comportamiento es distinto si al contenedor le cambiamos el setComponentOrientation(), en cuyo caso podemos conseguir que los componentes vayan de derecha a izquierda según los vamos añadiendo o de abajo a arriba.
En el ejemplo hemos puesto los componentes en columna vertical. Si los componentes tienen distinto tamaño horizontal, podemos indicar si los queremos alienados a derecha, a izquierda o centrados. Para ello hay que ir llamando uno por uno a su método setAlignmentX(Component.CENTER_ALIGNMENT) (o Component.LEFT_ALIGNMENT o Component.RIGHT_ALIGNMENT). Puedes probar a poner "alignment" distintos a cada uno. Conseguierás colocaciones verdaderamente extrañas.