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

Anatomia de um projeto

Entenda o que gerou o “esqueleto” antes de mexer nele.

Os módulos Gradle

:core     → código compartilhado: suas Windows, componentes, lógica, dados
:lwjgl3   → launcher desktop
:android  → launcher Android
:ios      → launcher iOS (RoboVM)
:web      → launcher Web (TeaVM)

Você programa quase sempre no core. Cada launcher só faz o bootstrap do SO — instancia o Main e configura a janela (ver plataformas).

Como o MainWindow é resolvido

O Main instancia a janela principal por reflexão:

  1. usa a classe indicada em cmdline["classname"] (passada pelo launcher); ou
  2. na ausência dela, o getMainWindow() sobrescrito.

Exigência: a classe precisa de um construtor público sem argumentos (é instanciada por reflexão).

Exemplo completo (copiar, colar e rodar)

Classe MainWindow mínima e executável, com o construtor sem-args exigido pela reflexão:

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

public class MainWindow extends Window
{
   public MainWindow() { }          // construtor sem-args (obrigatório para a reflexão)

   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());
      add(LAY_AUTO, new Label("MainWindow resolvida por classname"));
   }
}

Organização de app sugerida

Dentro do core, uma estrutura que escala (ver arquitetura de app):

app/
 ├─ ui/screens/      → suas Windows (uma tela = uma Window)
 ├─ ui/components/   → componentes reutilizáveis
 ├─ data/            → repositórios (SQLite, rede)
 └─ model/           → objetos de domínio

Assets e fontes

As fontes base (Roboto, FontAwesome, Material) são carregadas no bootstrap; seus assets (imagens, dados) ficam no diretório de assets do projeto e são lidos por caminho (ver Imagens).

Próximos passos

→ Tour panorâmico do CrossFly

Veja também

Esta página foi útil?