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.
Para que los componentes salgan centrados (la etiqueta y el botón) hay que ir llamando uno por uno a su método setAlignmentX(Component.CENTER_ALIGNMENT). Puedes probar a llamar a uno sí y a otro no, o a poner "alignment" distintos a cada uno. Conseguierás colocaciones verdaderamente extrañas.