Pergunta

O que java GUI disposição gerente faz uso todos? Ultimamente, tenho vindo a utilizar MigLayout , que tem alguns poderosos controles de componentes. Só queria ver o que outros desenvolvedores estão usando diferente dos JDK padrão.

Foi útil?

Solução

MigLayout é o gerenciador de layout GUI que é amplamente utilizado por desenvolvedores Java.

Outras dicas

GridBagLayout é utilizável. Uma vez que você se acostumar a usá-lo, ele funciona muito bem. Eu acho que os gerenciadores de layout padrão JDK são muito poderosos por conta própria. Além disso, você começa a minimizar a dependência de bibliotecas 3o partido.

MiG e FormLayout (JGoodies) são ambos excelentes para o layout manual (E quase todos disposição eventualmente torna-se manual). Meu maior conselho é para projetar seus pontos de vista para que você possa completamente arrancar o layout e re implementar-lo sem afetar a sua aplicação (boa separação de vista e controlador é a chave aqui).

Definitivamente dar uma olhada em abordagem PresentationModel de JGoodie para a implementação de pontos de vista 'burro'. Eu uso essa técnica com um construtor de GUI (eu uso GroupLayout com o construtor de plug-in Jigloo GUI) para jogar fora protótipos rápidos. Depois de 3 ou 4 iterações, que normalmente vai para fora da janela e fazemos um re-implementar usando MiG ou FormLayout.

EDIT:. Desde que eu escrevi isso, mudei de usar MiG para todos os meus layouts, e eu já não usar um construtor de GUI - é apenas uma maneira muito fácil de colocar as coisas usando MiG

A última aplicação Swing que trabalhei usado JGoodies' FormsLayout .

Eu uso o GridBagLayout . Parece levar um monte de código, mas faz muito bons layouts que procuram.

Eu também gosto de combinar BorderLayout com painéis GridBagLayout para grande personalização.

Eu sou um grande fã de usar TableLayout vez de GridBagLayout. Tudo faz sentido, visto que cada vez que eu tento usar GridBagLayout esmaga minha alma.

Eu uso para ir para GridBagLayout para o controle, mas desde java1.6 Vou uso GroupLayout é impressionante.

Aqui uma imagem e código de exemplo para usá-lo!.

alt texto http://img145.imageshack.us/img145/7844/screenshot1dz8 .png

    private void layoutComponents(){
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);
        SequentialGroup hGroup = layout.createSequentialGroup();

        JLabel nameLbl  = new JLabel("Name");
        JLabel countLbl = new JLabel("Amount");
        JLabel dateLbl  = new JLabel("Date(dd/MM/yy)");
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(nameLbl).
                addComponent(countLbl).
                addComponent(dateLbl).
                addComponent(go));

        hGroup.addGroup(layout.createParallelGroup().
                addComponent(name).
                addComponent(count).
                addComponent(date));

        layout.setHorizontalGroup(hGroup);

        SequentialGroup vGroup = layout.createSequentialGroup();

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(nameLbl).addComponent(name));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(countLbl).addComponent(count));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(dateLbl).addComponent(date));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(go));
        layout.setVerticalGroup(vGroup);

        frame.add( panel , BorderLayout.NORTH );
        frame.add( new JScrollPane( textArea ) );
    }

Eu uso DesignGridLayout para a maioria dos meus painéis.

Para os raros painéis que DesignGridLayout não pode lidar totalmente, eu uso uma mistura de BorderLayout e DesignGridLayout.

Com DesigngridLayout você pode codificar manualmente seus layouts com um número mínimo de linhas de código, que são fáceis de escrever e ler:

DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);

Cada linha da grelha painel é definida por uma linha de código. Como você pode ver, "desenho" seu painel é bastante simples.

Além disso, acho DesignGridLayout tem algumas características únicas (como o seu " redimensionamento inteligente vertical ").

GridBagLayout é poderoso, mas bastante primitiva: o código que os fios até o layout é muito detalhado. Esta biblioteca de utilitários (apenas 1 arquivo jar real contendo cerca de 10 classes) simplifica um monte de obras: http : //code.google.com/p/painless-gridbag/ o seguinte trecho é citado a partir da home page do site:

    PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

    gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
             .cell(lblFamilyName).cell(txtFamilyName).fillX();
    gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

    gbl.doneAndPushEverythingToTop();

Como uma visão geral, você pode encontrar um artigo que escrevi um loooong atrás no sol para ser útil. Não é atualizado com as últimas gerenciadores de layout, mas concentra-se em nidificação eficaz de gerenciadores de layout, em vez de tentar fazer tudo com um layout.

http://developer.java.sun.com/developer/ onlineTraining / GUI / AWTLayoutMgr

