# JRadioButton auslesen?



## mobile (26. Apr 2006)

Hi, Leute bin etwas kaputt hab grad 6 std Abi Klausur geschrieben, aber jetzt gehts weiter! 

Hab nen kleines Problemchen. Den Sinn und Weg zur Lösung hab ich schon im Kopf ich weiß nur noch nicht, wie ich das realisieren soll. Folgendes:

In einer JMenüBar sind im Menü arten sind verscheidene JRadioButtons deklariert. 


```
JMenu arten = new JMenu("Rechenarten");
		JRadioButton plus = new JRadioButton("Addition");
		JRadioButton minus = new JRadioButton("Subtraktion");
		JRadioButton mal = new JRadioButton("Multiplikation");
		JRadioButton geteilt = new JRadioButton("Division");
```

So nun möchte ich einen dieser Punkte auswählen per klick, geht ja ganz normal (anklicken). Nun muss ich aber auslesen welcher Punkt markiert ist. Den markierten Punkt soll dann an ein KeyListener übergeben werden der beim anklicken eine Funktion aufruft. Diese Funktion soll sich aber nach der Markierung der JRadioButtons richten. True oder false geht ja dann nicht oder? Sind ja 4 verschieden RadioButtons. 

Hier mal die class mit den Methode, nee die braucht ihr eigentlich nicht oder? Wie ich die aufrufe weiß ich ja.

dann den KeyListener 


```
//Behandlung für die Steuer Elemente
	final class Button implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			Rechner add = new Rechner();
			add.add();
		}
	}
```
Im Moment rufe ich class Rechner mit der Methode add() (addieren) auf. Gibt noch Subtrahieren,Multiplizieren und Dividieren.

So, wie kann ich jetzt den ausgewählten JRadioButton auslesen? Dazu muss ich ihm ja irgendwie noch einen Wert geben. Dieser Wert soll dann an den KeyListener übergeben werden. Und da sage ich dann mit if() oder switch() was er für welche Bedingung tun soll. Also angenommen RadioButton plus hat den Wert 1, dann sage ich im KeyListener z.B:, 

```
int i;
switch(i) {
case 1 : Rechner add = new Rechner();
		 add.add();
break;
case 2: Rechner sub = new Rechner();
		sub.sub();
break;
}
```
usw. Verständlich was ich meine? Hoffe ohr könnt mir helfen!

Danke!


----------



## The_S (26. Apr 2006)

timkon hat gesagt.:
			
		

> usw. Verständlich was ich meine?



Öhm ... nein!

Was willst du genau machen und mit was hast du zZ. Probleme. Beschränke dich auf das wesentliche und verschweige triviale Informationen, damit man den Überblick behalten kann.

Hast du Probleme festzustellen welcher Button markiert ist?


----------



## flo_richi (26. Apr 2006)

Also wenn ich das richtig verstanden habe:

die Buttons solltest du einer RadioGroup hinzufügen, da wahrscheinlich immer nur einer ausgewählt wird:


```
ButtonGroup g = new ButtonGroup();
JRadioButton jrb1 = new JRadioButton();
JRadioButton jrb2 = new JRadioButton();

g.add(jrb1);
g.add(jrb2);

//dann jeden Button zu !ItemListener! hinzu

jrb1.addItemListener(new ItemListener()  {
      public void itemStateChanged (ItemEvent evt) {
        jrb1ItemStateChanged (evt);}});

jrb2.addItemListener(new ItemListener()  {
      public void itemStateChanged (ItemEvent evt) {
        jrb2ItemStateChanged (evt);}});
```

Meines Wissens nach muss man jeden einzelnen RadioButton einem Listener hinzufügen, da das mit einer RadioGroup nicht geht?!

Der ItemListener wird bei einer Änderung aufgerufen:


```
public void jrb1ItemStateChanged (ItemEvent evt)
    { 
      if(jrb1.isSelected() == true)
       rechner.addieren();
    }

public void jrb2ItemStateChanged (ItemEvent evt)
   {  
     if(jrb1.isSelected() == true)
      rechner.multiplizieren();
   }
```


----------



## mobile (26. Apr 2006)

Also die JRadioBUttons sind jetzt in einer Gruppe zusammen gefasst.
Wenn ich das richtig verstehe, wird dann bei jeder änderung der RadioButtons eine definierte Methode ausgefürt. 

Ich möchte, aber erstmal nur auslesen, welcher Button markiert ist. 
Für den markierten ist dann eine Methode vorgesehen.
Diese Methode wird dann durch klicken eines JButtons ausgeführt.

Wenn ich den RadioButton jetzt änder, dann soll bei klicken auf JButton eine andere Methode ausgeführt werden.

Vielleicht ist es so klarer! Hoffe mal 

Danke, für die Tipps und für weitere!


----------



## flo_richi (26. Apr 2006)

Definier einfach ne globale Var und ändere die Listener wie folgt:


```
public void jrb1ItemStateChanged (ItemEvent evt)
    {
      if(jrb1.isSelected() == true)
       globale_variable = 1;
    }
```

