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 :

Désactiver boutons lors de cliques sur autre bouton


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 233
    Par défaut Désactiver boutons lors de cliques sur autre bouton
    Bonjour,

    Débutant en JavaFX, je cherche a effectuer avec les bindings l'action suivante :

    Lorsque le btn1 est cliqué, celui ci doit devenir activé, et btn2 et btn3 doivent se réactiver.

    Voici mon code de test :

    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
    public class Boutons extends Application
    {
     
    	public static void main(String[] args)
    	{
    		launch(args);
    	}
     
    	@Override
    	public void start(Stage stage) throws Exception
    	{
    		stage.setTitle("TEST");
     
    		Button btn1 = new Button("A");
    		Button btn2 = new Button("B");
    		Button btn3 = new Button("C");
     
    		btn2.disableProperty().bind(btn1.disableProperty().not());
    		btn3.disableProperty().bind(btn1.disableProperty().not());
    		//btn1.disableProperty().bind(btn3.disableProperty().not());
     
    		btn1.setOnAction(action -> btn1.disableProperty().set(true));
    		btn2.setOnAction(action -> btn2.disableProperty().set(true));
    		btn3.setOnAction(action -> btn3.disableProperty().set(true));
     
    		HBox controls = new HBox(10);
    	    controls.getChildren().addAll(btn1, btn2, btn3);
     
    	    Scene scene = new Scene(controls);
    	    stage.setScene(scene);
    	    stage.show();
    	}
    }
    cependant j'obtiens une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: Button.disable : A bound value cannot be set.
    lorsque je reclique sur B ou C pour réactiver le bouton A. J'ai pas compris quelque chose ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    C'est normal, tu as créé un binding cyclique. Ton problème ne peut pas être résolu directement par du binding, mieux vaut passer par des listeners :

    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
    45
    46
    47
    public class Boutons extends Application {
     
        public static void main(String[] args) {
            launch(args);
        }
     
        @Override
        public void start(Stage stage) throws Exception {
            stage.setTitle("TEST");
     
            Button btn1 = new Button("A");
            Button btn2 = new Button("B");
            btn2.setDisable(true);
            Button btn3 = new Button("C");
            btn3.setDisable(true);
     
            btn1.setOnAction(new ActivationHandler(btn1, btn2, btn3));
            btn2.setOnAction(new ActivationHandler(btn2, btn1, btn3));
            btn3.setOnAction(new ActivationHandler(btn3, btn1, btn2));
     
            HBox controls = new HBox(10);
            controls.getChildren().addAll(btn1, btn2, btn3);
     
            Scene scene = new Scene(controls);
            stage.setScene(scene);
            stage.show();
        }
     
        private class ActivationHandler implements EventHandler<ActionEvent> {
     
            private Button source;
            private Button[] targets;
     
            public ActivationHandler(Button source, Button... targets) {
                this.source = source;
                this.targets = targets;
            }
     
            @Override
            public void handle(ActionEvent event) {
                source.setDisable(true);
                for (final Button target : targets) {
                    target.setDisable(false);
                }
            }
        }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 233
    Par défaut
    Bien compris. Merci pour la réponse.

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

Discussions similaires

  1. Affichage info bulle sur un bouton lors du clique
    Par jameson dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 21/05/2014, 15h21
  2. Problème pour réaliser une action lors du clique sur le bouton menu ou back
    Par FunckyWarrior dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 29/05/2013, 14h39
  3. Réponses: 1
    Dernier message: 24/02/2013, 08h47
  4. Réponses: 2
    Dernier message: 18/10/2011, 17h10
  5. action lors d'un clique sur un bouton
    Par nixonne dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 29/06/2006, 01h53

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