2015-09-06 12 views
5

Pracuję nad JavaFX 8 i SceneBuilder. Stworzyłem kilka przycisków radiowych w pliku FXML i określiłem nazwę toggleGroup na listę przycisków radiowych. Tak więc, teraz chcę uzyskać wybrany przycisk radiowy toggleGroup w moim kontrolerze, czy muszę ponownie ustawić wszystkie przyciski radiowe jako pola w kontrolerze lub po prostu obiekt toggleGroup dostanie mi wybrany przycisk radiowy (tekst tylko przycisk radiowy, a nie obiekt przycisku).Jak uzyskać wybrany przycisk opcji z ToggleGroup

Odpowiedz

11

Załóżmy, że masz grupę przełączającą i trzy przyciski opcji należące do tej grupy.

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

Po wybraniu przycisku radiowego z tej grupy przełączania następujące changed(...) metoda zostanie wywołana.

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

Pytałem, czy jestem ponownie. aby ponownie ustawić 3 przyciski RadioButton w kontrolerze (po wykonaniu ich w FXML), lub mogę zrobić tylko obiekt ToggleGroup i uzyskać dostęp do wybranego przycisku. –

+0

@Rounaq_intel, spróbuj po prostu dodać grupę kontrolną do kontrolera i dodać detektor w powyższej odpowiedzi. –

+0

Dzięki, właśnie tego szukałem. – Kefirchiks

9

To nigdy nie zostało udzielone prawidłowo lub dokładnie, więc pomyślałem, że opublikuję rozwiązanie, które otrzymałem.

Po utworzeniu przycisków opcji w SceneBuilder, należy również użyć SceneBuilder, aby przypisać je do grupy. Sposób, w jaki uzyskujesz dostęp do tej grupy za pośrednictwem kontrolera, polega na utworzeniu w kontrolerze zmiennej typu ToggleGroup i nadaniu jej dokładnie tej samej nazwy, którą utworzyłeś w SceneBuilder. Wtedy możesz go użyć. Oto pseudokod przykładem jak to zrobiłem:

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

Chociaż tekst wrócił z posesji getUserData jest długa. Oto sposób, aby uzyskać tylko nazwę przycisku 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()); 
     } 
    }); 

nadzieję, że pomoże ktoś w dół drogi ...

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

później gdzieś w metodzie.

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

Szybkie i proste! – marw

Powiązane problemy