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 antes de una acción destructiva

Propósito. Antes de eliminar/descartar algo, muestra un Alert con dos botones (ej.: “Cancelar” y “Eliminar”). Ejecuta la acción destructiva solo en el callback del botón de confirmación.

APIs usadas

  • new Alert(String title, String message, String... buttonTexts) — crea el diálogo. Alert es una Window; los botones siguen el Skin activo.
  • Alert.buttonAction(int index, Component.Action action) — define la acción de un botón (índice 0-based). Sin acción, el botón solo cierra (hide()).
  • Alert.show() — apila el diálogo (push modal).
  • WindowStyle.fadeBackground(int alpha) — oscurece las ventanas de abajo (0–255). Obtén el style mediante getStyle().
  • Hint.show(String message, int delayMs) — muestra un toast breve de feedback.

Ejemplo completo (copiar, pegar y ejecutar)

package com.exemplo;

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

/** Pantalla principal ejecutable: un botón dispara el Alert de confirmación. */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      add(new Label("Pedido #1234"));
      add(new Button("Excluir pedido").onAction(e -> confirmarExclusao()));
   }

   private void confirmarExclusao()
   {
      Alert alert = new Alert("Excluir pedido", "Esta ação não pode ser desfeita.", "Cancelar", "Excluir");

      // Oscurece el fondo (0..255). getStyle() del Alert es un WindowStyle.
      ((WindowStyle) alert.getStyle()).fadeBackground(150);

      // Índice 0 = "Cancelar": sin buttonAction, el botón ya cierra el Alert por sí solo.
      // Índice 1 = "Excluir": acción destructiva + feedback.
      alert.buttonAction(1, e ->
      {
         excluirPedido();                 // acción destructiva
         alert.hide();                    // cierra el diálogo
         Hint.show("Pedido excluído", 1500);
      });

      alert.show();
   }

   private void excluirPedido()
   {
      // ... 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

// verificado en la fuente: Alert.buttonAction(idx, Action); WindowStyle.fadeBackground(int 0-255); Hint.show(msg, ms)
Alert alert = new Alert("Excluir pedido", "Esta ação não pode ser desfeita.", "Cancelar", "Excluir");

// Oscurece el fondo (0..255). getStyle() del Alert es un WindowStyle.
((WindowStyle) alert.getStyle()).fadeBackground(150);

// Índice 0 = "Cancelar": sin buttonAction, el botón ya cierra el Alert por sí solo.
// Índice 1 = "Excluir": acción destructiva + feedback.
alert.buttonAction(1, e ->
{
   excluirPedido();                 // acción destructiva
   alert.hide();                    // cierra el diálogo
   Hint.show("Pedido excluído", 1500);
});

alert.show();

Detalles que evitan sorpresas:

  • Si no defines buttonAction para un botón, el Alert le asocia onAction(e -> hide()) — el botón cierra el diálogo sin hacer nada más. Por eso “Cancelar” normalmente prescinde de buttonAction.
  • Coloca la acción destructiva siempre en el botón de confirmación (aquí, índice 1), nunca como comportamiento por defecto.
  • fadeBackground recibe alpha 0–255 (no 0xAARRGGBB). 150 da un oscurecimiento perceptible sin apagar el contenido.

Profundiza

¿Te resultó útil esta página?