web-dev-qa-db-fra.com

Comment obtenir le bouton radio sélectionné de ToggleGroup

Je travaille sur JavaFX 8 et SceneBuilder. J'ai créé des boutons radio dans le fichier FXML et spécifié un nom toggleGroup à une liste de boutons radio. Donc, maintenant, je veux obtenir le bouton radio sélectionné de toggleGroup dans mon contrôleur, dois-je faire à nouveau tous les boutons radio en tant que champs dans le contrôleur, ou simplement l'objet toggleGroup me permettra le bouton radio sélectionné (le texte de ce bouton radio uniquement, pas l'objet bouton).

14
rjalfa
 @FXML
 ToggleGroup right; //I called it right in SceneBuilder.

plus tard quelque part dans la méthode.

RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();
24
Jack the Ripper

Disons que vous avez un groupe à bascule et trois boutons radio appartenant à ce groupe.

ToggleGroup group = new ToggleGroup();

RadioButton rb1 = new RadioButton("RadioButton1");
rb1.setUserData("RadioButton1");
rb1.setToggleGroup(group);
rb1.setSelected(true);

RadioButton rb2 = new RadioButton("RadioButton2");
rb2.setUserData("RadioButton2");
rb2.setToggleGroup(group);

RadioButton rb3 = new RadioButton("RadioButton3");
rb3.setUserData("RadioButton3");
rb3.setToggleGroup(group);

Lorsque vous sélectionnez un bouton radio dans ce groupe de bascule, la méthode changed(...) suivante sera appelée.

group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
    public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {

         if (group.getSelectedToggle() != null) {

             System.out.println(group.getSelectedToggle().getUserData().toString());
             // Do something here with the userData of newly selected radioButton

         }

     } 
});
15
Ugurcan Yildirim

Cela n'a jamais été correctement ou complètement répondu, alors j'ai pensé publier la solution que j'ai obtenue.

Lorsque vous créez des boutons radio dans SceneBuilder, utilisez AUSSI SceneBuilder pour les affecter à un groupe. La façon dont vous accédez à ce groupe via le contrôleur consiste à créer d'abord une variable de type ToggleGroup dans le contrôleur et à lui donner le même nom exact que celui que vous avez créé dans SceneBuilder. Ensuite, vous pouvez l'utiliser. Voici un exemple de pseudocode de la façon dont je l'ai fait:

// your imports
public class Controller
{
    @FXML ToggleGroup   myGroup; //I called it myGroup in SceneBuilder as well.

    public void myGroupAction(ActionEvent action)
    {
      System.out.println("Toggled: " + myGroup.getSelectedToggle().getUserData().toString());
    }

    public void initialize()
    {
      //whatever initialize code you have here
    }
}

Bien que le texte renvoyé par la propriété getUserData soit long. Voici un moyen d'obtenir uniquement le nom du bouton radio:

myGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
    {
    @Override
    public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1)
        {
        RadioButton chk = (RadioButton)t1.getToggleGroup().getSelectedToggle(); // Cast object to radio button
        System.out.println("Selected Radio Button - "+chk.getText());
        }
    });

J'espère que cela aide quelqu'un sur la route ...

10
Michael Sims