Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

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

  1. Manual (píxeles — NO responsivo): filho.setBounds(x, y, w, h).
  2. Relativo (responsivo — recomendado): filho.setRelativeBounds(Relative x, Relative y, Relative w, Relative h). El doLayout() de RandomLayout llama a Relative.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 esqueleto MainWindow anterior.

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 setRelativeBounds a setBounds — mantiene la responsividad.
  • Si necesitas setBounds fijo, recalcula en Window.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?