Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.

Cómo pedir confirmación con Alert

Propósito. Mostrar un diálogo modal con título, mensaje y uno o más botones, y ejecutar una acción según el botón presionado. Úsalo para confirmaciones destructivas (“¿Eliminar?”), avisos que requieren que el usuario tome conocimiento, o elecciones simples.

APIs usadas

  • new Alert(String title, String message, String... buttonTexts) — crea la alerta. Los textos de los botones se pasan en el constructor (índice 0, 1, 2…). Si no se informa ninguno, usa "OK".
  • alert.buttonAction(int index, Component.Action action) — registra el callback del botón de ese índice. No existe addButton; los botones ya se declararon en el constructor.
  • alert.show() — muestra el diálogo (heredado de Window).
  • alert.getStyle().fadeBackground(int alpha) — oscurece el fondo detrás de la alerta (0–255). getStyle() devuelve la WindowStyle de la alerta.
  • alert.getButton(int index) — devuelve el Button de ese índice (disponible tras show()).

Comportamiento no obvio: si no registras buttonAction para un botón, este solo cierra la alerta (hide()) al ser tocado. Entonces, para “Cancelar”, muchas veces ni siquiera necesitas un callback.

Ejemplo completo (copiar, pegar y ejecutar)

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

      // Botón disparador: abre el Alert al 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

         // Oscurece el fondo (opcional, pero recomendado para modales destructivos)
         alert.getStyle().fadeBackground(150);

         // Botón 0 (Cancelar) sin callback → solo cierra.
         // Botón 1 (Excluir) ejecuta la acción y cierra:
         alert.buttonAction(1, o ->
         {
            excluirRegistro();
            alert.hide();
         });

         alert.show();
      });
      add(LAY_FILL, btn);
   }

   private void excluirRegistro()
   {
      // ... tu lógica de eliminación ...
   }
}

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

Fragmento mínimo

Alert alert = new Alert(
   "Excluir registro",
   "Esta ação não pode ser desfeita. Deseja continuar?",
   "Cancelar",   // índice 0
   "Excluir");   // índice 1

// Oscurece el fondo (opcional, pero recomendado para modales destructivos)
alert.getStyle().fadeBackground(150);

// Botón 0 (Cancelar) sin callback → solo cierra.
// Botón 1 (Excluir) ejecuta la acción y cierra:
alert.buttonAction(1, origin ->
{
   excluirRegistro();
   alert.hide();
});

alert.show();

Nota de verificación (código 2026). Confirmado en la fuente: constructor Alert(title, message, String... buttonTexts) + buttonAction(int, Action). El layout de los botones (iOS/Material/Flutter) lo decide la AlertStyle del Skin activo — cambia el Skin (o usa alert.skin(new IOSSkin())) para modificar el aspecto sin alterar el código de la lógica. El ancho/alto de la alerta se calcula automáticamente a partir del título, el mensaje y los botones.

Profundiza

¿Te resultó útil esta página?