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 existeaddButton; los botones ya se declararon en el constructor.alert.show()— muestra el diálogo (heredado deWindow).alert.getStyle().fadeBackground(int alpha)— oscurece el fondo detrás de la alerta (0–255).getStyle()devuelve laWindowStylede la alerta.alert.getButton(int index)— devuelve elButtonde ese índice (disponible trasshow()).
Comportamiento no obvio: si no registras
buttonActionpara 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
MainWindowde 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 laAlertStyledelSkinactivo — cambia elSkin(o usaalert.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
- Página del widget: Alert · Fuente canónica: Capítulo 16
- Recetas hermanas: Menú de acciones (ActionSheet) · Mostrar un Hint