it-swarm.com.de

Wie erhalte ich, welcher JRadioButton aus einer ButtonGroup ausgewählt wird?

Ich habe eine Swing-Anwendung, die Optionsfelder in einem Formular enthält. Ich habe die ButtonGroup, aber wenn ich mir die verfügbaren Methoden anschaue, kann ich nicht den Namen der ausgewählten JRadioButton erhalten. Was ich bis jetzt sagen kann:

  • Über die ButtonGroup kann ich eine getSelection() ausführen, um die ButtonModel zurückzugeben. Von dort kann ich eine getActionCommand ausführen, aber das scheint nicht immer zu funktionieren. Ich habe verschiedene Tests ausprobiert und unvorhersehbare Ergebnisse erzielt.

  • Auch von ButtonGroup kann ich eine Aufzählung von getElements() erhalten. Dann müsste ich jedoch jede Taste durchlaufen, um zu überprü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.

64
Joel

Ich würde einfach durch Ihre JRadioButtons gehen und isSelected() aufrufen. Wenn Sie wirklich von der ButtonGroup gehen wollen, können Sie nur zu den Modellen gelangen. Sie können die Modelle an die Tasten anpassen, aber wenn Sie auf die Tasten zugreifen können, können Sie sie auch direkt verwenden.

39
Draemon

Ich habe ein ähnliches Problem und mit diesem 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;
    }
}

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

68
Rendicahya

Sie müssen setActionCommand zur JRadioButton hinzufügen und tun dann einfach Folgendes:

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

Beispiel:

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

Ich schlage vor, den Modellansatz in Swing direkt anzusprechen. Nachdem Sie die Komponente in den Bedienfeld- und Layout-Manager eingefügt haben, müssen Sie sich nicht einmal einen bestimmten Verweis darauf machen.

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

Sie können jedem Optionsfeld (Zeichenfolge) einen actionCommand hinzufügen.

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

Vorausgesetzt, sie befinden sich bereits in einer ButtonGroup (state_group in diesem Fall), können Sie das ausgewählte Optionsfeld folgendermaßen erhalten:

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

Hoffe das hilft

4
Ale Rojas

Der folgende Code zeigt an, welcher JRadiobutton von Buttongroup beim Klicken auf eine Schaltfläche ausgewählt wird.
Dazu werden alle JRadioButtons in einer bestimmten buttonGroup durchlaufen.

 JRadioButton firstRadioButton=new JRadioButton("Female",true);  
 JRadioButton secondRadioButton=new JRadioButton("Male");  

 //Create a radio button group using ButtonGroup  
 ButtonGroup btngroup=new ButtonGroup();  

 btngroup.add(firstRadioButton);  
 btngroup.add(secondRadioButton);  

 //Create a button with text ( What i select )  
 JButton button=new JButton("What i select");  

 //Add action listener to created button  
 button.addActionListener(this);  

 //Get selected JRadioButton from ButtonGroup  
  public void actionPerformed(ActionEvent event)  
  {  
     if(event.getSource()==button)  
     {  
        Enumeration<AbstractButton> allRadioButton=btngroup.getElements();  
        while(allRadioButton.hasMoreElements())  
        {  
           JRadioButton temp=(JRadioButton)allRadioButton.nextElement();  
           if(temp.isSelected())  
           {  
            JOptionPane.showMessageDialog(null,"You select : "+temp.getText());  
           }  
        }            
     }
  }
2
Akki

Fügen Sie die Radiobuttons zu einer Schaltflächengruppe hinzu:

buttonGroup.getSelection (). getActionCommand

0
Spoonaroony

Verwenden Sie die isSelected()-Methode. Es zeigt Ihnen den Status Ihrer RadioButton an. Wenn Sie es in Kombination mit einer Schleife (zum Beispiel für Schleife) verwenden, können Sie herausfinden, welche ausgewählt wurde.

0
CoderBrain

Sie können getSelectedObjects () von ItemSelectable (Superinterface von ButtonModel) verwenden, das die Liste der ausgewählten Elemente zurückgibt. Bei einer Optionsfeldgruppe kann es nur eine oder keine sein.

0
Daniel Rikowski
import Java.awt.*;
import Java.awt.event.*;
import javax.swing.*; 
public class MyJRadioButton extends JFrame implements ActionListener
{
    JRadioButton rb1,rb2;  //components
    ButtonGroup bg;
    MyJRadioButton()
{
    setLayout(new FlowLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    rb1=new JRadioButton("male");
    rb2=new JRadioButton("female");

    //add radio button to button group
    bg=new ButtonGroup();
    bg.add(rb1);
    bg.add(rb2);

    //add radio buttons to frame,not button group
    add(rb1);
    add(rb2);
    //add action listener to JRadioButton, not ButtonGroup
    rb1.addActionListener(this);
    rb2.addActionListener(this);
    pack();
    setVisible(true);
}
public static void main(String[] args)
{
    new MyJRadioButton(); //calling constructor
}
@Override
public void actionPerformed(ActionEvent e) 
{
    System.out.println(((JRadioButton) e.getSource()).getActionCommand());
}

}

0
Shanaya
import javax.swing.Action;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;

public class RadioButton extends JRadioButton {

    public class RadioButtonModel extends JToggleButton.ToggleButtonModel {
        public Object[] getSelectedObjects() {
            if ( isSelected() ) {
                return new Object[] { RadioButton.this };
            } else {
                return new Object[0];
            }
        }

        public RadioButton getButton() { return RadioButton.this; }
    }

    public RadioButton() { super(); setModel(new RadioButtonModel()); }
    public RadioButton(Action action) { super(action); setModel(new RadioButtonModel()); }
    public RadioButton(Icon icon) { super(icon); setModel(new RadioButtonModel()); }
    public RadioButton(String text) { super(text); setModel(new RadioButtonModel()); }
    public RadioButton(Icon icon, boolean selected) { super(icon, selected); setModel(new RadioButtonModel()); }
    public RadioButton(String text, boolean selected) { super(text, selected); setModel(new RadioButtonModel()); }
    public RadioButton(String text, Icon icon) { super(text, icon); setModel(new RadioButtonModel()); }
    public RadioButton(String text, Icon icon, boolean selected) { super(text, icon, selected); setModel(new RadioButtonModel()); }

    public static void main(String[] args) {
        RadioButton b1 = new RadioButton("A");
        RadioButton b2 = new RadioButton("B");
        ButtonGroup group = new ButtonGroup();
        group.add(b1);
        group.add(b2);
        b2.setSelected(true);
        RadioButtonModel model = (RadioButtonModel)group.getSelection();
        System.out.println(model.getButton().getText());
    }
}
0
Backabock