Como pedir confirmação com Alert
Propósito. Exibir um diálogo modal com título, mensagem e um ou mais botões, e executar uma ação conforme o botão pressionado. Use para confirmações destrutivas (“Excluir?”), avisos que exigem ciência do usuário, ou escolhas simples.
APIs usadas
new Alert(String title, String message, String... buttonTexts)— cria o alerta. Os textos dos botões são passados no construtor (índice 0, 1, 2…). Se nenhum for informado, usa"OK".alert.buttonAction(int index, Component.Action action)— registra o callback do botão daquele índice. Não existeaddButton; os botões já foram declarados no construtor.alert.show()— exibe o diálogo (herdado deWindow).alert.getStyle().fadeBackground(int alpha)— escurece o fundo atrás do alerta (0–255).getStyle()retorna aWindowStyledo alerta.alert.getButton(int index)— retorna oButtondaquele índice (disponível apósshow()).
Comportamento não óbvio: se você não registrar
buttonActionpara um botão, ele apenas fecha o alerta (hide()) ao ser tocado. Então, para “Cancelar”, muitas vezes você nem precisa de callback.
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());
// Botão-gatilho: abre o Alert ao ser tocado
Button btn = new Button("Excluir registro");
btn.onAction(origin ->
{
Alert alert = new Alert(
"Excluir registro",
"Esta ação não pode ser desfeita. Deseja continuar?",
"Cancelar", // índice 0
"Excluir"); // índice 1
// Escurece o fundo (opcional, mas recomendado para modais destrutivos)
alert.getStyle().fadeBackground(150);
// Botão 0 (Cancelar) sem callback → só fecha.
// Botão 1 (Excluir) executa a ação e fecha:
alert.buttonAction(1, o ->
{
excluirRegistro();
alert.hide();
});
alert.show();
});
add(LAY_FILL, btn);
}
private void excluirRegistro()
{
// ... sua lógica de exclusão ...
}
}
O trecho abaixo mostra só o miolo. Para rodar, coloque-o no esqueleto
MainWindowacima.
Trecho mínimo
Alert alert = new Alert(
"Excluir registro",
"Esta ação não pode ser desfeita. Deseja continuar?",
"Cancelar", // índice 0
"Excluir"); // índice 1
// Escurece o fundo (opcional, mas recomendado para modais destrutivos)
alert.getStyle().fadeBackground(150);
// Botão 0 (Cancelar) sem callback → só fecha.
// Botão 1 (Excluir) executa a ação e fecha:
alert.buttonAction(1, origin ->
{
excluirRegistro();
alert.hide();
});
alert.show();
Nota de verificação (código 2026). Confirmado na fonte: construtor
Alert(title, message, String... buttonTexts)+buttonAction(int, Action). O layout dos botões (iOS/Material/Flutter) é decidido pelaAlertStyledoSkinativo — troque oSkin(ou usealert.skin(new IOSSkin())) para mudar o visual sem alterar o código de lógica. A largura/altura do alerta é auto-calculada a partir do título, mensagem e botões.
Aprofunde-se
- Página do widget: Alert · Fonte canônica: Capítulo 16
- Receitas irmãs: Menu de ações (ActionSheet) · Mostrar um Hint