Ayuda con Layout

Buenos días, estoy intentando aprender más sobre el Layout, pero no me aclaro muy bien con el "GridLayout", os mando una imagen de lo que quiero hacer, para ver si alguien me puede poner un ejemplo de como hacerlo.

He probado de varias formas y soy incapaz de alinear los controles.

Un saludo

AdjuntoTamaño
GridLayout.JPG16.09 KB

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El grid layout hace

El grid layout hace cuadriculas del mismo tamaño, por lo tanto no te sirve para lo que quiere lograr con tu imagen.

Podrias usar GridBagLayout o el GroupLayout. Ambos son bastante flexibles.

Acá puedes tener una guía visual de los layout managers:

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Imagen de Nopalin

Son dificiles

La mera verdad los layouts ofrecidos por default en swing no son de gran utilidad que digamos, cuando ves su codigo quedas espantando de tanta cosa que hay que hacer.

Afortunadamente otros intentaron ayudar con el problema y existen otras librerarias para el manejo de layouts, la mas famosa creo es forms de jgoodies, existe tambien una bastante simple de usar llamada miglayout, puedes intentar con el que mejor te cuadre, en lo personal me inclino por jgoodies.

// en jgoodies defines una cuadricula y ahi pones los elementos
FormLayout fm = new formLayout("5dlu, 30dlu, 50dlu, 5dlu, 30dlu, 50dlu", "18dlu, 18dlu, 18dlu, 18dlu, 18dlu");
CellConstraints  cc = new CellConstraints();
JPanel panel = new JPanel(fm);

panel.add(new JLabel("Nombre"), cc.xy(2, 1));
panel.add(new JTextfield(), cc.xy(3, 1));
panel.add(new JLabel("Apellidos"), cc.xy(5, 1));
panel.add(new JTextfield(), cc.xy(6, 1));

panel.add(new JLabel("Direccion"), cc.xy(2, 2));
panel.add(new JTextfield(), cc.xyw(3, 2, 4));

panel.add(new JLabel("Cp"), cc.xy(2, 3));
panel.add(new JTextfield(), cc.xy(3, 3));
panel.add(new JLabel("Localidad"), cc.xy(5, 3));
panel.add(new JTextfield(), cc.xy(6, 3));

panel.add(new JLabel("Provincia"), cc.xy(2, 4));
panel.add(new JTextfield(), cc.xy(3, 4, 4));

panel.add(new JLabel("Telefono"), cc.xy(2, 5));
panel.add(new JTextfield(), cc.xy(3, 5));
panel.add(new JLabel("Fax"), cc.xy(5, 5));
panel.add(new JTextfield(), cc.xy(6, 5));