Navegar entre telas
O que você vai aprender
- Avançar para uma nova tela (
show()) e voltar (hide()). - Passar dados para a tela de destino.
- Onde montar a UI de cada tela.
Pré-requisitos
Entender que toda tela é uma subclasse de Window e que a UI é montada em onShow().
Exemplo completo (copiar, colar e rodar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*;
/** 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());
add(LAY_AUTO, new Label("Lista"));
Button abrir = new Button("Abrir detalhe do item 42");
abrir.onAction(c -> new TelaDetalhe(42).show()); // push (avança) — dados pelo construtor
add(LAY_AUTO, abrir);
}
}
/** Segunda tela: recebe o id pelo construtor e volta com hide(). */
class TelaDetalhe extends Window
{
private final int id;
public TelaDetalhe(int id) { this.id = id; } // dados vêm pelo construtor
@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 (volta)
add(LAY_AUTO, voltar);
}
}
Os trechos abaixo mostram só o miolo (o que vai dentro de
onShow()). Para rodar, coloque-os no esqueletoMainWindowacima.
Avançar (push) e voltar (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 (avança)
add(LAY_AUTO, abrir);
}
}
public class TelaDetalhe extends Window {
private final int id;
public TelaDetalhe(int id) { this.id = id; } // dados vêm pelo construtor
@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 (volta)
add(LAY_AUTO, voltar);
}
}
Passar dados para a tela seguinte
Não existem “argumentos de rota”. Passe pelo construtor da Window de destino (como id acima).
Para objetos, passe a referência: new TelaCliente(cliente).show();.
Onde montar a UI
onShow()(comsuper.onShow()): aquiScreen.width/heighte os bounds da janela já são válidos.- Não monte no construtor — os bounds podem não estar prontos.
Boas práticas
- Carregue dados fora da paint thread e volte com
Component.onUI(...)para preencher a UI. - Libere recursos (timers, cursores) em
onRemove().
Erros comuns
- Montar a UI no construtor (bounds inválidos) ou esquecer
super.onShow(). - Esperar um “back-stack com argumentos nomeados” — passe dados pelo construtor.
Veja também
Esta página foi útil?Obrigado pelo feedback!