GUI -> RadioButtons -> abfragen

Frankster

Mitglied
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:
Code:
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
 
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
 
Zuletzt bearbeitet:
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:
Code:
    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
 
okay, dann muss du die actionPerformed methode so aufziehen:

Code:
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:
Code:
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
 
Zuletzt bearbeitet:
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
Code:
public void itemStateChanged(ItemEvent e) {
if(jRadiobutton1.isSelected()){
//mach was damit
}
}
nur so als altenativ beispiel

@torsch
sorry hab ich nicht gesehen.... ;)
 
Zuletzt bearbeitet:
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. ;)
 
Zuletzt bearbeitet:
Zurück