2015-09-06 339 views
5

我正在使用JavaFX 8和SceneBuilder。我在FXML文件中創建了一些單選按鈕,並在該單選按鈕列表中指定了一個toggleGroup名稱。所以,現在我想在我的控制器中獲得toggleGroup的選定單選按鈕,是否需要再次將所有單選按鈕設置爲控制器中的字段,或者只有toggleGroup對象將使我選中的單選按鈕(只有單選按鈕,而不是按鈕對象)。如何從ToggleGroup中獲取選定的單選按鈕

回答

11

假設您有一個屬於該組的切換組和三個單選按鈕。

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屬性返回是漫長的。這是一種方式來獲得單選按鈕的只是名字:

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

希望這可以幫助別人的道路...

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

後某處方法。

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

快速簡單! – marw

相關問題