# RadioButton aktivieren/deaktivieren; Zustand abfragen und wechseln



## Voidl (6. Sep 2014)

Hallo Java Community,

ich versuche gerade ein Schulprojekt mit einem jFrame graphisch darzustellen und stoße dabei auf ein Problem.
Ich wollte mit jRadioButtons Lämpchen darstellen und mit jButtons die dazugehörigen Schalter.
Nun wollte ich sozusagen Stromstoßrelaises programmieren. D.h. wenn ein Lämpchen aktiviert ist (bzw. der RadioButton), dann soll es deaktiviert werden und andersrum. Also wird mit einem Klick auf einen jButton der Zustand eines jRadioButtons geändert.

So soll das ganze ausschauen:


Ich wollte dazu folgenden Code verwenden:


```
public void jButton1_ActionPerformed(ActionEvent evt) {
 if (jRadioButton1.isSelected(true)) {
  jRadioButton1.setSelected(false);
 } else {
 jRadioButton1.setSelected(true);
}
```
Dazu gibt mir JavaEditor aber folgende Fehlermeldung aus:

```
sieben_lichter.java:170:22: isSelected() in javax.swing.AbstractButton cannot be applied to (boolean)
```

Wie kann ich das Problem lösen?
Ihr könnt mir auch gern was anderes vorschlagen, so dass halt nicht der Zustand von RadioButtons geändert werde soll, sondern z.B. die Hintergrundfarbe von irgendetwas, oder der Inhalt eines Feldes. (Mir ist aber ein graphische Lösung lieber)

Danke schonmal


----------



## Voidl (6. Sep 2014)

Ich bin gerade draufgekommen:
reicht es, wenn ich die if-Anweisung einfach ganz weglasse und schreibe:
[JAVa]public void jButton1_ActionPerformed(ActionEvent evt) {
 jRadioButton1.doClick();
}[/code]
?


----------



## kaoZ (8. Sep 2014)

normalerweise sollte das so in der Art aussehen :


```
@Override
public void actionPerformed(ActionEvent e){
	if(btn.isSelected()) {
		System.out.println("Ein");
	}
	else{
		System.out.println("Out");
	}
}
```

Du kannst auch alle Events mit einem Listener behandeln, und dann einfach nur die Quelle und den Status abfragen :


```
@Override
public void actionPerformed(ActionEvent e){
	JRadioButton btn = (JRadioButton) e.getSource();
		
	if(btn.isSelected()) {
		System.out.println("Ein");
	}
	else{
		System.out.println("Out");
	}
}
```

auch hier kannst du dann noch abfragen von welchem Button das Event abgefeuert worden ist,


```
@Override
public void actionPerformed(ActionEvent e){
	JRadioButton btn = (JRadioButton) e.getSource();
		
	if(btn.isSelected()) {
		if(btn == btns[0]) {
			System.out.println("Eins");
		}
		if(btn == btns[1]) {
			System.out.println("Zwei");
		}
	}
	else{
		System.out.println("Out");
	}
}
```

wenn du nun mit JButtons den State des RadioButtons steuern willst kannst du das folgendermaßen machen, erstmal würde ich vielleicht einen JToogleButton verwenden und dann sowas hier schreiben :


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;


@SuppressWarnings("serial")
public class BtnTest extends JFrame implements ActionListener{

	JToggleButton toggleButton;
	String defaultState = "Aus";
	String onState		= "Ein";
	JRadioButton light;
	
	public BtnTest(){
		setSize(500,500);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		JPanel panel = new JPanel();
		toggleButton = new JToggleButton(defaultState);
		toggleButton.addActionListener(this);
		
		light = new JRadioButton();
		
		panel.add(toggleButton);
		panel.add(light);
		setContentPane(panel);
	}

	@Override
	public void actionPerformed(ActionEvent e){
		if(toggleButton.isSelected()) {
			toggleButton.setText(onState);
			light.setSelected(true);
		}
		else{
			toggleButton.setText(defaultState);
			light.setSelected(false);
		}
	}

	public static void main(String[] args){
		new BtnTest().setVisible(true);
	}
}
```

zusätzlich würde ich ggf. den Background erst Geld zeichnen lassen wenn die "Lampe" eingeschaltet ist


----------

