2015-09-06 13 views
5

Ich arbeite an JavaFX 8 und SceneBuilder. Ich habe einige Radio-Buttons in der FXML-Datei erstellt und einen toggleGroup-Namen für eine Radio-Button-Liste angegeben. So, jetzt möchte ich die toggleGroup 's ausgewählten Radio-Button in meinem Controller, muss ich alle Radiobuttons wieder als Felder in der Steuerung, oder nur das toggleGroup Objekt wird mir die ausgewählte Radio-Taste (der Text von nur dieses Optionsfeld, nicht das Schaltflächenobjekt).Wie ausgewählt werden Optionsfeld von ToggleGroup

Antwort

11

Angenommen, Sie haben eine Umschaltgruppe und drei Optionsfelder, die zu dieser Gruppe gehören.

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

Wenn Sie ein Optionsfeld aus dieser Toggle-Gruppe auswählen, wird die folgende changed(...) Methode aufgerufen werden.

+0

Ich fragte, ob ich gefragt werde. um die 3 RadioButtons wieder im Controller zu machen (nachdem sie in FXML gemacht wurden), oder ich kann nur das ToggleGroup-Objekt nur machen und irgendwie auf den ausgewählten Button zugreifen. –

+0

@Rounaq_intel, versuchen Sie, nur die Umschaltgruppe zum Controller hinzuzufügen und den Listener in der obigen Antwort hinzuzufügen. –

+0

Danke, genau wonach ich gesucht habe. – Kefirchiks

9

Dies wurde nie richtig oder gründlich beantwortet, also dachte ich, ich würde die Lösung posten, die ich bekam. Wenn Sie in SceneBuilder Optionsfelder erstellen, verwenden Sie SceneBuilder, um sie einer Gruppe zuzuordnen. Die Art und Weise, wie Sie über den Controller auf diese Gruppe zugreifen, besteht darin, zunächst eine Variable vom Typ ToggleGroup im Controller zu erstellen und denselben Namen wie den in SceneBuilder erstellten zu benennen. Dann kannst du es benutzen. Hier ist ein Pseudo-Code Beispiel dafür, wie ich es tat:

// 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 
    } 
} 

Obwohl der Text von der getUserData Eigenschaft zurück langwieriger ist. Hier ist eine Möglichkeit, nur den Namen des Radiobutton zu bekommen:

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

hoffte, das hilft jemand die Straße hinunter ...

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

später irgendwo in der Methode.

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

Schnell und einfach! – marw

Verwandte Themen