Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
Navegar entre pantallas
Qué vas a aprender
- Avanzar a una nueva pantalla (
show()) y volver (hide()). - Pasar datos a la pantalla de destino.
- Dónde montar la UI de cada pantalla.
Requisitos previos
Entender que toda pantalla es una subclase de Window y que la UI se monta en onShow().
Ejemplo completo (copiar, pegar y ejecutar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*;
/** 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();
setLayout(new VerticalLayout());
add(LAY_AUTO, new Label("Lista"));
Button abrir = new Button("Abrir detalhe do item 42");
abrir.onAction(c -> new TelaDetalhe(42).show()); // push (avanza) — datos por el constructor
add(LAY_AUTO, abrir);
}
}
/** Segunda pantalla: recibe el id por el constructor y vuelve con hide(). */
class TelaDetalhe extends Window
{
private final int id;
public TelaDetalhe(int id) { this.id = id; } // los datos vienen por el constructor
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
add(LAY_AUTO, new Label("Detalhe do item " + id));
Button voltar = new Button("Voltar");
voltar.onAction(c -> hide()); // pop (vuelve)
add(LAY_AUTO, voltar);
}
}
Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutar, colócalos en el esqueletoMainWindowde arriba.
Avanzar (push) y volver (pop)
public class TelaLista extends Window {
@Override public void onShow() throws Exception {
super.onShow();
setLayout(new VerticalLayout());
Button abrir = new Button("Abrir detalhe");
abrir.onAction(c -> new TelaDetalhe(42).show()); // push (avanza)
add(LAY_AUTO, abrir);
}
}
public class TelaDetalhe extends Window {
private final int id;
public TelaDetalhe(int id) { this.id = id; } // los datos vienen por el constructor
@Override public void onShow() throws Exception {
super.onShow();
setLayout(new VerticalLayout());
add(LAY_AUTO, new Label("Detalhe do item " + id));
Button voltar = new Button("Voltar");
voltar.onAction(c -> hide()); // pop (vuelve)
add(LAY_AUTO, voltar);
}
}
Pasar datos a la pantalla siguiente
No existen “argumentos de ruta”. Pásalos por el constructor de la Window de destino (como id arriba).
Para objetos, pasa la referencia: new TelaCliente(cliente).show();.
Dónde montar la UI
onShow()(consuper.onShow()): aquíScreen.width/heighty los bounds de la ventana ya son válidos.- No montes en el constructor — los bounds podrían no estar listos.
Buenas prácticas
- Carga datos fuera del paint thread y vuelve con
Component.onUI(...)para llenar la UI. - Libera recursos (timers, cursores) en
onRemove().
Errores comunes
- Montar la UI en el constructor (bounds inválidos) u olvidar
super.onShow(). - Esperar un “back-stack con argumentos nombrados” — pasa los datos por el constructor.
Ver también
¿Te resultó útil esta página?¡Gracias por tu opinión!