如何从ToggleGroup中获取选定的单选按钮

31

我正在使用JavaFX 8和SceneBuilder。我在FXML文件中创建了一些单选按钮,并为该单选按钮列表指定了一个toggleGroup名称。现在,我想在我的控制器中获取toggleGroup选择的单选按钮,我需要再次将所有单选按钮作为控制器中的字段,还是只有toggleGroup对象会让我获得所选单选按钮(仅该单选按钮的文本,而不是按钮对象)。

我在JavaFX 8和SceneBuilder上工作,我在FXML文件中创建了一些单选按钮并为它们指定了一个toggleGroup名称。那么,现在我想要在我的控制器中获取toggleGroup所选的单选按钮,我需要再次将所有单选按钮制作为控制器的字段吗?或者仅使用toggleGroup对象就可以获取所选单选按钮(仅限该单选按钮的文本,而不是按钮对象)?

5个回答

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

稍后在方法中的某个地方。

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

1
快速简单! - marw
1
非常简单的杰克,非常好! - Michael Sims

19

假设你有一个切换组和三个属于该组的单选按钮。

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个RadioButton(在FXML中已经创建了它们),或者只需创建ToggleGroup对象并以某种方式访问所选按钮即可。 - rjalfa
@Rounaq_intel,尝试将togglegroup添加到控制器中,并在上面的答案中添加监听器。 - Uluk Biy
谢谢,这正是我所需要的。 - Kefirchiks

12
这个问题从未得到合适或全面的回答,所以我想发布我得到的解决方案。在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());
        }
    });

希望这能帮助到其他人...


1
public class MyControler {
    @FXML
    private ToggleGroup myToggleGroup;

    @FXML
    public void initialize(){
        //the simplest way to print current value (text of the selected radio button)
        System.out.format("Selected Radio Button: " + ((RadioButton)myToggleGroup.getSelectedToggle()).getText());

        //register on change event
        myToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
        {
            @Override
            public void changed(ObservableValue<? extends Toggle> observable, Toggle oldToggle, Toggle newToggle)
            {
                //print new selected value after change
                System.out.println("Selected Radio Button: " + ((RadioButton)newToggle).getText());
            }
        });
    }

    //sample method to set radio button (unselect all if group don't contain value)
    private void setRadioButtons(ToggleGroup toggleGroup, String value) {
        for (Toggle t : toggleGroup.getToggles()) 
            t.setSelected(((RadioButton) t).getText().equals(value));
    }

    //sample method to set radio button (select existing value or do nothing)
    private void setRadioButton(ToggleGroup toggleGroup, String value) {
        for (Toggle t : toggleGroup.getToggles()) 
            if(((RadioButton) t).getText().equals(value)) 
                t.setSelected(true);
    }
}

0
我得到的解决方案是:
ToggleGroup toggleGroup = new ToggleGroup();
然后将toggleGroup设置为单选按钮,比如r1和r2。
r1.setToggleGroup(toggleGroup);

r2.setToggleGroup(toggleGroup);

toggleGroup.setUserData(toggleGroup.getSelectedToggle().toString());

输出 RadioButton 的数据:

System.out.println("Selected Radio Button is " + toggleGroup.getUserData().toString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接