2015-09-06 4 views
5

से चयनित रेडियो बटन कैसे प्राप्त करें I 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

मैं पूछ रहा था कि मैं reqd हूं या नहीं। नियंत्रक में फिर से 3 रेडियोबूटन बनाने के लिए (उन्हें FXML में बनाने के बाद), या मैं केवल ToggleGroup ऑब्जेक्ट केवल बना सकता हूं और किसी भी तरह से चयनित बटन तक पहुंच सकता हूं। –

+0

@Rounaq_intel, केवल नियंत्रक को togglegroup जोड़ने और उपरोक्त उत्तर में श्रोता जोड़ने की कोशिश करें। –

+0

धन्यवाद, बस मैं जो देख रहा था। – Kefirchiks

9

यह कभी भी ठीक से या पूरी तरह से उत्तर नहीं दिया गया था, इसलिए मैंने सोचा कि मैं जो समाधान मिला हूं उसे पोस्ट करूंगा।

जब आप SceneBuilder में रेडियो बटन बनाते हैं, तो ALSO समूह को असाइन करने के लिए 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