IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Problème désactivation d'un ButtonType (Dialogs)


Sujet :

JavaFX

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur projet
    Inscrit en
    Juin 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 46
    Points : 43
    Points
    43
    Par défaut Problème désactivation d'un ButtonType (Dialogs)
    Bonjour,
    Je développe un logiciel qui utilise les boîtes de dialogue désormais disponibles dans Java (Alert).
    Dans le contenu de cette boîte de dialogue, je charge une liste d'éléments dans une 'ListView'. Dans certain cas, l’utilisateur doit être amené à sélectionner plusieurs éléments dans cette liste.
    Je ne parviens pas à faire en sorte que le bouton d’exécution soit rendu inactif tant que l'utilisateur n'a pas sélectionné le bon nombre d'éléments. En effet, les boutons de type 'ButtonType' qui sont utilisés dans ma boîte de dialogue n'ont pas de méthode .setDisable() ou de méthode équivalente d'implémentée comme c'est la cas pour des boutons classiques.

    Comme j'utilise d'autres boîtes de dialogues dans mon logiciel, j'aimerai passer par les boîtes de dialogue implémentées dans Java et ne pas avoir à en générer une nouvelle pour conserver une homogénéité dans le rendu graphique graphique de mon logiciel.

    Voici la manière dont j'ai généré ma boîte de dialogue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Alert alert = new Alert(AlertType.CONFIRMATION);
    alert.setTitle("Warning Dialog");
    alert.setHeaderText("Look, a Warning Dialog");
    Label label = new Label();
    label.setText("Select in the following list the "+
    			('[nbre de valeures à sélectionner]')
    			+" compounds to suppress !"+"\n"+"(For multiple selection, please stay the 'Ctrl' key pressed during the selection).");
    
    ListView<String> produitsListView = new ListView<String>();
    produitsListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    produitsListView.setItems(reaction.getNomEspecesProduitsList());
    
    ObservableList<String> selectedItems =  FXCollections.observableArrayList();
    
    produitsListView.setOnMouseClicked(new EventHandler<Event>() {
    	 @Override
    	 public void handle(Event event) {
    		 selectedItems.clear();
    		 selectedItems.addAll(produitsListView.getSelectionModel().getSelectedItems());
    	 }
    });
    
    VBox vBox = new VBox();
    vBox.setSpacing(20);
    vBox.setPadding(new Insets(20, 20, 20, 20));
    vBox.getChildren().setAll(label, produitsListView);
    
    alert.getDialogPane().setContent(vBox);
    
    ButtonType deleteButtonType = new ButtonType("Delete", ButtonData.APPLY);
    ButtonType cancelButtonType = new ButtonType("Cancel", ButtonData.CANCEL_CLOSE);
    
    alert.getButtonTypes().setAll(cancelButtonType, deleteButtonType);
    
    Optional<ButtonType> result = alert.showAndWait();
    if (result.get() == deleteButtonType){
    	 // On procéde à la suppression des éléments sélectionnés uniquement si l'utilisateur a sélectionné 
    	// le bon nombre de composés dans la liste.
    	[...]
    }else{
    	 // L'utilisateur a sélectionné "Cancel". On restore la valeur de départ.
    	[...]
    }
    J'ai essayé de contourner le problème en affichant une nouvelle boîte de dialogue à l'écran pour informer l'utilisateur si le nombre d’éléments sélectionnés n'est pas le bon, mais lorsque cette nouvelle boîte se ferme, la première s'est fermée également...

    Auriez vous une idée de la manière de coder cela pour faire en sorte d'être certain que l'utilisateur ai sélectionné le bon nombre d’éléments dans la liste avant de rendre le bouton d’exécution actif et poursuivre l’exécution du programme ?

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    salut,
    pour que vous puissier désactiver et activer un button de type ButtonType, vous devez utiliser la méthode lookupButton de la classe DialogPane.
    je ne suis pas sur de ma solution, néanmoins, je vous propose d'aujouter les lignes suivantes (juste avant: Optional<ButtonType> result = alert.showAndWait(); ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Node deleteButton = alert.getDialogPane().lookupButton(deleteButtonType);
             deleteButton.setDisable(true);
            produitsListView.getSelectionModel().getSelectedItems().addListener((ListChangeListener.Change<? extends String> c) ->{
              int size = c.getList().size();
              deleteButton.setDisable(size < 3);
            });
    voir ce lien https://docs.oracle.com/javase/8/jav...ol/Dialog.html. notamment la section: Dialog Validation / Intercepting Button Actions

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur projet
    Inscrit en
    Juin 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup pour votre aide, effectivement, le fait de déclarer un bouton de la manière suivante m'a bien permis de résoudre mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final Button deleteButton = (Button) alert.getDialogPane().lookupButton(ButtonType.OK);
    J'avais pourtant lu cette partie de la doc, mais j'ai dû la passer un peu trop rapidement ...
    Toujours lire la doc.......
    Encore merci....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème désactivation bouton
    Par Florian.L dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/04/2010, 21h46
  2. Problème d'affichage d'un Dialog
    Par xav2303 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/07/2009, 14h17
  3. Problème de désactivation de molette de la souris
    Par Lemnear dans le forum Access
    Réponses: 11
    Dernier message: 24/07/2006, 11h20
  4. problème avec la boite de dialog d'impression
    Par hrp dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/01/2005, 16h30
  5. Désactiver la sql server login dialog box
    Par romainw dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/07/2004, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo