Gerenciadores de layout

Olá pessoal!

A partir de um problema encontrei outro. Encontrei a necessidade de usar um gerenciador de layout mas estou apanhando pra dedéu e não estou conseguindo.
Usei esse tutorial para entender o que é um gerenciador de layout e para que serve: http://www.devmedia.com.br/articles/viewcomp.asp?comp=6609. De fato intendi, inclusive pudi ver que eu não precisaria fazer gambiarra no meu projeto se eu soubesse isso antes. Copiei a classe exemplo desse tutorial e fiz uns testes para testar os meus conhecimentos. O problema que encontro é o seguinte: Como alterar o layout dos componentes quando a janela for redimensionada?
Tentei fazer uma alteração no layout e reaplicar mas não deu certo, só para fins de testes coloquei isso no evento de um botão.
Este é o meu exemplo:

package VE;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class SimpleForm extends JFrame{
	private JButton buttonOk;
	private JLabel labelCPF;
	private JLabel labelDescricao;
	private JLabel labelEndereco;
	private JLabel labelNome;
	private JTextField txtCPF;
	private JTextArea txtDescricao;
	private JTextField txtEndereco;
	private JTextField txtNome;
	private JScrollPane jScrollPane;

	public SimpleForm(){

		this.setTitle("Formulário Simples");
		//super.setTitle("Formulário Simples");

		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		//super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		this.setLayout(new FlowLayout(FlowLayout.LEFT));
		//super.setLayout(new FlowLayout(FlowLayout.LEFT));


		buttonOk = new JButton("Enviar dados >>>");
		labelCPF = new JLabel("CPF:");
		labelDescricao = new JLabel("Descrição:");
		labelNome = new JLabel("Nome:");
		labelEndereco = new JLabel("Endereço:");
		txtCPF = new JTextField(20);
		txtDescricao = new JTextArea(7, 50);
		txtNome = new JTextField(30);
		txtEndereco = new JTextField(30);
		jScrollPane = new JScrollPane(txtDescricao);

		getContentPane().add(getPanelForm());
		//super.add(getPanelForm());

		pack();
		//super.pack();
	}

	public JPanel getPanelForm(){
		FormLayout formLayout = new FormLayout(
				"2dlu, pref, 2dlu, 200, 2dlu, pref, 2dlu, 100px, 2dlu",
		"2dlu, top:pref, 2dlu, top:pref, 2dlu, top:pref, 2dlu, pref, 2dlu" );
		final JPanel jPanel = new JPanel(formLayout);
		jPanel.setBorder(BorderFactory.createTitledBorder("Preencha os dados"));

		CellConstraints cellConstraints = new CellConstraints();
		jPanel.add(labelNome, cellConstraints.xy(2, 2));
		jPanel.add(labelCPF, cellConstraints.xy(6, 2));
		jPanel.add(labelEndereco, cellConstraints.xy(2, 4));
		jPanel.add(labelDescricao, cellConstraints.xy(2, 6));

		jPanel.add(txtNome, cellConstraints.xy(4, 2));
		jPanel.add(txtCPF, cellConstraints.xy(8, 2));
		jPanel.add(txtEndereco, cellConstraints.xyw(4, 4, 5));
		jPanel.add(jScrollPane, cellConstraints.xyw(4, 6, 5));

		jPanel.add(buttonOk, cellConstraints.xy(4, 8));

		buttonOk.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				int v = 400;

				FormLayout formLayout2 = new FormLayout(
						"2dlu, pref, 2dlu, "+v+", 2dlu, pref, 2dlu, 100px, 2dlu",
						"2dlu, top:pref, 2dlu, top:pref, 2dlu, top:pref, 2dlu, pref, 2dlu" );
				System.out.println("Antes");
				jPanel.setLayout(formLayout2);
				System.out.println("Depois");
			}
		});

		return jPanel;
	}

	public static void main(String[] args) {
		try{
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

		} catch(Exception e){}

		SimpleForm simpleForm = new SimpleForm();
		simpleForm.setVisible(true);

	}
}

