web-dev-qa-db-fra.com

Comment puis-je savoir quel JRadioButton est sélectionné dans un ButtonGroup

J'ai une application Swing qui inclut des boutons radio sur un formulaire. J'ai la ButtonGroup, cependant, en regardant les méthodes disponibles, je n'arrive pas à obtenir le nom de la JRadioButton sélectionnée. Voici ce que je peux dire jusqu'à présent:

  • De ButtonGroup, je peux effectuer une getSelection() pour renvoyer la ButtonModel. À partir de là, je peux effectuer une getActionCommand, mais cela ne semble pas toujours fonctionner. J'ai essayé différents tests et obtenu des résultats imprévisibles.

  • De ButtonGroup également, je peux obtenir une énumération de getElements(). Cependant, il me faudrait alors passer en revue chaque bouton pour vérifier si c'est celui qui a été sélectionné.

Existe-t-il un moyen plus simple de savoir quel bouton a été sélectionné? Je programme ceci en Java 1.3.1 et Swing.

64
Joel

Je voudrais simplement parcourir votre JRadioButtons et appeler isSelected(). Si vous voulez vraiment passer de la ButtonGroup, vous ne pouvez accéder qu'aux modèles. Vous pouvez faire correspondre les modèles aux boutons, mais si vous avez accès aux boutons, pourquoi ne pas les utiliser directement?

39
Draemon

J'ai un problème similaire et résolu avec ceci:

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;
    }
}

Il retourne le texte du bouton sélectionné.

68
Rendicahya

Vous devez ajouter setActionCommand à la JRadioButton puis faites simplement:

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

Exemple:

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

Je suggère d'aller directement vers l'approche modèle dans Swing. Une fois que vous avez placé le composant dans le panneau et le gestionnaire de disposition, ne vous souciez même pas de conserver une référence spécifique à celui-ci.

Si vous voulez vraiment le widget, vous pouvez les tester avec isSelected ou conserver un Map<ButtonModel,JRadioButton>.

4

Vous pouvez mettre et actionCommand sur chaque bouton radio (chaîne).

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

En supposant qu'ils soient déjà dans un ButtonGroup (state_group dans ce cas), vous pouvez obtenir le bouton radio sélectionné comme ceci:

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

J'espère que cela t'aides

4
Ale Rojas

Le code suivant indique lequel JRadiobutton est sélectionné à partir de Buttongroup en cliquant sur un bouton.
Cela se fait en parcourant tous les boutons JRadio d'un groupe de boutons donné.

 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

Ajoutez les boutons radio à un groupe de boutons puis:

buttonGroup.getSelection (). getActionCommand

0
Spoonaroony

Utilisez la méthode isSelected(). Il vous indiquera l'état de votre radioButton. En l’utilisant avec une boucle (par exemple, boucle for), vous pouvez trouver celle qui a été sélectionnée.

0
CoderBrain

Vous pouvez utiliser getSelectedObjects () de ItemSelectable (superinterface de ButtonModel) qui renvoie la liste des éléments sélectionnés. Dans le cas d'un groupe de boutons radio, il ne peut en contenir qu'un ou aucun.

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