RandomLayout
Não arranja nada automaticamente: cada filho precisa de bounds. É o layout padrão quando você
chama add(...) sem definir um layout. Apesar do nome, é a base de overlays e cards flutuantes.
🔴 · Pacote:
dev.crossfly.ui.layout· Estende:Layout
Quando usar
- Overlays, cards flutuantes, posicionamento livre.
- Layouts custom onde você controla os bounds.
Quando NÃO usar
- Telas normais → use um layout que arranja (Vertical/Horizontal/Grid).
add(...)
public Layout add(Object... params); // apenas coleta os componentes; não os posiciona
Duas formas de posicionar
- Manual (pixels — NÃO responsivo):
filho.setBounds(x, y, w, h). - Relativo (responsivo — recomendado):
filho.setRelativeBounds(Relative x, Relative y, Relative w, Relative h). OdoLayout()doRandomLayoutchamaRelative.setBounds(c)automaticamente para todo filho com bounds relativos.
Exemplo completo (copiar, colar e rodar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.graphics.*;
/** 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();
// A própria Window usa RandomLayout por padrão (sem setLayout)
Component card = new Component();
card.setLayout(new VerticalLayout(Position.START, Position.START));
card.add(LAY_AUTO, new Label("Cartão flutuante"));
card.setRelativeBounds(
Relative.CENTER, // x: centralizado
Relative.CENTER, // y: centralizado
Relative.ofScreen(0.8f, ScreenSize.MIN), // largura: 80% do menor lado
Relative.ofFont(10f) // altura: 10 linhas de fonte
);
add(card); // RandomLayout resolve os bounds relativos
}
}
Os trechos abaixo mostram só o miolo (o que vai dentro de
onShow()). Para rodar, coloque-os no esqueletoMainWindowacima.
Uso básico (card centralizado responsivo)
Component overlay = new Component(); // sem setLayout → RandomLayout
Component card = new Component();
card.setRelativeBounds(
Relative.CENTER, // x: centralizado
Relative.CENTER, // y: centralizado
Relative.ofScreen(0.8f, ScreenSize.MIN), // largura: 80% do menor lado
Relative.ofFont(10f) // altura: 10 linhas de fonte
);
overlay.add(card); // RandomLayout resolve os bounds relativos
Boas práticas
- Prefira
setRelativeBoundsasetBounds— mantém a responsividade. - Se precisar de
setBoundsfixo, recalcule emWindow.onReposition()(chamado no resize).
Erros comuns
- Usar
setBounds(x,y,w,h)fixo e a UI quebrar em outra tela/densidade. - Esquecer que sem bounds (nem fixos, nem relativos) o filho fica em
(0,0)com tamanho 0.
Veja também
Esta página foi útil?Obrigado pelo feedback!