Fenêtre modale avec JavaFx
Cette fenêtre modale (Modal window en anglais) permet de verrouiller l'écran et de porter l'attention de l'utilisateur sur le message d'alerte.
L'alerte est affichée au-dessus de la fenêtre en plein écran.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.DialogEvent;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;
/**
* JavaFX App
*/
public class App extends Application {
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage stage) {
VBox root = new VBox();
/* Élément racine avec fond noir légèrement transparent */
root.setStyle("-fx-background: rgba(0,0,0,0.7)");
Scene scene = new Scene(root, 640, 480);
stage.setScene(scene);
/* Scene et fenêtre transparentes */
scene.setFill(Color.TRANSPARENT);
stage.initStyle(StageStyle.TRANSPARENT);
/* Fenêtre en plein écran */
stage.setFullScreen(true);
/* Sans le message */
stage.setFullScreenExitHint("");
/* Avec aucune touche pour quitter le plein écran */
stage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);
stage.setOnShown(this::onWindowShown);
/* Montre la fenêtre */
stage.show();
}
/** Quand la fenêtre plein écran s'affiche */
public void onWindowShown(WindowEvent event) {
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("Fenêtre modale");
alert.setHeaderText("Une fenêtre modale");
alert.setContentText("Un message important");
Stage stage = (Stage) event.getSource();
/* Pour que l'alerte soit associée à cette fenêtre (stage) */
alert.initOwner(stage);
/* Montre l'alerte */
alert.show();
/* Quand l'alerte se ferme */
alert.setOnCloseRequest(this::onAlertClosed);
}
/** Quand l'alerte est fermée */
public void onAlertClosed(DialogEvent event) {
/* Récupération de l'alerte */
Alert alert = (Alert) event.getSource();
/* Récupération de la fenêtre */
Stage stage = (Stage) alert.getOwner();
/* Réponse de l'utilisateur pour l'alerte */
System.out.println(alert.getResult());
stage.close();
}
}
Résultat :
Commentaires
Enregistrer un commentaire