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

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 existe addButton; os botões já foram declarados no construtor.
  • alert.show() — exibe o diálogo (herdado de Window).
  • alert.getStyle().fadeBackground(int alpha) — escurece o fundo atrás do alerta (0–255). getStyle() retorna a WindowStyle do alerta.
  • alert.getButton(int index) — retorna o Button daquele índice (disponível após show()).

Comportamento não óbvio: se você não registrar buttonAction para 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 MainWindow acima.

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 pela AlertStyle do Skin ativo — troque o Skin (ou use alert.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

Esta página foi útil?