84 votes

Comment créer et afficher un dialogue commun (erreur, avertissement, confirmation) en JavaFX 2.0 ?

Comment créer et afficher des boîtes de dialogue courantes (erreur, avertissement, confirmation) dans JavaFX 2.0 ? Je ne trouve pas de classes "standard" telles que Dialog , DialogBox , Message ou quelque chose comme ça.

0 votes

Vous souhaitez peut-être jeter un coup d'œil sur un projet à usage privé : github.com/4ntoine/JavaFxDialog/wiki

0 votes

Report des dialogues de JavaFX 8 vers JDK7 : github.com/BertelSpA/openjfx-dialogs-jdk7

51voto

Sergey Grinev Points 15565

EDIT : la prise en charge des dialogues a été ajoutée à JavaFX, cf. https://stackoverflow.com/a/28887273/1054140


Il n'y a pas eu de support de dialogue commun au cours d'une année 2011. Vous deviez l'écrire vous-même en créant new Stage() :

Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);

VBox vbox = new VBox(new Text("Hi"), new Button("Ok."));
vbox.setAlignment(Pos.CENTER);
vbox.setPadding(new Insets(15));

dialogStage.setScene(new Scene(vbox));
dialogStage.show();

11 votes

Hmm, peut-être qu'ils apparaîtront plus tard comme le FileChooser ? Ou bien ils souhaitent que chaque développeur réinvente la roue) ?

9 votes

Dialogues standard prêts projet pour JavaFX 2.0. Fonctionne pour moi

2 votes

Le support officiel de la plateforme pour le dialogue d'alerte peut être suivi via javafx-jira.kenai.com/browse/RT-12643

40voto

jewelsea Points 40435

Mise à jour

Les boîtes de dialogue standard officielles seront introduites dans JavaFX dans la version 8u40, dans le cadre de l'implémentation de l'initiative RT-12643 . Ils devraient être disponibles sous forme de version finale vers le mois de mars 2015 et sous forme de code source dans le courant de l'année 2015. le référentiel de développement JavaFX maintenant.

En attendant, vous pouvez utiliser la solution ControlsFX ci-dessous...


ContrôlesFX est la bibliothèque tierce standard de facto pour la prise en charge des dialogues courants dans JavaFX (erreur, avertissement, confirmation, etc.).

Il existe de nombreuses autres bibliothèques tierces disponibles qui fournissent un support de dialogue commun, comme indiqué dans d'autres réponses, et vous pouvez créer vos propres dialogues assez facilement en utilisant l'exemple de code dans la réponse de Sergey.

Cependant, je crois que ContrôlesFX fournissent facilement les boîtes de dialogue JavaFX standard de meilleure qualité disponibles à l'heure actuelle. Voici quelques échantillons de la Documentation de ControlsFX .

standard dialog

command links

1 votes

Voté en haut, mais les liens de documentation ne sont pas apparents sur le site lié. Le site indique également que maven 8.0.2 est disponible, mais pour moi, cela ne fonctionne qu'avec maven 8.0.1 et j'obtiens un message "Unsupported major.minor version 52.0" lors de l'appel à Dialogs.create().message("great").showConfirm() ;

2 votes

Les liens vers la documentation fonctionnent bien pour moi. La documentation indique actuellement "Note importante : ControlsFX ne fonctionnera que sur JavaFX 8.0 b102 ou plus récent". Il est probable que vous essayez d'exécuter ControlsFX avec une version de Java incompatible. Si vous rencontrez d'autres problèmes, vous devez les consigner dans la base de données de l'éditeur. Suivi des problèmes de ControlsFX .

0 votes

Bonne chance pour trouver la documentation de cette bibliothèque.

13voto

Sergey a raison, mais si vous avez besoin d'obtenir une réponse de votre ou vos dialogues maison pour l'évaluer dans le même bloc de code qui l'a invoqué, vous devez utiliser .showAndWait(), et non .show(). Voici mon interprétation de quelques types de dialogues fournis par le volet d'option de Swing :

