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 esqueletoMainWindowacima.
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çaImageException(checada). - Confundir com
ImageView(só exibe) —Whiteboardcaptura desenho.
Veja também
- Imagens · Desenho customizado
- Catálogo: Whiteboard · Referência: Capítulo 18 — Imagens
Esta página foi útil?Obrigado pelo feedback!