Duvida - GroupLayout [Resolvido]

4 respostas
KaosBr

Boa tarde,

Depois de ler, alguns materiais passados, aqui no forum e outros. Vi que o mais pratico, é usar diversos, tipos de layout de acordo com a necessidade. Para JPanel, com muitos componentes, gostei do sistema do GroupLayout. Porém estou perdendo, o tamanho dos componentes e do JPanel, conforme imagem abaixo:

[URL=http://www.4shared.com/photo/N2eXe4W6/GroupLayout.html][/URL]

Código:

public class PainelDeContato extends PainelGrandeCorpoUmDeTres {
    private RotuloNormal telefoneA;
    private CaixaDeTextoFormatadoTelefone caixaTelefoneUm;
    private RotuloNormal telefoneB;
    private CaixaDeTextoFormatadoTelefone caixaTelefoneDois;
    private RotuloNormal email;
    private CaixaDeTextoMedio caixaEmail;
    private RotuloNormal site;
    private CaixaDeTextoMedio caixaSite;

    public PainelDeContato() {
        super(" Contato ");
        this.inicializaComponentes();
    }

    private void inicializaComponentes() {
        this.telefoneA = new RotuloNormal("Telefone");
        this.caixaTelefoneUm = new CaixaDeTextoFormatadoTelefone();

        this.telefoneB = new RotuloNormal("Telefone");
        this.caixaTelefoneDois = new CaixaDeTextoFormatadoTelefone();

        this.email = new RotuloNormal("E-mail");
        this.caixaEmail = new CaixaDeTextoMedio();
        
        this.site = new RotuloNormal("Site");
        this.caixaSite = new CaixaDeTextoMedio();

        this.inicializaLayout();
    }

    private void inicializaLayout() {
        GroupLayout layout = new GroupLayout(this);
        this.setLayout(layout);

        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(
                layout.createSequentialGroup()

                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.telefoneA)
                .addComponent(this.caixaTelefoneUm))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.telefoneB)
                .addComponent(this.caixaTelefoneDois))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.email)
                .addComponent(this.caixaEmail))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.site)
                .addComponent(this.caixaSite))
                );

        layout.setVerticalGroup(
                layout.createSequentialGroup()
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(this.telefoneA)
                .addComponent(this.telefoneB)
                .addComponent(this.email)
                .addComponent(this.site))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(this.caixaTelefoneUm)
                .addComponent(this.caixaTelefoneDois)
                .addComponent(this.caixaEmail)
                .addComponent(this.caixaSite))
                );
    }

}

Duvidas:

  • Como manter o layout, no tamanho, herdado? Do JPanel e componentes internos.

  • Como deixar os componentes, em seu tamanho, padrão?

Nota: A unica forma que consegui, uma saida de layout satisfatoria, foi: aumentando drasticamente a largura dos componentes.

[]s

4 Respostas

KaosBr

Boa noite,

O ajuste no código, conforme abaixo, resolveu o problema. O que é estranho esta no fato, de que a soma de todos os valores, é 730 e a largura da tela é 600… Por que não estorou o limite?

public class PainelDeContato extends PainelGrandeCorpoUmDeTres {
    private RotuloNormal telefoneA;
    private CaixaDeTextoFormatadoTelefone caixaTelefoneUm;
    private RotuloNormal telefoneB;
    private CaixaDeTextoFormatadoTelefone caixaTelefoneDois;
    private RotuloNormal email;
    private CaixaDeTextoMedio caixaEmail;
    private RotuloNormal site;
    private CaixaDeTextoMedio caixaSite;

    public PainelDeContato() {
        super(" Contato ");
        this.inicializaComponentes();
    }

    private void inicializaComponentes() {
        this.telefoneA = new RotuloNormal("Telefone");
        this.caixaTelefoneUm = new CaixaDeTextoFormatadoTelefone();

        this.telefoneB = new RotuloNormal("Telefone");
        this.caixaTelefoneDois = new CaixaDeTextoFormatadoTelefone();

        this.email = new RotuloNormal("E-mail");
        this.caixaEmail = new CaixaDeTextoMedio();
        
        this.site = new RotuloNormal("Site");
        this.caixaSite = new CaixaDeTextoMedio();

        this.inicializaLayout();
    }

    private void inicializaLayout() {
        GroupLayout layout = new GroupLayout(this);
        this.setLayout(layout);

        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(
                layout.createSequentialGroup()

                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.telefoneA)
                .addComponent(this.caixaTelefoneUm, 0, 90, 90))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.telefoneB)
                .addComponent(this.caixaTelefoneDois, 0, 90, 90))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.email)
                .addComponent(this.caixaEmail, 0, 275, 275))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(this.site)
                .addComponent(this.caixaSite, 0, 275, 275))
                );

        layout.setVerticalGroup(
                layout.createSequentialGroup()
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(this.telefoneA)
                .addComponent(this.telefoneB)
                .addComponent(this.email)
                .addComponent(this.site))
                
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(this.caixaTelefoneUm)
                .addComponent(this.caixaTelefoneDois)
                .addComponent(this.caixaEmail)
                .addComponent(this.caixaSite))
                );
    }

}

Imagem da tela
[URL=http://www.4shared.com/photo/5GxbP1eu/GroupLayout-2.html][/URL]

Sinceramente, não entendi, como não estrapolou o espaço do JDialog.

[]s

Eric_Yuzo

Como a tela está maior que a soma dos preferred sizes (terceiro parâmetro), ele redimensiona os componentes até atingirem o tamanho da tela. Este redimensionamento fica limitado ao minimum size (segundo parâmetro) dos componentes, como estão setados como zero, não extrapolou o tamanho.

KaosBr

Boa noite,

Entedi :slight_smile: Muito obrigado, pelo apoio que tem dado, a maior parte do material que li, foi passado por você em um outro topico, que havia aberto.

[]s

Eric_Yuzo

Que bom que a ajuda está servindo. Este é o intuito do fórum. A propósito, aqueles tutoriais da Sun realmente são muito bons.

Falou…

Criado 20 de novembro de 2010
Ultima resposta 20 de nov. de 2010
Respostas 4
Participantes 2