Entendendo FormLayout do JGoodies

Olá.
Sou João Lucas dos Santos, e estou sentindo algumas dificuldades no entendimento dos paramentros que são passados no construtor da classe FormLayout.
Por exemplo, o que significa:
‘new FormLayout(“right:max(5dlu;pref), 5dlu, pref”);’?
Fiquem a vontande com exemplos… rs!

Obrigado.
JL

O construtor do FormLayout recebe dois parâmetros String, contendo a especificação, respectivamente, das colunas e das linhas.

Vou te mandar um exemplo de uma aplicação real:

FormLayout layout = new FormLayout( "right:pref, 3dlu, pref, 6dlu, right:pref, 3dlu, pref, 3dlu, center:pref, 3dlu, pref", "pref, 3dlu, pref, 3dlu, pref, 6dlu, pref, 3dlu, pref, 3dlu, pref, 6dlu, pref, 3dlu, pref" + ", 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 6dlu, pref, 3dlu, pref" );

O primeiro parâmetro especifica 11 colunas:

  • em “right:pref”, o right indica alinhamento à direita, no caso, sendo a primeira coluna, são os labels; o pref indica que o tamanho será o tamanho dos componentes e não um tamanho arbitrário.
  • 3dlu se refere a uma largura arbitrária para uma coluna, no caso é uma largura bem pequena, apenas para que as labels não fiquem coladas aos componentes.
  • os outros itens são explicados de modo equivalente.

Em anexo, o painel resultante.

Cara, muito obrigado.
Explicação simples, muito boa…
Mas como eu posiciono os campos no formulario agora? Tenho que usar o CellConstraints para isso?

Exatamente. Você deve usar CellConstraints para especificar a linha e coluna (e, opcionalmente, definir altura e largura).

Otimo, agora as coisas estão começando a clarear…
Deixa eu te perguntar…
E dificil você me mandar o código fonte desta tela sua ai?

Valeu.
JL

Segue o código do método que constrói a GUI:

[code]protected void build()
{
FormLayout layout = new FormLayout(
“right:pref, 3dlu, pref, 6dlu, right:pref, 3dlu, pref, 3dlu, center:pref, 3dlu, pref”,
“pref, 3dlu, pref, 3dlu, pref, 6dlu, pref, 3dlu, pref, 3dlu, pref, 6dlu, pref, 3dlu, pref” +
", 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 6dlu, pref, 3dlu, pref"
);

CellConstraints cc = new CellConstraints();
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
	
int y = 0;
	
builder.add(new JLabel("Disciplina: "), cc.xy(1, ++y));
builder.add(disciplina, cc.xy(3, y));
builder.add(descricaoDisciplina, cc.xyw(5, y, 7));
++y;
	
builder.add(new JLabel("Ano/Período: "), cc.xy(1, ++y));
builder.add(anoPeriodo, cc.xy(3, y));
builder.add(new JLabel("Tipo turma: "), cc.xy(5, y));
builder.add(tipoTurma, cc.xy(7, y));
builder.add(new JLabel("Turma: "), cc.xy(9, y));
builder.add(turma, cc.xy(11, y));
++y;
	
builder.add(new JLabel("Oferecimento: "), cc.xy(1, ++y));
builder.add(formaOferecimento, cc.xy(3, y));
builder.add(new JLabel("Status"), cc.xy(9, y));
builder.add(status, cc.xy(11, y));
++y;
	
// Apenas para Disciplinas Condensadas 
builder.addSeparator("Período de Aulas", cc.xyw(1, ++y, 3));
builder.addSeparator("Prazos", cc.xyw(5, y, 7));
++y;
	
builder.add(new JLabel("Início: "), cc.xy(1, ++y));
builder.add(inicioAulasCondensada, cc.xy(3, y));
builder.add(new JLabel("Inscrição: "), cc.xy(5, y));
builder.add(inicioInscricaoCondensada, cc.xy(7, y));
builder.add(new JLabel("a"), cc.xy(9, y));
builder.add(fimInscricaoCondensada, cc.xy(11, y));
++y;
	
builder.add(new JLabel("Término: "), cc.xy(1, ++y));
builder.add(fimAulasCondensada, cc.xy(3, y));
builder.add(new JLabel("Cancelamento: "), cc.xy(5, y));
builder.add(inicioCancelamentoCondensada, cc.xy(7, y));
builder.add(new JLabel("a"), cc.xy(9, y));
builder.add(fimCancelamentoCondensada, cc.xy(11, y));
++y;
// fim condensada 
	
builder.addSeparator("Vagas/Preenchimento", cc.xyw(1, ++y, 3));
builder.addSeparator("Abertura e Cancelamento", cc.xyw(5, y, 7));
++y;
	
builder.add(new JLabel("Aluno regular: "), cc.xy(1, ++y));
builder.add(numeroVagasAlunoRegular, cc.xy(3, y));
builder.add(new JLabel("Data/hora abertura: "), cc.xyw(5, y, 3));
builder.add(dataHoraAbertura, cc.xyw(9, y, 3));
++y;
	
builder.add(new JLabel("Aluno especial: "), cc.xy(1, ++y));
builder.add(numeroVagasAlunoEspecial, cc.xy(3, y));
builder.add(new JLabel("Cancelamento: "), cc.xyw(5, y, 3));
builder.add(dataHoraCancelamento, cc.xyw(9, y, 3));
++y;
	
builder.add(new JLabel("Total: "), cc.xy(1, ++y));
builder.add(totalVagas, cc.xy(3, y));
builder.add(new JLabel("Motivo: "), cc.xy(5, y));
builder.add(motivoCancelamento, cc.xyw(7, y, 5));
++y;
	
builder.add(new JLabel("Mínimo: "), cc.xy(1, ++y));
builder.add(preenchimentoMinimo, cc.xy(3, y));
++y;
	
builder.addSeparator("Professores", cc.xyw(1, ++y, 11));
++y;
	
builder.add(SwingUtils.scrollComponent(professoresCRUD, 100), cc.xyw(1, ++y, 11));
	
JPanel panel = builder.getPanel();
this.add(panel);

}[/code]

Estou começando a usar OpenSwing, e desejo utilizar estes apps no meu código. No caso, como seria a adptação no openswing?