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
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
}
}
});
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 ...
@FXML
ToggleGroup right; //I called it right in SceneBuilder.
później gdzieś w metodzie.
RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();
Szybkie i proste! – marw
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. –
@Rounaq_intel, spróbuj po prostu dodać grupę kontrolną do kontrolera i dodać detektor w powyższej odpowiedzi. –
Dzięki, właśnie tego szukałem. – Kefirchiks