This page was machine-translated from Portuguese and may contain errors. The Portuguese version is canonical.
Alert
Alert is CrossFly’s modal dialog box — the equivalent of a MessageBox/AlertDialog. It shows a title, a message (with automatic word-wrap) and one or more action buttons laid out in rows. Each button can have its own callback; without a callback, the button just closes the dialog. The visuals (colors, fonts, button layout) come from the active Skin.
🟢 · Package:
dev.crossfly.ui· Extends:Window· Style:AlertStyle+WindowStyle
When to use
- Confirmations that require user acknowledgment (delete? save? discard?).
- Simple yes/no choices or a message that needs an “OK”.
When NOT to use
- Passive and ephemeral feedback (success/error/status) → use
Hint. - Contextual action list over an item (share/edit/delete) → use
ActionSheet.
Appearance
A centered card with the title at the top, the message in the middle and a row of buttons at the bottom. By default the background is not dimmed — adjust WindowStyle.fadeBackground for the classic modal effect.
Complete example (copy, paste and run)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** Runnable main screen. Point the launcher (classname) and run: 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");
// Darkened background to reinforce the modality (alpha 0..255)
WindowStyle ws = a.getStyle();
ws.fadeBackground(150);
// Button 0 = Delete -> executes, closes and gives feedback
a.buttonAction(0, origin ->
{
a.hide();
Hint.show("Item excluído", 2000);
});
// Button 1 = Cancel: no callback -> default already calls hide()
a.show();
});
add(LAY_AUTO, abrir);
}
}
The snippets below show only the core (what goes inside
onShow()). To run them, place them in theMainWindowskeleton above.
Basic usage
// buttonTexts is optional varargs — if empty/null, becomes {"OK"}
Alert a = new Alert("Aviso", "Operação concluída com sucesso.", "OK");
a.show();
Constructors
| Constructor | Description |
|---|---|
Alert(String title, String message, String... buttonTexts) |
title can be "" (visually hides the title). buttonTexts optional; empty/null → {"OK"}. |
⚠️ There is no static
Alert.show(...)nor a constructor that fires a callback. Always instantiate withnew Alert(...), register the per-button callbacks and callshow().
Properties and customization
| Property / method | Type | Default | What it does |
|---|---|---|---|
style() |
AlertStyle |
skin | Returns the current AlertStyle. |
style(AlertStyle) |
fluent | — | Sets a custom AlertStyle. |
style().buttonLayout(...) |
IOS/FLUTTER/MATERIAL |
MATERIAL |
Button layout style. |
style().maxButtonsPerRow(int) |
int |
skin | Buttons per row; extras wrap to new rows. |
skin(Skin) |
fluent | — | Swaps the skin and refreshes the AlertStyle. |
getButton(int index) |
Button |
— | Button after show() (before that, null). |
getAutoWidth() / getAutoHeight() |
int |
— | Computed dimensions. |
Callbacks and events
| Callback | When it fires |
|---|---|
buttonAction(int index, Component.Action action) |
on tapping the button at index index (0-based). |
⚠️ The response does NOT come through
show(onAnswer).AlertextendsWindow, notPicker— andWindow.hide()only deliversonAnswerwhenthis instanceof Picker. So, to react to each button, usebuttonAction(index, action). There is nogetAnswer()onAlert.
The callback type is Component.Action, whose method is void run(Component origin) — the lambda body does not return a value (no return null;).
States
- Button without a registered callback → receives the default action
hide()(closes the dialog). - Button with a callback → runs the callback; if the callback does not close it, the dialog stays open (call
a.hide()yourself). - “Back” gesture → honored if
WindowStyle.canHide(defaulttrue).
Confirmation with dimmed background
Alert confirm = new Alert("Excluir item",
"Tem certeza que deseja excluir este item? Esta ação não pode ser desfeita.",
"Excluir", "Cancelar");
// Reinforces the modality by darkening the background (alpha 0..255)
WindowStyle ws = confirm.getStyle();
ws.fadeBackground(150);
// Button 0 = Delete -> executes, closes and gives feedback
confirm.buttonAction(0, origin ->
{
excluirItem();
confirm.hide();
Hint.show("Item excluído", 2000);
});
// Button 1 = Cancel: no callback -> default already calls hide()
confirm.show();
Choose the button layout
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();
Best practices
- Use it for decisions that require acknowledgment. For passive feedback, prefer
Hint. - Keep few buttons — too many wrap into rows and make the dialog tall.
- Combine with
fadeBackgroundwhenever you want the classic modal effect.
Common mistakes
- Expecting a response via
show(onAnswer)— that is exclusive toPicker. RegisterbuttonAction(...). - Accessing
getButton(i)beforeshow()— the buttons are created inonAddand returnnullbefore that. - Making the
buttonActionlambda return a value —Action.run(...)isvoid.
See also
- Area guide:
ui/· Recipes:cookbook/ - Related components:
ActionSheet·Hint