Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.

Whiteboard

Whiteboard es un área de dibujo libre con el dedo/ratón — el caso clásico es la captura de firma. Ya gestiona los eventos táctiles y acumula los trazos internamente.

Ejemplo completo (copiar, pegar y ejecutar)

package com.exemplo;

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

/** Pantalla principal ejecutable. Apunta el launcher (classname) y corre: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      // Área de firma ocupando el espacio restante (LAY_FILL).
      Whiteboard board = new Whiteboard();
      board.setPenColor(0xFF000000);   // lápiz negro
      board.thick = true;              // trazo grueso
      add(LAY_FILL, board);

      // Botón para borrar el dibujo.
      Button limpar = new Button("Limpar");
      limpar.onAction(c -> board.clear());
      add(LAY_AUTO, limpar);

      // Botón para capturar el dibujo como imagen (ej.: para persistir).
      Button salvar = new Button("Salvar");
      salvar.onAction(c -> {
         Image img = board.getImage();   // el dibujo actual como Image (puede ser null si está vacío)
         // … persistir img (ej.: PNG) …
      });
      add(LAY_AUTO, salvar);
   }
}

Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de onShow()). Para ejecutarlos, colócalos en el esqueleto MainWindow de arriba.

Uso básico (firma)

Whiteboard assinatura = new Whiteboard();
assinatura.setPenColor(0xFF000000);   // lápiz negro
assinatura.thick = true;              // trazo grueso
painel.add(0.5f, assinatura);         // 50% de la altura

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

Button salvar = new Button("Salvar");
salvar.onAction(c -> {
   Image img = assinatura.getImage();   // el dibujo como imagen
   // … persistir img (ej.: PNG) …
});

API

Miembro Efecto
setPenColor(int) / getPenColor() color del lápiz (ARGB)
thick (campo boolean) true = trazo grueso
clear() borra todo
getImage() devuelve el dibujo actual como Image
setImage(Image) carga una imagen base (lanza ImageException)

Buenas prácticas

  • Da altura generosa (fracción del contenedor o autoHeight) — la firma necesita espacio.
  • Ofrece siempre un botón Limpiar.
  • Al guardar, usa getImage() y gestiona excepciones al convertir/persistir.

Errores comunes

  • Área demasiado pequeña → firma ilegible.
  • Olvidar que setImage(Image) lanza ImageException (comprobada).
  • Confundir con ImageView (solo muestra) — Whiteboard captura dibujo.

Ver también

¿Te resultó útil esta página?