# JRadiobutton



## eys (9. Mrz 2010)

Hi guys,

folgendes vermutlich einfaches Problem ^^

Ich habe zwei RadioButtons und jetzt müsste ich aber irgendwie abfragen welcher der beiden aktiv ist.
Könnt ihr mir helfen wo und wie das rein muss?

Also vom prinzip her:


```
String gruppe;

if(radiobutton1 == aktiv){
    gruppe = "Sekretariat";
}
else if(radiobutton2 == aktiv){
   gruppe = "Student";
}
```

aktueller Code:


```
//______________________________RADIOBUTTON
                JRadioButton optionSek = new JRadioButton();
                JRadioButton optionStud = new JRadioButton();

                //Register a listener for the radio buttons
                ItemListener optListener = new ItemListener() {
                    public void itemStateChanged( ItemEvent e ) {
                        System.out.print( ((JRadioButton) e.getItem()).getText() );
                       System.out.println( e.getStateChange() == ItemEvent.SELECTED ?
                                            " selected" : " unselected" );
                        
                  }
                };
                optionSek.addItemListener(optListener);
                optionSek.setSelected(true);
                optionStud.addItemListener(optListener);

                inputPanel.add("Sekretariat", optionSek);
                inputPanel.add("Student", optionStud);
```


----------



## Foermchen82 (9. Mrz 2010)

Du packst deine RadioButtons in eine ButtonGroup. So stellst du sicher, dass nur einer Selektiert ist. Dann gehts du über deine Buttons und schaust welcher selektiert ist. Außerdem kannst du nicht an beide Buttons die gleiche Listenerinstanz hängen. Geht zwar, macht aber keinen sinn. Mach an jeden einen Listener und du siehst welcher selektiert ist.


----------



## nrg (9. Mrz 2010)

AbstractButton (Java Platform SE 6)


----------



## eys (9. Mrz 2010)

Ok die Buttongroup hatte ich schon, habs nur vergessen zu posten ^^


```
//Group the radio buttons.
                ButtonGroup radioButtongroup = new ButtonGroup();
                radioButtongroup.add(optionSek);
                radioButtongroup.add(optionStud);                

                if(optionSek.isSelected()== true){
                    gruppe = "Sekretariat";
                }
                else if(optionStud.isSelected()==true){
                    gruppe = "Student";
                }
```
Nach der Group habe ich die if-Abfrage in der ich die String Variable "gruppe" auf "Sekretariat" oder "Student" setzen will je nachdem welcher Radiobutton gewählt wurde. Diese Variable wird später übergeben. Aber ich bekomme immer nur die erste Option "Sekretariat" übergeben. Woran liegts?


----------



## Foermchen82 (9. Mrz 2010)

poste doch mal bitte den zusammenhängenden Code. Hast du schon mal die Listener getrennt?


----------



## Momolin (9. Mrz 2010)

Hallo,

Du machst das schon ganz richtig: in der

```
public void itemStateChanged(ItemEvent e)
```
fragt man das ab.
hier ein Beispiel:

```
package radio;

import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JRadioButton;

public class Radio extends JFrame implements ItemListener {

	private JRadioButton r1;
	private JRadioButton r2;

	public Radio() {
		this.setLayout(new GridLayout(2, 1));
		ButtonGroup g = new ButtonGroup();
		r1 = new JRadioButton("Student");
		r2 = new JRadioButton("Sekretariat");
		g.add(r1);
		g.add(r2);
		r1.setSelected(true);

		r1.addItemListener(this);
		r2.addItemListener(this);

		this.add(r1);
		this.add(r2);

		this.setLocationRelativeTo(null);
		this.setSize(250, 90);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Radio app = new Radio();
		app.setVisible(true);

	}

	@Override
	public void itemStateChanged(ItemEvent e) {
		if (r1.isSelected())
			this.setTitle(r1.getText());
		else if (r2.isSelected())
			this.setTitle(r2.getText());

	}
}
```


----------



## eys (9. Mrz 2010)

Yap denke doch ^^

```
//______________________________RADIOBUTTON
                JRadioButton optionSek = new JRadioButton();
                JRadioButton optionStud = new JRadioButton();

                // Listener für RadioButtons
                ItemListener optListener1 = new ItemListener() {
                    public void itemStateChanged( ItemEvent e ) {
                       
                  }
                };
                ItemListener optListener2 = new ItemListener() {

                    public void itemStateChanged(ItemEvent e) {
                        
                    }
                };
                optionSek.addItemListener(optListener1);
                optionSek.setSelected(true);
                optionStud.addItemListener(optListener2);

                inputPanel.add("Sekretariat", optionSek);
                inputPanel.add("Student", optionStud);

                //Group the radio buttons.
                ButtonGroup radioButtongroup = new ButtonGroup();
                radioButtongroup.add(optionSek);
                radioButtongroup.add(optionStud);                

                if(optionSek.isSelected()== true){
                    gruppe = "Sekretariat....";
                }
                else if(optionStud.isSelected()==true){
                    gruppe = "Student";
                }
```


----------



## Foermchen82 (9. Mrz 2010)

Aaahhhhaaaa.

Du must "gruppe" natürlich in der Listener-Methode setzen wenn der Butten markiert wurde und nicht außerhalb.


----------



## Momolin (9. Mrz 2010)

Hallo

diese Methoden werden bei einem Zustandswechsel aufgerufen


```
// Listener für RadioButtons
                ItemListener optListener1 = new ItemListener() {
                    public void itemStateChanged( ItemEvent e ) {
                       
                  }
                };

                ItemListener optListener2 = new ItemListener() {

                    public void itemStateChanged(ItemEvent e) {
                        
                    }
                };
```
dieser Bereich wird nur einmal aufgerufen, die obigen Methoden, die bei die leer sind, dagegen bei jedem Zustandswechsel

```
if(optionSek.isSelected()== true){
                    gruppe = "Sekretariat....";
                }
                else if(optionStud.isSelected()==true){
                    gruppe = "Student";
                }
```

Grüße


----------



## eys (9. Mrz 2010)

Ok ich verstehe was ihr meint, aber ich kann jetzt meine If-schleife nicht in die Listener setzen.
Die Listener melden jedes mal ein event wenn der radiobutton gewählt oder abgewählt wurde, aber wie setze ich das was ich in meiner IF-schleife probiert hab in den listenern um?

hm... nee so gehts nicht, was stimmt nicht an meinen Listenern? die erkennen die Radiobuttons nicht..


```
JRadioButton optionSek = new JRadioButton();
                JRadioButton optionStud = new JRadioButton();
                optionSek.setSelected(true);
// Listener für RadioButtons
                ItemListener optListener1 = new ItemListener() {
                    public void itemStateChanged( ItemEvent e ) {
                        if(optionSek.isSelected()==true){
                            gruppe = "Sekretariat";
                        }
                       
                  }
                };
                ItemListener optListener2 = new ItemListener() {

                    public void itemStateChanged(ItemEvent e) {
                        if(optionStud.isSelected()==true){
                            gruppe = "Student";
                        }
                    }
                };
                optionSek.addItemListener(optListener1);                
                optionStud.addItemListener(optListener2);
```


----------



## eys (9. Mrz 2010)

Ahh ich musste die RadioButton als final deklarieren jetzt gehts ...


----------



## Michael... (9. Mrz 2010)

eys hat gesagt.:


> Ahh ich musste die RadioButton als final deklarieren jetzt gehts ...



Muss man nicht. Man könnte Sie auch als Instanzvariablen deklarieren.


----------

