Depois de ter o seu primeiro container, você precisa escolher um layout, para este container e para cada container que você criar.
Esta parte é uma lista, não exaustiva, de alguns administradores de layouts que podem ser usados no Swing.
Esta parte é baseada no tutorial oficial da Oracle sobre layouts: https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
Para configurar o layout de um container você precisa usar o método do container setLayout(LayoutManager) com algumas variações.
O layout padrão de um JFrame é o BorderLayout, o do JPanel é o FlowLayout. Mas, apesar de existir um padrão, é recomendável que você sempre escolha o layout.
O BorderLayout organiza o layout do seu container em 5 partes, como visto na figura abaixo.

Para setar o layout use o método Container.setLayout(new BorderLayout())
component na parte central do container use o método add(component, BorderLayout.CENTER)component na parte norte do container use o método add(component, BorderLayout.PAGE_START)component na parte sul do container use o método add(component, BorderLayout.PAGE_END)component na parte leste do container use o método add(component, BorderLayout.LINE_START)component na parte oeste do container use o método add(component, BorderLayout.LINE_END)Teremos também o seguinte constructor:
BorderLayout(int horizontalGap, int verticalGap): Define gaps entre os componentesTeremos também os seguintes métodos mais comuns:
setHgap(int): Define um espaço horizontal entre os componentessetVgap(int): Define um espaço vertical entre os componentesO FlowLayout organiza os componentes da esquerda para a direita, de cima para baixo. Os componentes podem ainda ser centralizados (CENTER), alinhados à esquerda (LEADING) ou alinhados à direita (TRAILING).
Para configurar um container com o FlowLayout use o método setLayout(new FlowLayout).
Para adicionar um componente no container use o método add(componente)
Teremos os seguintes constructors:
FlowLayout(): Define um FlowLayout com alinhamento central, horizontal e vertical gap de 5 pixelsFlowLayout(int align): Define um FlowLayout com o alinhamento indicado, horizontal e vertical gap de 5 pixels. Os alinhamentos poderão ser:FlowLayout.CENTER: Para um alinhamento centralizadoFlowLayout.LEADING: Para um alinhamento alinhado à esquerdaFlowLayout.TRAILING: Para um alinhamento alinhado à direitaFlowLayout(int align, int hgap, int vgap): Define um FlowLayout com o alinhamento indicado; e horizontal e vertical gaps indicados por hgap e vgap respectivamente.O BoxLayout empilha componentes de cima para baixo (PAGE_AXIS) ou da esquerda para a direita (LINE_AXIS).
Além disso tem a opção de introduzir elementos invisíveis para complementar a sua interface.
Teremos um constructor:
BoxLayout(Container target, int axis): Define um BoxLayout no Container target; com direção da esquerda para a direita com axis = BoxLayout.LINE_AXIS, ou direção de cima para baixo com axis = BoxLayout.PAGE_AXIS.Também temos a possibilidade de incluir elementos invisíveis para complementar a interface:
| Tipo | Forma | Como Criar |
|---|---|---|
| rigid area |
|
Box.createRigidArea(size) |
| glue, horizontal |
|
Box.createHorizontalGlue() |
| glue, vertical |
|
Box.createVerticalGlue() |
O GridLayout organiza os componentes em forma de grade, da esquerda para a direita e de cima para baixo (nesta ordem).
No constructor deve ser dado a quantidade de linha e colunas que a interface deve ter.
Uma, mas não ambos valores podem ser zero, o que faz com que qualquer quantidade de objetos possam ser postos nesta linha ou coluna.
Os componentes incluídos terão todos o mesmo tamanho.
Teremos os seguintes constructors:
GridLayout(int rows, int cols): A interface terá rows linhas e cols colunas;GridLayout(int rows, int cols, int hgap, int vgap): Teremos um espaço horizontal de hgap pixels e um espaço vertical de vgap pixels entre os elementos.O GridBagLayout organiza os elementos em grade de uma forma mais flexível que o GridLayout.
Quando um elemento é adicionado ao container deve-se passar um GridBagConstrain com algumas configurações:
fill = GridBagConstraints.HORIZONTAL), coluna (fill = GridBagConstraints.VERTICAL); ou ambos (fill = GridBagConstraints.BOTH).new Insets(int top, int left, int bottom, int right)| FIRST_LINE_START | PAGE_START | FIRST_LINE_END |
| LINE_START | CENTER | LINE_END |
| LAST_LINE_START | PAGE_END | LAST_LINE_END |
.