Layout

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.

BorderLayout

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())

Teremos também o seguinte constructor:

Teremos também os seguintes métodos mais comuns:

FlowLayout

O 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:

BoxLayout

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:

Também temos a possibilidade de incluir elementos invisíveis para complementar a interface:

Tabela retirada do Tutorial da Oracle
Tipo Forma Como Criar
rigid area
Box.createRigidArea(size)
glue, horizontal
Box.createHorizontalGlue()
glue, vertical
Box.createVerticalGlue()

GridLayout

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:

GridBagLayout

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:

FIRST_LINE_START PAGE_START FIRST_LINE_END
LINE_START CENTER LINE_END
LAST_LINE_START PAGE_END LAST_LINE_END

.