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 |
.