2015-09-06 24 views
5

I un lavoro su JavaFX 8 e SceneBuilder. Ho creato alcuni pulsanti di opzione nel file FXML e specificato un nome toggleGroup in un elenco di pulsanti di opzione. Quindi, ora voglio ottenere il pulsante di opzione selezionato di toggleGroup nel mio controller, devo fare di nuovo tutti i pulsanti di opzione come campi nel controller, o solo l'oggetto toggleGroup mi otterrà il pulsante di opzione selezionato (il testo di solo quel pulsante di opzione, non l'oggetto pulsante).Come ottenere il pulsante di opzione selezionato da ToggleGroup

risposta

11

Supponiamo di avere un gruppo di commutazione e tre pulsanti di opzione appartenenti a quel gruppo.

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

Quando si seleziona un pulsante di scelta da quel gruppo a ginocchiera, il changed(...) seguente metodo sarà chiamato.

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 

     } 

    } 
}); 
+0

Stavo chiedendo se sono reqd. per rendere nuovamente i 3 RadioButton nel controller (dopo averli fatti in FXML), oppure posso creare solo l'oggetto ToggleGroup e accedere in qualche modo al pulsante selezionato. –

+0

@Rounaq_intel, prova ad aggiungere il togglegroup al controller e ad aggiungere il listener nella risposta sopra. –

+0

Grazie, proprio quello che stavo cercando. – Kefirchiks

9

Questo non è mai stato adeguatamente o accuratamente risposto, così ho pensato di postare la soluzione che ho ricevuto.

Quando si creano pulsanti di opzione in SceneBuilder, quindi utilizzare anche SceneBuilder per assegnarli a un gruppo. Il modo in cui si accede a quel gruppo tramite il Controller consiste nel creare innanzitutto una variabile di tipo ToggleGroup nel Controller e denominarlo esattamente con lo stesso nome di quello creato in SceneBuilder. Quindi puoi usarlo. Ecco un esempio di pseudocodice come ho fatto:

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

Anche se il testo restituito dalla proprietà getUserData è lungo. Ecco un modo per ottenere solo il nome del pulsante di scelta:

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

Spero che questo aiuti qualcuno lungo la strada ...

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

poi da qualche parte nel metodo.

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

Semplice e veloce! – marw

Problemi correlati