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

rja*_*lfa 15 javafx fxml

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

Jac*_*per 27

 @FXML
 ToggleGroup right; //I called it right in SceneBuilder.
Run Code Online (Sandbox Code Playgroud)

后来在方法的某个地方.

RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();
Run Code Online (Sandbox Code Playgroud)


Ugu*_*rim 15

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

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);
Run Code Online (Sandbox Code Playgroud)

从该切换组中选择单选按钮时,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

         }

     } 
});
Run Code Online (Sandbox Code Playgroud)


Mic*_*ims 10

这从未得到正确或彻底的回答,所以我想我会发布我得到的解决方案.

当您在其中创建单选按钮时SceneBuilder,也可以使用SceneBuilder它们将它们分配给组.通过Controller访问该组的方法是首先在Controller中创建一个类型变量,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
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然从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());
        }
    });
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助有人在路上......