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:
- usa a classe indicada em
cmdline["classname"](passada pelo launcher); ou - 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
Veja também
- Conceito: O ciclo de vida · A arquitetura em camadas
Esta página foi útil?Obrigado pelo feedback!