Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
RandomLayout
No distribuye nada automáticamente: cada hijo necesita bounds. Es el layout por defecto cuando
llamas a add(...) sin definir un layout. A pesar del nombre, es la base de overlays y cards flotantes.
🔴 · Paquete:
dev.crossfly.ui.layout· Extiende:Layout
Cuándo usar
- Overlays, cards flotantes, posicionamiento libre.
- Layouts personalizados donde tú controlas los bounds.
Cuándo NO usar
- Pantallas normales → usa un layout que distribuya (Vertical/Horizontal/Grid).
add(...)
public Layout add(Object... params); // solo recoge los componentes; no los posiciona
Dos formas de posicionar
- Manual (píxeles — NO responsivo):
filho.setBounds(x, y, w, h). - Relativo (responsivo — recomendado):
filho.setRelativeBounds(Relative x, Relative y, Relative w, Relative h). EldoLayout()deRandomLayoutllama aRelative.setBounds(c)automáticamente para todo hijo con bounds relativos.
Ejemplo completo (copiar, pegar y ejecutar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.graphics.*;
/** Pantalla principal ejecutable. Apunta el launcher (classname) y corre: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
// La propia Window usa RandomLayout por defecto (sin 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: centrado
Relative.CENTER, // y: centrado
Relative.ofScreen(0.8f, ScreenSize.MIN), // ancho: 80% del lado menor
Relative.ofFont(10f) // altura: 10 líneas de fuente
);
add(card); // RandomLayout resuelve los bounds relativos
}
}
Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutar, colócalos en el esqueletoMainWindowanterior.
Uso básico (card centrado responsivo)
Component overlay = new Component(); // sin setLayout → RandomLayout
Component card = new Component();
card.setRelativeBounds(
Relative.CENTER, // x: centrado
Relative.CENTER, // y: centrado
Relative.ofScreen(0.8f, ScreenSize.MIN), // ancho: 80% del lado menor
Relative.ofFont(10f) // altura: 10 líneas de fuente
);
overlay.add(card); // RandomLayout resuelve los bounds relativos
Buenas prácticas
- Prefiere
setRelativeBoundsasetBounds— mantiene la responsividad. - Si necesitas
setBoundsfijo, recalcula enWindow.onReposition()(llamado en el resize).
Errores comunes
- Usar
setBounds(x,y,w,h)fijo y que la UI se rompa en otra pantalla/densidad. - Olvidar que sin bounds (ni fijos, ni relativos) el hijo queda en
(0,0)con tamaño 0.
Ver también
¿Te resultó útil esta página?¡Gracias por tu opinión!