2015-09-06 58 views
5

私はJavaFX 8とSceneBuilderで作業しています。 FXMLファイルにいくつかのラジオボタンを作成し、その中のラジオボタンリストにtoggleGroupという名前を指定しました。だから今コントローラーでtoggleGroupの選択したラジオボタンを取得したいのですが、コントローラーのフィールドとしてラジオボタンをすべて再作成する必要がありますか、toggleGroupオブジェクトだけが選択ラジオボタンを表示しますボタンオブジェクトではなくラジオボタンのみ)。ToggleGroupから選択したラジオボタンを取得する方法

答えて

11

トグルグループとそのグループに属する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 

     } 

    } 
}); 
+0

私は頼まれていましたか?コントローラで3つのRadioButtonを再度作成する(FXMLで作成した後)か、ToggleGroupオブジェクトだけを作成し、選択したボタンに何らかの方法でアクセスすることができます。 –

+0

@Rounaq_intel、コントローラにtogglegroupを追加し、上記の答えにリスナーを追加するだけです。 –

+0

ありがとう、ちょうど私が探していたもの。 – Kefirchiks

9

これは決して適切に、または徹底的に回答されていないため、私が得た解決策を投稿すると思いました。

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プロパティから返されるテキストが長いですが。後でどこかの方法で

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

...これは誰かダウン道路を助け

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

希望:ここではラジオボタンの名前だけを取得する方法です。

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

すばやく簡単! – marw

関連する問題