Saltar al contenido

Cómo obtener el botón de opción seleccionado de ToggleGroup

Solución:

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

más tarde en algún lugar del método.

RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();

Digamos que tiene un grupo de alternancia y tres botones de opción que pertenecen a ese grupo.

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);

Cuando selecciona un botón de radio de ese grupo de alternancia, lo siguiente changed(...) se llamará al método.

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

         }

     } 
});

Esto nunca fue respondido de manera adecuada o completa, por lo que pensé en publicar la solución que obtuve.

Cuando crea botones de opción en SceneBuilder, luego TAMBIÉN use SceneBuilder para asignarlos a un grupo. La forma de acceder a ese grupo a través del controlador es crear primero una variable de tipo ToggleGroup en el controlador y asígnele el mismo nombre que el que creó en SceneBuilder. Entonces puedes usarlo. Aquí hay un ejemplo de pseudocódigo de cómo lo hice:

// 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
    }
}

Aunque el texto regresó del getUserData La propiedad es larga. A continuación, se muestra una forma de obtener solo el nombre del botón de opción:

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());
        }
    });

Espero que esto ayude a alguien en el futuro …

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *