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

Whiteboard

Whiteboard é uma área de desenho livre com o dedo/mouse — o caso clássico é captura de assinatura. Ele já trata os eventos de toque e acumula os traços internamente.

Exemplo completo (copiar, colar e rodar)

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.image.*;       // Image

/** Tela principal executável. Aponte o launcher (classname) e rode: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      // Área de assinatura ocupando o espaço restante (LAY_FILL).
      Whiteboard board = new Whiteboard();
      board.setPenColor(0xFF000000);   // caneta preta
      board.thick = true;              // traço grosso
      add(LAY_FILL, board);

      // Botão para apagar o desenho.
      Button limpar = new Button("Limpar");
      limpar.onAction(c -> board.clear());
      add(LAY_AUTO, limpar);

      // Botão para capturar o desenho como imagem (ex.: para persistir).
      Button salvar = new Button("Salvar");
      salvar.onAction(c -> {
         Image img = board.getImage();   // o desenho atual como Image (pode ser null se vazio)
         // … persistir img (ex.: PNG) …
      });
      add(LAY_AUTO, salvar);
   }
}

Os trechos abaixo mostram só o miolo (o que vai dentro de onShow()). Para rodar, coloque-os no esqueleto MainWindow acima.

Uso básico (assinatura)

Whiteboard assinatura = new Whiteboard();
assinatura.setPenColor(0xFF000000);   // caneta preta
assinatura.thick = true;              // traço grosso
painel.add(0.5f, assinatura);         // 50% da altura

Button limpar = new Button("Limpar");
limpar.onAction(c -> assinatura.clear());

Button salvar = new Button("Salvar");
salvar.onAction(c -> {
   Image img = assinatura.getImage();   // o desenho como imagem
   // … persistir img (ex.: PNG) …
});

API

Membro Efeito
setPenColor(int) / getPenColor() cor da caneta (ARGB)
thick (campo boolean) true = traço grosso
clear() apaga tudo
getImage() retorna o desenho atual como Image
setImage(Image) carrega uma imagem base (lança ImageException)

Boas práticas

  • Dê altura generosa (fração de container ou autoHeight) — assinatura precisa de espaço.
  • Ofereça sempre um botão Limpar.
  • Ao salvar, use getImage() e trate exceções ao converter/persistir.

Erros comuns

  • Área pequena demais → assinatura ilegível.
  • Esquecer que setImage(Image) lança ImageException (checada).
  • Confundir com ImageView (só exibe) — Whiteboard captura desenho.

Veja também

Esta página foi útil?