Para testar isso é preciso do gerenciador de layoute. Coloque ele na pasta do jre/lib/ext (para que já sabe disso, ignore essa dica)

Fala parceiro! Seguinte é muito bom vc aprender a criar telas na mão! mais vc perde muito tempo vc está no caminho certo mas aprenda o basico e utilize logo uma
ferramenta gráfica para criar telas. Se vc estiver utilizando o eclipse utilize o jigloo é show de bola.

jiglooo? Já usei ele mas não sabia que ele fazia isto?!?! :shock: :cry:

Não estou conseguindo dominá-lo muito bem… como gerenciar o GridBagLayout por ele?

gqferreira,
esse problema que você tem quando a janela for redimensionada é que por padrão, os componentes NÂO crescem.Vc precisa dominar o “resizing behavior” lendo o whitepaper e a API(dominar os parametros com o grow).
No início dá trabalho, mas depois você não vai querer outra coisa, principalmente pq não dá aqueles problemas esquisitos quando se muda de SO usando um nulllayout da vida.E na próxima JDK, será usado o MigLayout que é beem parecido com o Forms para construir formulários.Deixo aqui o whitepaper.Leia-o todo(são só 13 páginas) e depois estude, crieuma dezena de formulários.

Achei meio complicado mexer com o FormLayout, mas valeu pela apostila ironlynx. Acabei descobrindo o GridBagLayout e achei ele muito interessante e entendi +/- o seu funcionamento, não parece muito complicado mas estou tento um problema de aprendizagem…
Fiz um layout para testar oque aprendi e não ficou como eu queria que ficasse… as linhas não ficaram com os tamanhos que eu esperava nem os botões…
Deveria der ficado como na imagem.

[code]package VE;

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;

public class MeuTeste extends JFrame
{
private GridBagLayout layout;//layout desse frame
private GridBagConstraints constraints; // restrições desse alyout

public MeuTeste()
{
	setTitle("Meu Teste");
	setSize(500,250);
	setLocationRelativeTo(null);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	layout = new GridBagLayout();
	setLayout(layout);// configura o layout do frame
	constraints = new GridBagConstraints();// instancia restrições
	
	JButton button1 = new JButton("Button 1");
	JButton button2 = new JButton("Button 2");
	JButton button3 = new JButton("Button 3");
	JButton button4 = new JButton("Button 4");
	JButton button5 = new JButton("Button 5");
	JButton button6 = new JButton("Button 6");
	JButton button7 = new JButton("Button 7");
	JButton button8 = new JButton("Button 8");
	JButton button9 = new JButton("Button 9");
	
	constraints.fill =  GridBagConstraints.BOTH;
	constraints.weightx = 1;
	constraints.weighty = 1;
	addComponent(button1,0,0,1,1);
	addComponent(button2,0,1,2,1);
	addComponent(button3,0,3,1,1);
	addComponent(button4,1,0,2,2);
	addComponent(button5,1,2,2,1);
	addComponent(button6,2,2,2,1);
	addComponent(button7,3,0,1,1);
	addComponent(button8,3,1,2,1);
	addComponent(button9,3,3,1,1);
	
	
}
private void addComponent( Component component, int row, int column, int width, int height )
{
	constraints.gridx = column; //configura gridx
	constraints.gridy = row; //configura gridy
	constraints.gridwidth = width;// configura gridwidth
	constraints.gridheight = height;// configura gridheight
	layout.setConstraints(component, constraints);// configura constraints
	add(component); //adiciona componente
	
}
public static void main(String[] args) {
	try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} 
	catch(Exception e){}
	
	MeuTeste mt  = new MeuTeste();
	mt.setVisible(true);
}

}[/code]

No desenho as linhas parecem ter tamanhos diferentes, o desenho está torto…