Я работаю над JavaFX 8 и SceneBuilder
. Я создал некоторые радиокнопки в файле FXML и указал имя toggleGroup
в список радиокнопдок. Итак, теперь я хочу получить переключатель toggleGroup
в моем контроллере, мне нужно снова сделать все радиокнопки в качестве полей в контроллере, или просто объект toggleGroup
получит мне выбранный переключатель ( текст этого переключателя, а не объект кнопки).
Как получить выбранный переключатель из ToggleGroup
Ответ 1
@FXML
ToggleGroup right; //I called it right in SceneBuilder.
позже где-нибудь в методе.
RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();
Ответ 2
Скажем, у вас есть группа переключателей и три переключателя, принадлежащие этой группе.
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);
Когда вы выбираете радиокнопку из этой группы переключателей, вызывается следующий changed(...)
метод.
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
}
}
});
Ответ 3
Это никогда не отвечал должным образом или тщательно, поэтому я решил опубликовать решение, которое я получил.
При создании переключателей в SceneBuilder
, затем используйте SceneBuilder
, чтобы назначить их группе. Способ доступа к этой группе через контроллер должен сначала создать переменную типа ToggleGroup
в контроллере и называть ее тем же именем, что и тот, который вы создали в SceneBuilder
. Тогда вы можете использовать его. Вот пример псевдокода, как я это сделал:
// 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
}
}
Хотя текст, возвращаемый из свойства getUserData
, длинный. Вот как получить название радио кнопки:
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());
}
});
Надеюсь, что это поможет кому-то по дороге...