JavaFX 2.1 MessageBox

Bonne journée!
Je développe un programme utilisant JavaFX SDK. Je voulais avoir une boîte de message comme en C #:

DialogResult rs = MessageBox.showDialog("Message Here..."); if (rs == ....) { // code } 

Je veux avoir une telle fonctionnalité en utilisant JavaFX SDK. Les réponses sont très appréciées.

Mettre à jour

Depuis Java8u40, les bibliothèques JavaFX principales incluent une fonctionnalité de boîte de dialog. Reportez-vous à la documentation pour les classes suivantes:

  • Alerte
  • Dialogue (et sous-classes)

Réponse originale

Voici un exemple de dialog de confirmation modale . Cela fonctionne en créant une scène contenant une scène avec le contenu de la boîte de dialog, puis en appelant show () sur la scène.

Si vous souhaitez que le thread de traitement principal suspende pendant que la nouvelle scène est affichée et que vous utilisez JavaFX 2.2+, vous pouvez appeler showAndWait () plutôt que montrer. Modifié pour utiliser show and wait et simplement afficher un message et un bouton ok, le traitement devrait alors ressembler beaucoup à un C # MessageBox.

Si vous souhaitez une boîte de message de qualité professionnelle pour Java 8, je vous recommande d’utiliser les boîtes de dialog de la bibliothèque ControlsFX , qui sont une itération ultérieure des boîtes de dialog de la Sandbox de l’interface utilisateur JavaFX, décrites dans la réponse de blo0p3r.

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Alert.html

La classe Alert sous-classe la classe Dialog et prend en charge un certain nombre de types de boîtes de dialog prédéfinis qui peuvent facilement être montrés aux utilisateurs pour leur demander une réponse.

Donc, le code ressemble à quelque chose comme

 Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Message Here..."); alert.setHeaderText("Look, an Information Dialog"); alert.setContentText("I have a great message for you!"); alert.showAndWait().ifPresent(rs -> { if (rs == ButtonType.OK) { System.out.println("Pressed OK."); } }); 

MessageBox sur JavaFX 2.2 par OSS est ici

Je pense que cela vous aidera.

 MessageBox.show(primaryStage, "Message Body", "Message Title", MessageBox.ICON_INFORMATION | MessageBox.OK | MessageBox.CANCEL); 

Voici une autre alternative simple: https://sites.google.com/site/martinbaeumer/programming/open-source/fxmessagebox.

Surprise qu’il n’y ait toujours pas de boîte de message standard disponible dans JavaFX 2.2

Voici ce que j’ai finalement utilisé, qui fait partie de la Sandbox de contrôles d’interface utilisateur JavaFX, comme annoncé ici dans FX Experience:

C’est un dialog agréable et facile à utiliser. Je ne peux pas comparer avec les autres, car c’est le seul que j’ai utilisé. Aucun problème avec elle.

Le code est très concis. Ressemble à ça :

 //calling from a different controller and don't have the scene object loaded. Stage stage = (Stage)deleteButton.getScene().getWindow(); DialogResponse response = Dialogs.showConfirmDialog(stage, "Are you sure ...", "Confirm deletion","Delete?", DialogOptions.OK_CANCEL); if(response == DialogResponse.OK) { //... } 

Utilisez le namespace:

 import javafx.scene.control.Alert; 

Appeler depuis le fil principal:

 public void showAlert() { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Message Here..."); alert.setHeaderText("Look, an Information Dialog"); alert.setContentText("I have a great message for you!"); alert.showAndWait(); } 

Appeler depuis le fil principal:

 public void showAlert() { Platform.runLater(new Runnable() { public void run() { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Message Here..."); alert.setHeaderText("Look, an Information Dialog"); alert.setContentText("I have a great message for you!"); alert.showAndWait(); } }); } 

Pour le moment, j’utilise cette bibliothèque pour montrer des dialogs. Peut-être que cela peut vous être utile:

https://github.com/4ntoine/JavaFxDialog

Voici un exemple très simple: Alerte alerte = nouvelle alerte (AlertType.CONFIRMATION, “Êtes-vous sûr de vouloir continuer?”);