Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

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

  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).

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?