Quickstart: Hello World
O momento “funciona!”. Ao fim desta página você tem um app interativo rodando no desktop.
Exemplo completo (copiar, colar e rodar)
Crie sua janela principal — uma subclasse de dev.crossfly.ui.Window:
package com.exemplo.app;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
public class MainWindow extends Window {
@Override
public void onShow() throws Exception {
super.onShow(); // obrigatório: bounds válidos + dispara onAdd
setLayout(new VerticalLayout());
Label saudacao = new Label("Olá, CrossFly!");
Button botao = new Button("Clique");
botao.onAction(c -> saudacao.setText("Você clicou!")); // roda na paint thread
add(LAY_AUTO, saudacao); // LAY_AUTO = altura natural
add(LAY_AUTO, botao);
}
}
Rodar
gradlew :lwjgl3:run
Uma janela abre com o texto e o botão; clicar troca o texto. 🎉
Os 4 fatos que sustentam todo o resto
- Tela = subclasse de
Window. Cada tela do app é umaWindow. - A UI se monta em
onShow(), não no construtor (lá os bounds ainda não são válidos) — e sempre comsuper.onShow(). - Tudo é
Componenteadd(tamanho, comp)delega o arranjo aoLayout(LAY_AUTO=natural,LAY_FILL=preenche a sobra). - O
MainWindowé apontado por classname (ver Anatomia de um projeto).
Sem binding reativo: o clique muta o
Label(setText) — você atualiza a UI na mão. É o modelo imperativo do CrossFly (ver Estado e fluxo de dados).
Próximos passos
→ Seu primeiro app (guiado, ponta a ponta)
Veja também
Esta página foi útil?Obrigado pelo feedback!