public class FXOptionPane {

public enum Response { NO, YES, CANCEL };

private static Response buttonSelected = Response.CANCEL;

private static ImageView icon = new ImageView();

static class Dialog extends Stage {
    public Dialog( String title, Stage owner, Scene scene, String iconFile ) {
        setTitle( title );
        initStyle( StageStyle.UTILITY );
        initModality( Modality.APPLICATION_MODAL );
        initOwner( owner );
        setResizable( false );
        setScene( scene );
        icon.setImage( new Image( getClass().getResourceAsStream( iconFile ) ) );
    }
    public void showDialog() {
        sizeToScene();
        centerOnScreen();
        showAndWait();
    }
}

static class Message extends Text {
    public Message( String msg ) {
        super( msg );
        setWrappingWidth( 250 );
    }
}

public static Response showConfirmDialog( Stage owner, String message, String title ) {
    VBox vb = new VBox();
    Scene scene = new Scene( vb );
    final Dialog dial = new Dialog( title, owner, scene, "res/Confirm.png" );
    vb.setPadding( new Inset(10,10,10,10) );
    vb.setSpacing( 10 );
    Button yesButton = new Button( "Yes" );
    yesButton.setOnAction( new EventHandler<ActionEvent>() {
        @Override public void handle( ActionEvent e ) {
            dial.close();
            buttonSelected = Response.YES;
        }
    } );
    Button noButton = new Button( "No" );
    noButton.setOnAction( new EventHandler<ActionEvent>() {
        @Override public void handle( ActionEvent e ) {
            dial.close();
            buttonSelected = Response.NO;
        }
    } );
    BorderPane bp = new BorderPane();
    HBox buttons = new HBox();
    buttons.setAlignment( Pos.CENTER );
    buttons.setSpacing( 10 );
    buttons.getChildren().addAll( yesButton, noButton );
    bp.setCenter( buttons );
    HBox msg = new HBox();
    msg.setSpacing( 5 );
    msg.getChildren().addAll( icon, new Message( message ) );
    vb.getChildren().addAll( msg, bp );
    dial.showDialog();
    return buttonSelected;
}

public static void showMessageDialog( Stage owner, String message, String title ) {
    showMessageDialog( owner, new Message( message ), title );
}
public static void showMessageDialog( Stage owner, Node message, String title ) {
    VBox vb = new VBox();
    Scene scene = new Scene( vb );
    final Dialog dial = new Dialog( title, owner, scene, "res/Info.png" );
    vb.setPadding( new Inset(10,10,10,10) );
    vb.setSpacing( 10 );
    Button okButton = new Button( "OK" );
    okButton.setAlignment( Pos.CENTER );
    okButton.setOnAction( new EventHandler<ActionEvent>() {
        @Override public void handle( ActionEvent e ) {
            dial.close();
        }
    } );
    BorderPane bp = new BorderPane();
    bp.setCenter( okButton );
    HBox msg = new HBox();
    msg.setSpacing( 5 );
    msg.getChildren().addAll( icon, message );
    vb.getChildren().addAll( msg, bp );
    dial.showDialog();
}

}

1 votes

J'ai essayé d'exécuter votre classe mais le compilateur s'étouffe sur Layout - apparemment les constantes utilisées. Quel import avez-vous utilisé ?

0 votes

Comment obtenir la réponse, c'est-à-dire quel bouton a été sélectionné ? La variable membre buttonSelected est privée.

0 votes

J'ai réussi à le compiler et j'ai rendu buttonSelected public mais l'appeler comme ceci n'affiche rien. ` Stage stage = new Stage(StageStyle.TRANSPARENT) ; FXOptionPane.showConfirmDialog(stage, "Do you wish to disconnect ?", "my title") ; `

4voto

Khaled Lela Points 517

Mise à jour : JavaFX 8u40 comprend des boîtes de dialogue et des alertes simples ! qui explique comment utiliser les dialogues officiels de JavaFX !


3voto

Rajeev Gupta Points 41

Vous pouvez donner à la boîte de dialogue qui est donnée par le Projet de contrôles d'interface utilisateur JavaFX . Je pense que cela vous aidera

Dialogs.showErrorDialog(Stage object, errorMessage,  "Main line", "Name of Dialog box");
Dialogs.showWarningDialog(Stage object, errorMessage,  "Main line", "Name of Dialog box");

1 votes

Il n'y a pas de telles classes de dialogue dans JavaFX 2.x

0 votes

Javafx-dialogs-0.0.3.jar Vous pouvez télécharger ce jar et ensuite vous pouvez travailler avec la même boîte de dialogue.

0 votes

J'ai modifié votre message pour établir un lien vers le projet de dialogue JavaFX tiers auquel Rajeev fait référence. Je pense que c'est une ancienne version des boîtes de dialogue de ContrôlesFX .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X