91 Stimmen

Wie bekomme ich heraus, welcher JRadioButton aus einer ButtonGroup ausgewählt ist?

Ich habe eine Swing-Anwendung, die Optionsfelder in einem Formular enthält. Ich habe die ButtonGroup Wenn ich mir jedoch die verfügbaren Methoden ansehe, kann ich den Namen der ausgewählten Methode nicht herausfinden. JRadioButton . Hier ist, was ich bis jetzt sagen kann:

  • Von ButtonGroup aus kann ich eine getSelection() zur Rückgabe der ButtonModel . Von dort aus kann ich eine getActionCommand aber das scheint nicht immer zu funktionieren. Ich habe verschiedene Tests ausprobiert und unvorhersehbare Ergebnisse erhalten.

  • Auch von ButtonGroup kann ich eine Aufzählung von getElements() . Allerdings müsste ich dann jede Schaltfläche in einer Schleife durchlaufen, um zu prüfen, ob sie ausgewählt ist.

Gibt es eine einfachere Methode, um herauszufinden, welche Schaltfläche ausgewählt wurde? Ich programmiere dies in Java 1.3.1 und Swing.

88voto

Rendicahya Punkte 4035

Ich hatte ein ähnliches Problem und habe es hiermit gelöst:

import java.util.Enumeration;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;

public class GroupButtonUtils {

    public String getSelectedButtonText(ButtonGroup buttonGroup) {
        for (Enumeration<AbstractButton> buttons = buttonGroup.getElements(); buttons.hasMoreElements();) {
            AbstractButton button = buttons.nextElement();

            if (button.isSelected()) {
                return button.getText();
            }
        }

        return null;
    }
}

Sie gibt den Text der ausgewählten Schaltfläche zurück.

47voto

Draemon Punkte 32703

Ich würde einfach eine Schleife durch Ihre JRadioButtons und rufen isSelected() . Wenn Sie wirklich vom ButtonGroup können Sie nur zu den Modellen gelangen. Sie könnten die Modelle den Schaltflächen zuordnen, aber wenn Sie Zugang zu den Schaltflächen haben, warum verwenden Sie sie dann nicht direkt?

41voto

Majdi Punkte 491

Sie müssen Folgendes hinzufügen setActionCommand zum JRadioButton dann tun Sie es einfach:

String entree = entreeGroup.getSelection().getActionCommand();

java = new JRadioButton("Java");
java.setActionCommand("Java");
c = new JRadioButton("C/C++");
c.setActionCommand("c");
System.out.println("Selected Radio Button: " + 
                    buttonGroup.getSelection().getActionCommand());

5voto

Tom Hawtin - tackline Punkte 142461

Ich schlage vor, dass Sie sich direkt für den Modellansatz in Swing entscheiden. Nachdem Sie die Komponente in das Bedienfeld und den Layout-Manager eingefügt haben, brauchen Sie sich nicht einmal die Mühe zu machen, einen speziellen Verweis auf sie zu speichern.

Wenn Sie das Widget wirklich wollen, dann können Sie jedes mit isSelected , oder eine Map<ButtonModel,JRadioButton> .

5voto

Ale Rojas Punkte 477

Sie können jedem Optionsfeld einen actionCommand zuordnen (String).

this.jButton1.setActionCommand("dog");
this.jButton2.setActionCommand("cat");
this.jButton3.setActionCommand("bird");

Angenommen, sie befinden sich bereits in einer ButtonGroup (in diesem Fall state_group), dann können Sie das ausgewählte Optionsfeld wie folgt abrufen:

String selection = this.state_group.getSelection().getActionCommand();

Ich hoffe, das hilft

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X