2017-09-28 3 views
0

Sur chaque scène, j'ai plusieurs toggleGroups avec deux boutons radio chacun. Peu importe quel RadioButton sur quelle scène je sélectionne en premier, l'auditeur ne l'attrapera pas. Au lieu de sauvegarder les données de l'utilisateur, il est toujours nul. Si je l'appuie une deuxième fois, cela fonctionne.JavaFX: RadioButton ne modifie pas les données utilisateur au premier clic

Lorsque je change de scène, c'est toujours la même chose. L'écouteur n'écoute pas la première action.

Est-ce un bug connu? Je sauve le userData comme ceci:

@FXML private RadioButton rbCheck11; @FXML private RadioButton rbCheck12; 
@FXML private ToggleGroup group1; 
public static String[] values = new String[326]; 

@FXML 
private void testing() { 
rbCheck11.setUserData(1); rbCheck12.setUserData(0); 
group1.selectedToggleProperty().addListener((observable, oldValue, newValue) -> { 
     if (group1.getSelectedToggle() != null){ 
      values[0] = group1.getSelectedToggle().getUserData().toString(); 
     } 
    }); 
} 

Répondre

1

Dans le fichier FXML vous connectez un rappel avec testing():

@FXML 
private void testing() { ... attach selectedToggleProperty of the ToggleGroup ... } 

Vous ne partage pas le FXML, il est donc juste une supposition, que par exemple, vous définissez onAction des RadioButton s à testing:

<RadioButton fx:id="rbCheck11" layoutX="121.0" layoutY="115.0" mnemonicParsing="false" 
    onAction="#testing" text="RadioButton"> 
    <toggleGroup> 
     <ToggleGroup fx:id="group1" /> 
    </toggleGroup> 
</RadioButton> 
<RadioButton fx:id="rbCheck12" layoutX="127.0" layoutY="166.0" mnemonicParsing="false" 
    onAction="#testing" text="RadioButton" toggleGroup="$group1" /> 

Dans ce cas testing ne seront exécutés que, si vous click d sur l'un des RadioButton s.

Et tant que testing attache l'écouteur sur le selectedProperty du ToggleGroup, l'écouteur sera exécuté uniquement lors du changement de sélection.

Encore pire, chaque pression sur le bouton radio attachera un nouvel écouteur, de sorte que vous aurez de plus en plus d'écoute sur le groupe.

Pour résoudre ce problème, déplacer le corps de testing à la méthode initialize du contrôleur, de l'attacher au groupe une seule fois, dès que le fichier FXML est chargé. Ensuite, retirez complètement testing du contrôleur.

+0

Génial, ça marche! J'aurais aimé avoir demandé plus tôt - m'aurait épargné beaucoup de temps en réglant tous les RadioButtons surAction. – jeypeu