# Quickstart: Hello World em ~10 min

> Uma MainWindow com Label e Button rodando no desktop — e os 4 fatos que sustentam tudo.

Source: https://crossfly.dev/pt/docs/get-started/quickstart — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# 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`:
```java
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
```bash
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
1. **Tela = subclasse de `Window`.** Cada tela do app é uma `Window`.
2. **A UI se monta em `onShow()`**, não no construtor (lá os bounds ainda não são válidos) — e sempre
   com `super.onShow()`.
3. **Tudo é `Component`** e `add(tamanho, comp)` delega o arranjo ao `Layout` (`LAY_AUTO`=natural,
   `LAY_FILL`=preenche a sobra).
4. **O `MainWindow` é apontado por *classname*** (ver [Anatomia de um projeto](/docs/get-started/project-structure)).

> 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](/docs/concepts/state-and-data-flow)).

## Próximos passos
→ [Seu primeiro app (guiado, ponta a ponta)](/docs/get-started/your-first-app)

## Veja também
- [Button](/docs/ui/widgets/button) · [Label](/docs/ui/widgets/label) · [VerticalLayout](/docs/ui/layouts/vertical-layout)
