Pessoal tenho um pequeno sistema que dependendo do que for selecionado em um combo ele precisa criar alguns campos dinamicamente (percorrendo uma lista de opções), variando de 1 a 8 campos, os quais estou usando JTextField normal.
O que estou fazendo é adicionar esses campos (com alguns labels) a um JPanel, e esse JPanel está usando o GridLayout, mas fica muito “feio” a aparência, por que as vezes os campos ficam muito “altos”.
Qual seria a melhor forma de fazer isso? Que layout eu poderia usar no JPanel para adicionar linhas com 3 colunas (um label, um campo, um label)?
Segue o código que uso para adicionar os campos ao painel:
[code]
painelCamposAdicionais.removeAll();
painelCamposAdicionais.revalidate();
painelCamposAdicionais.setLayout(new java.awt.GridLayout(linhas, 3, 5, 10));
for (int i = 4; i < lista.length; i++) {
if (i < lista.length - 2) {
String[] parAtual = lista[i];
String parametro = (parAtual[0].split(" ")[1]).trim();
String titulo = parAtual[1].trim();
if (!"".equals(titulo)) {
//System.out.println("String: " + parAtual[0] + " => " + parAtual[1]);
String[] parTipo = lista[i + 1];
String[] parTamanho = lista[i + 2];
String tipo = parTipo[1];
String tamanho = parTamanho[1].trim();
if ("".equals(tamanho)) {
tamanho = "1";
}
int t = Integer.parseInt(tamanho);
PlainDocumentTextField tipoDoc = new PlainDocumentTextField(PlainDocumentTextField.TUDO, t, true);
switch (tipo) {
case "data":
tipo = "data (dd/mm/aaaaa)";
tipoDoc = new PlainDocumentTextField(PlainDocumentTextField.DATA, t, true);
break;
case "bit":
tipo = "bit (0=falso, 1=verdadeiro)";
tipoDoc = new PlainDocumentTextField(PlainDocumentTextField.NUMERICO, t, true);
break;
case "seleção":
tipo = "seleção (...)";
break;
case "int longo":
t = 15;
tipo = "número inteiro (ex: 234543)";
tipoDoc = new PlainDocumentTextField(PlainDocumentTextField.NUMERICO, t, true);
break;
}
tipo += " - (" + tamanho + ")";
JLabel labelCampo = new JLabel(titulo + ":");
JTextField campoOpcional = new JTextField(t);
campoOpcional.setName(parametro);
campoOpcional.setDocument(tipoDoc);
labelCampo.setLabelFor(campoOpcional);
painelCamposAdicionais.add(labelCampo);
painelCamposAdicionais.add(campoOpcional);
painelCamposAdicionais.add(new JLabel(tipo));
}
i = i + 2; // para dar o salto correto na lista
}
}[/code]