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
- Algo que exige decisão/confirmação → use
AlertouActionSheet.
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 esqueletoMainWindowacima.
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 comHint.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/innerGapna 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
INFINITEsem fechar — fica na tela para sempre; feche comHint.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
- Guia da área:
ui/· Receitas:cookbook/ - Componentes relacionados:
Alert·ActionSheet