dann bei klick auf Button:


```
switch(globale_variable)
{
  case 1: addiere; break;
  case 2: multip; break;
  //usw.....
  default: break;
}
```


----------



## mobile (26. Apr 2006)

Also ich habe jetzt den Listener mit der lokalen Variable

```
//Behandlung für die Menü Liste
	int globale_variable;
	final class Liste implements ItemListener {
		public void itemStateChanged (ItemEvent evt) {
			if(plus.isSelected() == true) {
				globale_variable = 1;
			} 
		}		
	}
```
Das Plus unterstreicht er und sagt das plus nicht gefuden/aufgelöst werden kann

Die RAdioButtons werden hier für den Listener registriert  (erstma nur einer zum Test)

```
//RadioButtons für Listener registrieren
		plus.addItemListener(new ItemListener()  {
		      public void itemStateChanged (ItemEvent evt) {
		        plusItemStateChanged (evt);
		      }
		 }); 
	}
```
Hier streicht er mit das plusItemStateChanged an, wenn ich nur itemStateChanged(evt) schreibe geh es.

Hier wird es dann im Listener des JButtons aufgerufen

```
//Behandlung für die Steuer Elemente
	final class Button implements ActionListener {
		public void actionPerformed(ActionEvent e) {
				switch(globale_variable) {
				case 1 : Rechner add = new Rechner();
						 add.add();
				break;
				case 2 : Rechner sub = new Rechner();
				 		 sub.sub();
				break;
				case 3 : Rechner mul = new Rechner();
				 		 mul.mul();
				break;
				case 4 : Rechner div = new Rechner();
				 		 div.div();
				break;
				default: 
				break;
				} 
		}
	}
```

Was mache ich noch falsch? Irgendwie geht das noch nicht so ganz!

Hoffe ihr könnt mir weiter helfen


----------



## mobile (26. Apr 2006)

Jetzt habe ich den Fehler

```
//Behandlung für die Menü Liste
   int globale_variable;
   final class Liste implements ItemListener {
      public void itemStateChanged (ItemEvent evt) {
         if(plus.isSelected() == true) {
            globale_variable = 1;
         }
      }      
   }
```
Hier behoben, indem ich plus zu einer Konstanten gemacht habe.

Bliebt aber immer noch 

```
//RadioButtons für Listener registrieren
		plus.addItemListener(new ItemListener()  {
		      public void itemStateChanged (ItemEvent evt) {
		        plusItemStateChanged (evt);// Hier ist Fehler
		      }
		 }); 
	}
```

Was ist nur falsch?


----------



## flo_richi (26. Apr 2006)

Prinzipiell ist der ItemListener umsonst, da du sowieso mit einem Button die Aktion auslöst...


```
final class Button implements ActionListener {
      public void actionPerformed(ActionEvent e) {
           if(RadioButton1.isSelected()==true)
             //addier;
           if(RadioButton2.isSelected()==true)
             //multiplizier;
           if(RadioButton3.isSelected()==true)
      }
   }
```


----------



## mobile (26. Apr 2006)

Sehr gut, weniger zu schreiben.

Also das sieht schon alles ganz gut aus, keine Fehler mehr angezeigt. Wenn ich das Programm jetzt aber starte und klicke auf den JButton mit dem Listener

```
//Behandlung für die Steuer Elemente = ActionListener
	final class Button implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if(plus.isSelected()==true) { 
				Rechner add = new Rechner();
				add.add();
			}
			else if(minus.isSelected() == true) {
				Rechner sub = new Rechner();
				sub.sub();
			}
			else if(mal.isSelected() == true) {
				Rechner sub = new Rechner();
				sub.sub();
			}
			else if(geteilt.isSelected() == true) {
				Rechner sub = new Rechner();
				sub.sub();
			}
		}
	}
```

Bekomme ich in der Konsole eine ganze Menge an Fehlern angezeigt. Gang oben steht:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at StartWindow$Button.actionPerformed(Main.java:46)
dann noch ganz viel weiteres Rot.
Also irgendwas in Zeile 46 oder?

Außerdem, passiert auch nichts, wenn ich den RadioButton in der MenüLeiste markieren will. Müsste doch normaler Weise son Pukt als zeichen für marjiert vor oder? Kann es sein, dass er deswegen die Fehlermeldung ausgibt, weil er nichts markiert findet und dem Zufolge auch nicht weis was er ausführen soll?

Muss ich 

```
private JMenuBar plus;
		private JMenuBar minus;
		private JMenuBar mal;
		private JMenuBar geteilt;
```
oder 

```
private JMenuBar plus = null;
		private JMenuBar minus = null;
		private JMenuBar mal = null;
		private JMenuBar geteilt = null;
```
oder irgendwie sowas in die Klasse schreiben, weil sonst erkennt der Listener das die RadioButtons plus usw irgendwie nicht
Hilfe, bin langsam am Verzweifeln!


----------

