# Cómo mostrar un Hint (toast)

> Mostrar feedback efímero no modal que aparece y desaparece solo.

Source: https://crossfly.dev/es/docs/cookbook/ui/mostrar-um-hint — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Cómo mostrar un Hint (toast)

**Propósito.** Mostrar un mensaje corto y temporal (estilo "toast") que aparece
sobre la pantalla, no bloquea la interacción y desaparece solo tras un tiempo. Úsalo para
confirmaciones rápidas ("Guardado", "Copiado"), avisos leves y estado. Sustituye al antiguo
concepto de `Toast`.

## APIs usadas
- `Hint.show(String message, int delay)` — muestra el toast durante `delay` milisegundos, con fade. Método **estático** (no se instancia `Hint`).
- `Hint.show(message, delay, Window parentWindow)` — lo mismo, anclado a una ventana específica (por defecto: la ventana en la cima de la pila).
- `Hint.show(message, delay, parentWindow, Relative at, Gap innerGap)` — control total de la posición vertical y el padding interno.
- `Hint.show(null, delay)` — pasar `message == null` **oculta** el toast actual inmediatamente.
- `Hint.INFINITE` — constante `Integer.MAX_VALUE`: mantiene visible (con fade-in) hasta que lo ocultes manualmente.
- `Hint.INFINITE_NOANIM` — constante `Integer.MIN_VALUE`: mantiene visible **sin** animación.

> Configuración global (campos estáticos públicos): `Hint.backColor`, `Hint.foreColor`,
> `Hint.position` (por defecto `Relative.ofScreen(0.85f)`, cerca del pie), `Hint.fade`,
> `Hint.font`. Cambiar estos campos afecta a todos los toasts siguientes.

## Ejemplo completo (copiar, pegar y ejecutar)
```java
package com.exemplo;

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

/** 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());

      // Un botón que dispara la toast al ser tocado
      Button btn = new Button("Salvar");
      btn.onAction(origin ->
      {
         // Toast simple: aparece por 2 segundos y desaparece con fade
         Hint.show("Registro salvo", 2000);
      });
      add(LAY_FILL, btn);
   }
}
```

> El fragmento de abajo muestra **solo el núcleo**. Para ejecutarlo, colócalo en el esqueleto `MainWindow` de arriba.

## Fragmento mínimo
```java
// Toast simple: aparece por 2 segundos y desaparece con fade
Hint.show("Registro salvo", 2000);

// Toast infinita (permanece en pantalla hasta que la mandes desaparecer)
Hint.show("Sincronizando...", Hint.INFINITE);
// ...cuando termine:
Hint.show(null, 0);   // message == null oculta la toast actual

// Posición en la parte superior, con padding interno personalizado
Hint.show("No topo", 1500, null, Relative.START, Gap.ofFont(1f, 0.5f, 1f, 0.5f));
```

> **Nota de verificación (código 2026).** La firma real en la fuente es
> `Hint.show(String, int)` y sobrecargas — **no** existe un método `hide()`; para
> ocultar, invoca `Hint.show(null, ...)`. El toast es renderizado por una `ToastWindow`
> interna (subclase de `Window`) mostrada en la pila del `EventsProcessor`, así que
> aparece sobre la pantalla actual sin que gestiones nada.

## Profundiza
- Página del widget: [Hint](/docs/ui/widgets/hint) · Fuente canónica: Capítulo 16
- Diálogos modales hermanos: [Confirmar con Alert](/docs/cookbook/ui/confirmar-com-alert) · [Menú de acciones](/docs/cookbook/ui/menu-de-acoes)
