VerticalLayout
Empilha os componentes-filhos de cima para baixo (uma linha por filho), cada um ocupando a largura do contêiner (menos a margem). É o layout mais usado — a espinha dorsal da maioria das telas.
🟢 · Pacote:
dev.crossfly.ui.layout· Estende:Layout
Quando usar
- Telas em coluna: cabeçalho + conteúdo + rodapé.
- Qualquer lista de seções empilhadas.
Quando NÃO usar
- Itens lado a lado → HorizontalLayout.
- Grade rótulo/campo → GridLayout.
add(...) — assinatura e semântica
public VerticalLayout add(float altura, Component c)
O parâmetro altura controla a linha:
| Valor | Significado |
|---|---|
LAY_AUTO (0f) |
altura natural do componente (getAutoHeight()) — escala com a fonte |
LAY_FILL (-1f) |
preenche a sobra (use uma linha FILL por layout) |
> 0 (ex. 0.25f) |
fração da altura do contêiner (25%) — não são pixels |
Construtores
| Construtor | Descrição |
|---|---|
new VerticalLayout() |
alinhamento horizontal centralizado de cada linha |
new VerticalLayout(Position h, Position v) |
h = alinhamento horizontal das linhas (START/CENTER/END) |
Exemplo completo (copiar, colar e rodar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** Tela principal executável. Aponte o launcher (classname) e rode: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout(Position.START, Position.START));
Component lista = new Component(); // conteúdo elástico (placeholder)
lista.setLayout(new VerticalLayout(Position.START, Position.START));
for (int i = 1; i <= 5; i++)
lista.add(LAY_AUTO, new Label("Produto " + i));
add(LAY_AUTO, new Label("Produtos")); // cabeçalho — altura natural
add(LAY_FILL, lista); // conteúdo — absorve toda a sobra
add(LAY_AUTO, new Button("Adicionar")); // rodapé — altura natural
}
}
Os trechos abaixo mostram só o miolo (o que vai dentro de
onShow()). Para rodar, coloque-os no esqueletoMainWindowacima.
Uso básico
setLayout(new VerticalLayout(Position.START, Position.START));
add(LAY_AUTO, new Label("Produtos")); // cabeçalho — altura natural
add(LAY_FILL, lista); // conteúdo — absorve toda a sobra
add(LAY_AUTO, new Button("Adicionar")); // rodapé — altura natural
Como arranja
┌──────────────────────────┐
│ Label (LAY_AUTO) │ ← altura natural
├──────────────────────────┤
│ │
│ lista (LAY_FILL) │ ← preenche o que sobrou
│ │
├──────────────────────────┤
│ Button (LAY_AUTO) │ ← altura natural
└──────────────────────────┘
Boas práticas
- 1 linha
LAY_FILL+ as demaisLAY_AUTOé o arranjo mais robusto (não quebra se a fonte crescer ou o teclado abrir). - Espaçar linhas: insira
add(LAY_AUTO, Gap.ofFont(0.25f))como espaçador (oGapconta como uma linha de meia altura de fonte).
Erros comuns
- Dar fração a todas as linhas (
add(0.2f, …)em tudo) — frágil; prefira auto + 1 fill. - Achar que
add(0.7f, x)é 70% da sobra — é 70% da altura total do contêiner. - Mais de uma linha
LAY_FILL— só a última prevalece.
Veja também
Esta página foi útil?Obrigado pelo feedback!