Descobri que para qualquer GUI não trivial que usar múltiplos esquemas com sub-painéis encaixados em que o painel principal pode ter uma GridBagLayout e cada sub-painel (tipicamente sem uma fronteira ou uma indicação de que é um painel) utiliza um layout mais simples sempre que possível. Normalmente eu vou usar BorderLayout, FlowLayout e BoxLayout para menores e mais simples sub-painéis. Dividindo pequenas seções do GUI em sub-painéis e usando o layout mais simples possível controlar essa seção do GUI você pode criar complexo, bem arranjado exibe sem muita dor de cabeça de muitas opções de GridBagLayout. Além disso, ao agrupar como funcionalidade de exibição em um painel, ele cria código mais legível.

disposição da Primavera, que foi desenvolvido para o mantissa gui construtor que faz parte do netbeans.

Eu usei GroupLayout também. Mais uma vez, é um gerenciador de layout JDK padrão como de Java6, mas você pode encontrar o separado biblioteca também.

Eu sempre fui um grande fã do GridBagLayout. Assemelha-se a tabelas HTML muito, então é intuitivo para os programadores web.

Eu comecei usando vários layouts aninhadas, em seguida, aproximou-se GridBagLayout (o que é muito frustrante). Desde então eu tentei FormLayout (mas achei que não era adequado para qualquer coisa, mas as formas) e estabeleceu-se firmemente no TableLayout, que no geral eu estou muito feliz com ele.

Desde então eu descobri MigLayout e embora eu não tenha feito muito mais do que brincar com ele, parece muito capaz, muito semelhante ao TableLayout e provavelmente um pouco mais limpo.

A grande vantagem para mim é que MigLayout está prestes a se tornar parte do JDK, assim que eu pretendo usá-lo praticamente exclusivamente quando ele faz.

A outra coisa a lembrar é que não importa qual LayoutManager peso-pesado de se decidir sobre, há sempre um lugar para alguns dos gerenciadores de layout mais simples, como GridLayout. Eu vi algumas coisas horríveis feitas com GridBagLayout que poderia ter sido feito muito mais facilmente com um gerenciador de layout mais simples.

Eu prefiro minimizar dependências de libs do 3o partido, por isso é geralmente BoxLayout para diálogos e GridBagLayout para layouts "complicado". GridBagLayout é bastante fácil de entender, mas um pouco difícil de configurar. Eu mesmo escrevi uma ferramenta para criar o código de layouts HTML (esperança que ajuda os outros também): http: //www.onyxbits. de / content / blog / patrick / java-gui-construção-GridBagLayout-made-easy gerente

O único gerenciador de layout que eu encontrei, que realmente como é o Relativa layout Manager . O Relativa Layout Manager funciona de uma maneira que seja consistente com as caixas como diálogo são conceitualmente organizado. Um empate-back é que, enquanto este gerenciador de layout lida com restrições aditivos. Ele faz não parecem lidar com restrições de razão. Felizmente ele está muito bem concebido, e eu era capaz de implementar este recurso.

Eu uso BorderLayout 90% do tempo, enquanto assentamento BoxLayout e SpringLayout

Eu sou um pouco de novato Java.

Tentei GridBagLayout, deu-se, em seguida, tentou BoxLayout, em seguida, deu-se, em seguida, fiz o meu próprio layout personalizado que trabalhou. Com GridBag e Box Coloquei meu melhor palpite no e os motores de layout decidiu fazer algo diferente, sem qualquer forma aparente para depurá-los.

Com o meu layout personalizado, eu poderia imprimir coordenadas e larguras e alturas, para descobrir onde ele estava indo errado. É um pouco mathy colocando as coisas, mas você tem todo o poder de java para utilizar em vez do vocabulário limitado de um dos gerenciadores de layout integrado.

Claro que foi apenas para um projeto de casa, você nunca ser permitido fazer isso no trabalho.

Eu uso GridBagLayout para a forma como layouts, use BorderLayout para layouts simples e FlowLayout para o número de ícones / botões que têm alguns espaços entre horizontais. Netbeans é também um bom construtor de GUI que pode evitar uma série de codificações de layout tediosas para salvar o seu tempo.

Eu comecei usando Swing recentemente e eu estou usando GridBagLayout.

Eu estava cansado de todos aqueles layoutmanagers que precisavam de um monte de configuração, não estavam muito legível ou desgastante para fazer manualmente, então eu escrevi meu próprio laoutmanager muito simples que usa a abstração de dois photocorners mantendo cada componente no lugar. Você pode adicionar seu componente como este: parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");

Dê uma olhada aqui https://github.com/hageldave/UsefulStuff/blob /master/src/PhotoCornersLayout.java ;) você está responisble para um layout correto-se embora, porque não está verificando sobreposições ou outras shortcommings do seu layout.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top