Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
Alert
Alert es el cuadro de diálogo modal de CrossFly — el equivalente a un MessageBox/AlertDialog. Muestra un título, un mensaje (con ajuste de línea automático) y uno o más botones de acción dispuestos en filas. Cada botón puede tener su propio callback; sin callback, el botón solo cierra el diálogo. La apariencia (colores, fuentes, disposición de los botones) proviene del Skin activo.
🟢 · Paquete:
dev.crossfly.ui· Extiende:Window· Estilo:AlertStyle+WindowStyle
Cuándo usar
- Confirmaciones que exigen reconocimiento del usuario (¿eliminar? ¿guardar? ¿descartar?).
- Elecciones simples sí/no o un mensaje que necesita un “OK”.
Cuándo NO usar
- Feedback pasivo y efímero (éxito/error/estado) → usa
Hint. - Lista de acciones contextuales sobre un elemento (compartir/editar/eliminar) → usa
ActionSheet.
Apariencia
Tarjeta centrada con el título arriba, el mensaje en el medio y una fila de botones en la base. Por defecto el fondo no se oscurece — ajusta WindowStyle.fadeBackground para el efecto modal clásico.
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());
Button abrir = new Button("Abrir alerta");
abrir.onAction(c ->
{
Alert a = new Alert("Excluir item",
"Tem certeza que deseja excluir este item? Esta ação não pode ser desfeita.",
"Excluir", "Cancelar");
// Fondo oscurecido para reforzar la modalidad (alpha 0..255)
WindowStyle ws = a.getStyle();
ws.fadeBackground(150);
// Botón 0 = Excluir -> ejecuta, cierra y da feedback
a.buttonAction(0, origin ->
{
a.hide();
Hint.show("Item excluído", 2000);
});
// Botón 1 = Cancelar: sin callback -> el default ya llama a hide()
a.show();
});
add(LAY_AUTO, abrir);
}
}
Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutarlos, colócalos en el esqueletoMainWindowde arriba.
Uso básico
// buttonTexts es varargs opcional — si está vacío/null, se vuelve {"OK"}
Alert a = new Alert("Aviso", "Operação concluída com sucesso.", "OK");
a.show();
Constructores
| Constructor | Descripción |
|---|---|
Alert(String title, String message, String... buttonTexts) |
title puede ser "" (oculta visualmente el título). buttonTexts opcional; vacío/null → {"OK"}. |
⚠️ No existe
Alert.show(...)estático ni constructor que dispare callback. Instancia siempre connew Alert(...), registra los callbacks por botón y llama ashow().
Propiedades y personalización
| Propiedad / método | Tipo | Por defecto | Qué hace |
|---|---|---|---|
style() |
AlertStyle |
skin | Devuelve el AlertStyle actual. |
style(AlertStyle) |
fluido | — | Define un AlertStyle personalizado. |
style().buttonLayout(...) |
IOS/FLUTTER/MATERIAL |
MATERIAL |
Estilo de disposición de los botones. |
style().maxButtonsPerRow(int) |
int |
skin | Botones por fila; los excedentes saltan a nuevas filas. |
skin(Skin) |
fluido | — | Cambia el skin y reactualiza el AlertStyle. |
getButton(int index) |
Button |
— | Botón tras show() (antes de eso, null). |
getAutoWidth() / getAutoHeight() |
int |
— | Dimensiones calculadas. |
Callbacks y eventos
| Callback | Cuándo se dispara |
|---|---|
buttonAction(int index, Component.Action action) |
al tocar el botón de índice index (0-based). |
⚠️ La respuesta NO llega por
show(onAnswer).AlertextiendeWindow, noPicker— yWindow.hide()solo entregaonAnswercuandothis instanceof Picker. Por tanto, para reaccionar a cada botón usabuttonAction(index, action). No haygetAnswer()en elAlert.
El tipo del callback es Component.Action, cuyo método es void run(Component origin) — el cuerpo del lambda no devuelve valor (nada de return null;).
Estados
- Botón sin callback registrado → recibe la acción por defecto
hide()(cierra el diálogo). - Botón con callback → ejecuta el callback; si el callback no cierra, el diálogo sigue abierto (llama tú mismo a
a.hide()). - Gesto “atrás”/back → respetado si
WindowStyle.canHide(por defectotrue).
Confirmación con fondo oscurecido
Alert confirm = new Alert("Excluir item",
"Tem certeza que deseja excluir este item? Esta ação não pode ser desfeita.",
"Excluir", "Cancelar");
// Refuerza la modalidad oscureciendo el fondo (alpha 0..255)
WindowStyle ws = confirm.getStyle();
ws.fadeBackground(150);
// Botón 0 = Excluir -> ejecuta, cierra y da feedback
confirm.buttonAction(0, origin ->
{
excluirItem();
confirm.hide();
Hint.show("Item excluído", 2000);
});
// Botón 1 = Cancelar: sin callback -> el default ya llama a hide()
confirm.show();
Elegir la disposición de los botones
Alert a = new Alert("Salvar", "Deseja salvar as alterações?", "Salvar", "Descartar");
a.style().buttonLayout(AlertStyle.ButtonLayout.IOS) // IOS / FLUTTER / MATERIAL
.maxButtonsPerRow(2);
a.show();
Buenas prácticas
- Usa para decisiones que exigen reconocimiento. Para feedback pasivo, prefiere
Hint. - Mantén pocos botones — muchos saltan a filas y hacen el diálogo alto.
- Combina con
fadeBackgroundsiempre que quieras el efecto modal clásico.
Errores comunes
- Esperar respuesta vía
show(onAnswer)— eso es exclusivo dePicker. RegistrabuttonAction(...). - Acceder a
getButton(i)antes deshow()— los botones se crean enonAddy devuelvennullantes de eso. - Hacer que el lambda de
buttonActiondevuelva valor —Action.run(...)esvoid.
Ver también
- Guía del área:
ui/· Recetas:cookbook/ - Componentes relacionados:
ActionSheet·Hint