# GUI -> RadioButtons -> abfragen



## Frankster (28. Juni 2005)

Hallo

Ich bin gerade dabei mir JAVA beizubringen und habe eine Frage bzgl der ActionListener-abfragen beim GUI ?

Ich habe eine ButtonGroup erstellt und diese ButtonGroup hat 5 RadioButtons.
Je nachdem welcher RadioButton gerade aktiv ist, soll dies und jenes berrechnet werden.

Muss man für jede der 5 Buttons eine if Anweisung schreiben oder gibts da eine kürzerer Methode ?

Hier mal meine Lösung:

```
if(e.getActionCommand().equals("62")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("66")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("70")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("74")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("78")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
```

Und noch eine Frage:
Wenn man jetzt die 5 RadioButtons erzeugt, sie in das GUI einbindet und dann auch noch per ActionListener registriert und ein ActionCommand zuweist sind das sehr viele Zeilen für nur 5 solcher Buttons.
Gibts da eine andere Möglichkeit ?

Stelle diese Frage, da ich zwar das Basiswissen in JAVA habe, aber leider  bzgl. Tricks usw keine Ahnung habe.

PPS:
Wer wissen möchte um was es in dieser Aufgabe geht:
http://www.gailer-net.de/tutorials/java/Notes/chap63/progExercises63.html

Und hier meine komplette Lösung:
Java Code 

Vielen Dank im voraus 
Frankster


----------



## torsch2711 (28. Juni 2005)

Hi,

also ich versuchs mal.
EDIT:
!SORRY, mein fehler switch - case geht nur mit integer, bzw. enumerations



Allerdings sehe ich das du immer die selbe floating konvertierung machst, also brauchst du keine if oder switch anweisung.

einfach nur 
public void actionPerformed(ActionEvent ev) {
            H = Float.parseFloat(e.getActionCommand());
}

Die unterscheidung benötigst du nur, falls du wirklich andere Aktionen über den ActionListener fahren möchtest und somit unterscheidungen triffst, welches Event bzw. Kommando gerade ausgeführt wird/werden soll.


Zweitens:

Du kannst die buttons in einer schleife erzeugen lassen so in der Art:
JRadioButton button;
DeinActionListener actionlistener=new DeinActionListener();
//keine Ahnung warum du zahlen nimmst, aber okay)
int actioncount=62;
for (int i=0; i<5; i++) {
button=new JRadioButto("Knopf "+i);
button.setActionListener(actionlistener);
button.setActionCommand(actioncount);
actioncount=actioncount+4;
this.getComponentPane().add(button); //this ist dein JFrame in welchem du die buttons anzeigst
}

diese schleife erzeugt 5 Buttons wie du sie erzeugst.


Gruss,

Torsten


----------



## Frankster (28. Juni 2005)

Danke 

Es gibt sozusagen 2 verschiedene Events auf das der ActionListener achten muss.

Einmal die Grösse und einmal das Geschlecht. Daher braucht man die if else Anweisung

Der komplett actionPerformedCode:

```
public void actionPerformed(ActionEvent e) {
        
        if(e.getActionCommand().equals("62")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("66")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("70")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("74")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        else if(e.getActionCommand().equals("78")) {
            String x = e.getActionCommand();
            H = Float.parseFloat(x);
        }
        
        if(e.getActionCommand().equals("maennlich")) {
            gesch=e.getActionCommand();
        }
        else if(e.getActionCommand().equals("weiblich")) {
            gesch=e.getActionCommand();
        }
        
        if (gesch=="maennlich") {
            maennlich();
            resultText.setText(W+"");
        }
        else {
            weiblich();
            resultText.setText(W+"");
        }
    }
```

Bzgl. Schleife, das geht aber auch nur, wenn die Buttons Zahlen in aufsteigender Reihenfolge schicken, oder absteigender.
Wenn z.b ein Butten Hugo, der andere Susi usw betitelt ist und auch dies an den ActionListener schickt, geht das mit der Schleife nicht mehr oder ?

Warum ich zahlen verwende:
Dies ist ein Übungsprogramm und man soll aus Geschlecht und Grösse das ideale Gewicht berechnen -> diese Zahlen stellen das Gewicht dar!

Mfg
Frankster


----------



## torsch2711 (28. Juni 2005)

okay, dann muss du die actionPerformed methode so aufziehen:


```
public void actionPerformed(ActionEvent arg0) {

if (arg0.getActionCommand().equals("weiblich"))  {
      System.out.println("weiblich");
      gesch=arg0.getActionCommand();
      weiblich();
      resultText.setText(W+"");
}

else if ( arg0.getActionCommand().equals("maennlich")) {
     System.out.println("Maennlich");
     gesch=arg0.getActionCommand();
     maennlich();
     resultText.setText(W+"");
}

else {
    //okay, keins von beiden oben. Also Zahl ;)
    H=Float.parseFloat(e.getActionCommand());
}

}
```

P.S.: Sorry, das mit switch - case geht nur mit integer bzw. enumeration werten, mein fehler!

Zu deinem Hugo, Susi, etc.

Du kannst auch vorher ein Array mit den Namen anlegen und dies durchloopen:

```
String[] namen= {"Hugo", "Susi", "Helga", "Heinz"};

for (int i=0; i<5; i++) {
button=new JRadioButto(namen[i]);
button.setActionListener(actionlistener);
button.setActionCommand(namen[i]);
this.getComponentPane().add(button); //this ist dein JFrame in welchem du die buttons anzeigst
}
```

Thats it 

Gruss,
Torsten


----------



## elmato (28. Juni 2005)

das oben genannte duerfte nicht funktionieren, da switch etweder ein int oder char erwartet, Strings sind nicht erlaubt....
was du anstelle des actionListeners noch benutzen koenntest ist ein itemListener der die methode itemStateChanged implementieren muss

```
public void itemStateChanged(ItemEvent e) {
if(jRadiobutton1.isSelected()){
//mach was damit
}
}
```
nur so als altenativ beispiel

@torsch
sorry hab ich nicht gesehen....


----------



## torsch2711 (28. Juni 2005)

Jo, elmato, habs auch gleich zurückgezogen. (switch-case)

Hatte mich da geirrt.



Gruss,

Torsten

@elmato: No probs, hab's auch etwas später erst gemerkt, dass das blödsinn war in diesem fall.


----------

