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 :

bind javafx textField textProperty à une méthode variante


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut bind javafx textField textProperty à une méthode variante
    j'ai une petite formule de type F*D*G où chaque lettre correspond à une propriété qui varie entre 4 valeurs, voici l'interface que j'ai prévu pour celà

    Nom : 2016-12-23_12-37-05.jpg
Affichages : 1095
Taille : 27,0 Ko

    la valeur finale de ma petite formule je l'affiche dans un textField txtCrit, donc j'ai besoin d'attacher avec un bind la valeur du contenu de ce textField à la valeur retourné d'une méthode qui fait le calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @FXML private ToggleGroup frequence;
    @FXML private ToggleGroup gravite;
    @FXML private ToggleGroup detection;
    @FXML private JFXTextField txtCriticite;
     
     
     
    public class Defaillance {
        StringProperty criticite;
        public StringProperty criticiteProperty(){        return criticite;
        }
    }
    concernant le code qui calcule la formule
    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
     
    public void calculCriticite() {
            int f = 1;
            int g = 1;
            int d = 1;
     
            //la méthode testChoix test le radioButton selectionné pour retourner la bonne valeur
            f = testChoix(rdF1, rdF2, rdF3, rdF4); 
            g = testChoix(rdG1, rdG2, rdG3, rdG4);
            d = testChoix(rdD1, rdD2, rdD3, rdD4);
     
     
            int c = f * g * d;
            txtCriticite.setText(String.valueOf(c));
        }
    ce code affecte statiquement la valeur au textField, je veux qu'elle change si je selectionne un autre radio automatiquement sans que je clich un bouton qui appelle cette méthode

  2. #2
    Membre éclairé
    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
    Par défaut
    Je suppose que la méthode testChoix (r1, r2, r3, r4) retourne 1 Si au moins un composant radioButton est sélectionné, sinon elle retourne 0 n'est ce pas?.
    à quoi sert la multiplication: f*g*d?

  3. #3
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    désolée de vous décevoir mais elle fonctionne pas comme ça, chaque radioButton retourne un nombre de point précis et j'ai besoin de calculer la multiplication des 3 paramètres

  4. #4
    Membre éclairé
    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
    Par défaut
    Citation Envoyé par Hind4Dev Voir le message
    désolée de vous décevoir mais elle fonctionne pas comme ça, chaque radioButton retourne un nombre de point précis et j'ai besoin de calculer la multiplication des 3 paramètres
    Je vous propose d'inspirer de cet exemple (peut être ce n'est la bonne manière):
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.RadioButton;
    import javafx.scene.control.Separator;
    import javafx.scene.control.TextField;
    import javafx.scene.control.ToggleGroup;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    import javafx.beans.binding.IntegerBinding;
    import javafx.beans.property.IntegerProperty;
    import javafx.beans.property.SimpleIntegerProperty;
     
    /**
     *
     * @author
     */
    public class Test extends Application {
     
        private final IntegerProperty f = new SimpleIntegerProperty(1);
        private final IntegerProperty g = new SimpleIntegerProperty(1);
        private final IntegerProperty d = new SimpleIntegerProperty(1);
     
        public static void main(String[] args) {
            launch(args);
        }
     
        @Override
        public void start(Stage stage) throws Exception {
     
            ToggleGroup fr = new ToggleGroup();
            RadioButton r1FR = new RadioButton("trés rare");
            r1FR.setUserData(2);
            r1FR.setToggleGroup(fr);
            RadioButton r2FR = new RadioButton("faible");
            r2FR.setUserData(4);
            r2FR.setToggleGroup(fr);
            RadioButton r3FR = new RadioButton("forte");
            r3FR.setUserData(6);
            r3FR.setToggleGroup(fr);
            RadioButton r4FR = new RadioButton("occasionnelle");
            r4FR.setUserData(8);
            r4FR.setToggleGroup(fr);
            fr.selectedToggleProperty().addListener((value, oldTog, neTog) -> {
                if (neTog != null) {
                    f.set((Integer) neTog.getUserData());
     
                }
            });
     
            ToggleGroup gr = new ToggleGroup();
            RadioButton r1GR = new RadioButton("mineur");
            r1GR.setUserData(2);
            r1GR.setToggleGroup(gr);
            RadioButton r2GR = new RadioButton("majeur");
            r2GR.setUserData(4);
            r2GR.setToggleGroup(gr);
            RadioButton r3GR = new RadioButton("moyenne");
            r3GR.setUserData(6);
            r3GR.setToggleGroup(gr);
            RadioButton r4GR = new RadioButton("catastrophique");
            r4GR.setUserData(8);
            r4GR.setToggleGroup(gr);
            gr.selectedToggleProperty().addListener((value, oldTog, neTog) -> {
                if (neTog != null) {
                    g.set((Integer) neTog.getUserData());
     
                }
            });
     
            ToggleGroup de = new ToggleGroup();
            RadioButton r1DE = new RadioButton("evdente");
            r1DE.setUserData(2);
            r1DE.setToggleGroup(de);
            RadioButton r2DE = new RadioButton("exploitable");
            r2DE.setUserData(4);
            r2DE.setToggleGroup(de);
            RadioButton r3DE = new RadioButton("impossible");
            r3DE.setUserData(6);
            r3DE.setToggleGroup(de);
            RadioButton r4DE = new RadioButton("faible");
            r4DE.setUserData(8);
            r4DE.setToggleGroup(de);
            de.selectedToggleProperty().addListener((value, oldTog, neTog) -> {
                if (neTog != null) {
                    d.set((Integer) neTog.getUserData());
     
                }
            });
     
            TextField textField = new TextField();
            IntegerBinding binding = new IntegerBinding() {
                {
                    super.bind(f, d, g);
                }
     
                @Override
                protected int computeValue() {
                    return f.get() * d.get() * g.get();
                }
            };
            textField.textProperty().bind(binding.asString());
            VBox root = new VBox(r1FR, r2FR, r3FR, r4FR, new Separator(), r1GR, r2GR, r3GR, r4GR, new Separator(), r1DE, r2DE, r3DE, r4DE, new Separator(), textField);
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();
     
        }
     
    }

  5. #5
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    j'ai pu résoudre ce problème sans binding avec un listener pour chaque ToggleGroup où j'appelle la méthode de calcul à chaque fois, merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    group1.selectedToggleProperty().addListener((v, oldValue, newValue) -> {
                if (frequence.getSelectedToggle() != null) {
                    /*code */
                }
            });

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Ça serait moins casse-gueule et plus performant avec un binding comme suggéré par win_ubuntu
    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

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

Discussions similaires

  1. Bind d'une méthode template privée
    Par kidpaddle2 dans le forum Boost
    Réponses: 2
    Dernier message: 29/06/2010, 16h32
  2. Réponses: 3
    Dernier message: 04/02/2010, 11h03
  3. Binding vers une méthode
    Par Pragmateek dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 26/08/2009, 17h54
  4. Réponses: 15
    Dernier message: 28/04/2009, 07h26

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