web-dev-qa-db-ja.com

ToggleGroupから選択したラジオボタンを取得する方法

私はJavaFX 8とSceneBuilderに取り組んでいます。 FXMLファイルにラジオボタンをいくつか作成し、その中のラジオボタンリストにtoggleGroup名を指定しました。コントローラーでtoggleGroupの選択したラジオボタンを取得したいのですが、コントローラーのフィールドとしてすべてのラジオボタンを再度作成する必要がありますか、それともtoggleGroupオブジェクトだけで取得できますか選択したラジオボタン(ボタンオブジェクトではなく、そのラジオボタンのテキストのみ)。

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

後でメソッドのどこかに。

RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();
24
Jack the Ripper

トグルグループと、そのグループに属する3つのラジオボタンがあるとします。

_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

         }

     } 
});
_
15

これが適切にまたは完全に回答されたことはなかったので、得た解決策を投稿すると思いました。

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

これが将来の誰かを助けることを願っています...

10
Michael Sims