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

Hint

Hint é a notificação efêmera não-modal do CrossFly: aparece tipicamente perto da base da tela, mostra uma mensagem curta e some sozinha após um tempo (com fade). Não bloqueia a interação com o resto da UI. É o substituto modernizado do antigo Toast — mesma API — e também cobre o caso do antigo ToolTip (ambos removidos do framework).

Hint não estende Window: é uma classe utilitária com API estática que cria internamente uma ToastWindow.

🟢 · Pacote: dev.crossfly.ui · Estende: — (utilitário estático) · Config: campos estáticos

Quando usar

  • Feedback passivo e breve: “Salvo!”, “Falha ao conectar”, “Copiado”.
  • Status transitório que não exige ação do usuário.

Quando NÃO usar

Aparência

Cápsula arredondada escura (default 0xFF303030, texto branco) centralizada horizontalmente, posicionada a ~85% da altura da tela. Surge e some com fade suave.

Exemplo completo (copiar, colar e rodar)

package com.exemplo;

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

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

      Label titulo = new Label("Toque para ver um Hint");
      add(LAY_AUTO, titulo);

      // Hint é estático: um Button dispara a notificação efêmera no onAction
      Button salvar = new Button("Salvar")
         .onAction(c -> Hint.show("Salvo com sucesso!", 2000));
      add(LAY_AUTO, salvar);

      Button falhar = new Button("Simular erro")
         .onAction(c -> Hint.show("Falha ao conectar", 2500));
      add(LAY_AUTO, falhar);
   }
}

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

Uso básico

// Mensagem visível por 2 segundos, depois some sozinha
Hint.show("Salvo com sucesso!", 2000);

API de exibição (estática)

Sobrecarga Descrição
Hint.show(String message, int delay) Posição/padding default.
Hint.show(String message, int delay, Window parentWindow) Define a janela-pai.
Hint.show(String message, int delay, Window parentWindow, Relative at, Gap innerGap) Forma completa: posição vertical (at) e padding interno (innerGap).

As duas primeiras delegam à terceira com null nos campos ausentes.

Parâmetro Tipo Significado
message String Texto. null oculta o hint atual.
delay int Milissegundos visível. INFINITE/INFINITE_NOANIM mantêm na tela.
parentWindow Window Pai opcional; default = janela do topo.
at Relative START(topo) / CENTER / END(base) ou valor relativo. null usa position.
innerGap Gap Padding interno. null usa ingap estático.

Configuração global (campos estáticos)

Toda a aparência é controlada por estáticos compartilhados — alterá-los afeta todos os hints seguintes.

Campo Tipo Default O que faz
Hint.backColor int 0xFF303030 Cor de fundo.
Hint.foreColor int WHITE Cor do texto.
Hint.position Relative Relative.ofScreen(0.85f) Posição vertical default.
Hint.ingap Gap Gap.ofFont(0.7f, 0.35f, 0.7f, 0.35f) Padding interno default.
Hint.font Font Font.get().bold() Fonte do texto.
Hint.fade int 200 Alvo de alpha no modo animado.
Hint.INFINITE int Integer.MAX_VALUE Duração infinita com animação.
Hint.INFINITE_NOANIM int Integer.MIN_VALUE Duração infinita sem animação.

Estados

  • Auto-dismiss por tempo quando delay é finito.
  • Persistente com INFINITE/INFINITE_NOANIM — precisa ser fechado manualmente com Hint.show(null, 0).
  • Hints não empilham: um novo substitui o atual.

Erro no topo, em vermelho, restaurando o estático

Hint.backColor = 0xFFB00020;
Hint.show("Falha ao salvar", 2500, null, Relative.START, null);
Hint.backColor = 0xFF303030; // restaura o default para os próximos hints

Hint persistente e remoção manual

Hint.show("Conectando...", Hint.INFINITE);
// ... quando terminar:
Hint.show(null, 0); // message == null oculta o hint atual

Padding customizado via Gap

Hint.show("Detalhes copiados", 1800, null, Relative.CENTER, Gap.ofFont(1f, 0.5f, 1f, 0.5f));

Boas práticas

  • Use para feedback passivo e breve; nunca para decisões.
  • Prefira passar at/innerGap na chamada a mutar os estáticos, para ajustes pontuais.
  • Ao mutar um estático globalmente (ex.: backColor), restaure depois para não vazar estado.

Erros comuns

  • INFINITE sem fechar — fica na tela para sempre; feche com Hint.show(null, ...).
  • Sem janela no topo (pilha vazia) — o hint simplesmente não aparece.
  • Esperar que hints se acumulem — não; o novo substitui o anterior.

Migração (Toast/ToolTip removidos)

Toast.show(...) migra 1:1 para Hint.show(...) (mesmas assinaturas e estáticos). ToolTip não tem substituto direto (não há mais press-and-hold) — use Hint posicionado com at/position se precisar de dica efêmera.

Veja também

Esta página foi útil?