Como pedir confirmação antes de uma ação destrutiva
Propósito. Antes de excluir/descartar algo, mostre um Alert com dois botões (ex.: “Cancelar” e “Excluir”). Só execute a ação destrutiva no callback do botão de confirmação.
APIs usadas
new Alert(String title, String message, String... buttonTexts)— cria o diálogo.Alerté umaWindow; os botões seguem oSkinativo.Alert.buttonAction(int index, Component.Action action)— define a ação de um botão (índice 0-based). Sem ação, o botão apenas fecha (hide()).Alert.show()— empilha o diálogo (push modal).WindowStyle.fadeBackground(int alpha)— escurece as janelas abaixo (0–255). Obtenha o style viagetStyle().Hint.show(String message, int delayMs)— mostra um toast breve de feedback.
Exemplo completo (copiar, colar e rodar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** Tela principal executável: um botão dispara o Alert de confirmação. */
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");
// Escurece o fundo (0..255). getStyle() do Alert é um WindowStyle.
((WindowStyle) alert.getStyle()).fadeBackground(150);
// Índice 0 = "Cancelar": sem buttonAction, o botão já fecha o Alert sozinho.
// Índice 1 = "Excluir": ação destrutiva + feedback.
alert.buttonAction(1, e ->
{
excluirPedido(); // ação destrutiva
alert.hide(); // fecha o diálogo
Hint.show("Pedido excluído", 1500);
});
alert.show();
}
private void excluirPedido()
{
// ... sua lógica de exclusão ...
}
}
O trecho abaixo mostra só o miolo. Para rodar, coloque-o no esqueleto
MainWindowacima.
Trecho mínimo
// verificado na fonte: 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");
// Escurece o fundo (0..255). getStyle() do Alert é um WindowStyle.
((WindowStyle) alert.getStyle()).fadeBackground(150);
// Índice 0 = "Cancelar": sem buttonAction, o botão já fecha o Alert sozinho.
// Índice 1 = "Excluir": ação destrutiva + feedback.
alert.buttonAction(1, e ->
{
excluirPedido(); // ação destrutiva
alert.hide(); // fecha o diálogo
Hint.show("Pedido excluído", 1500);
});
alert.show();
Detalhes que evitam surpresa:
- Se você não definir
buttonActionpara um botão, o Alert associaonAction(e -> hide())— o botão fecha o diálogo sem mais nada. Por isso “Cancelar” normalmente dispensabuttonAction. - Coloque a ação destrutiva sempre no botão de confirmação (aqui, índice 1), nunca como comportamento padrão.
fadeBackgroundrecebe alpha 0–255 (não 0xAARRGGBB). 150 dá um escurecimento perceptível sem apagar o conteúdo.
Aprofunde-se
- Diálogos e modais
- Receita irmã: Abrir e fechar uma tela
Esta página foi útil?Obrigado pelo feedback!