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

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

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

  • Aussi, à partir de ButtonGroup , je peux obtenir une énumération à partir de getElements() . Cependant, je devrais alors parcourir chaque bouton pour vérifier et voir si c’est celui qui a été sélectionné.

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

Je voudrais juste parcourir vos JRadioButtons et appeler isSelected() . Si vous voulez vraiment partir du ButtonGroup vous ne pouvez accéder qu’aux modèles. Vous pouvez associer les modèles aux boutons, mais si vous avez access aux boutons, pourquoi ne pas les utiliser directement?

J’ai eu 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 Ssortingng getSelectedButtonText(ButtonGroup buttonGroup) { for (Enumeration buttons = buttonGroup.getElements(); buttons.hasMoreElements();) { AbstractButton button = buttons.nextElement(); if (button.isSelected()) { return button.getText(); } } return null; } } 

Il renvoie le texte du bouton sélectionné.

Vous devez append setActionCommand à JRadioButton puis faites simplement:

 Ssortingng 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()); 

Je suggère d’aller directement à l’approche du 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 plus de le consulter.

Si vous voulez vraiment le widget, vous pouvez tester chacun avec isSelected ou gérer un Map .

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

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

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

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

J’espère que cela t’aides

Le code suivant affiche quel JRadiobutton est sélectionné dans Buttongroup en cliquant sur un bouton.
Cela se fait en faisant une boucle à travers tous les JRadioButtons dans un groupe de boutons particulier.

  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 allRadioButton=btngroup.getElements(); while(allRadioButton.hasMoreElements()) { JRadioButton temp=(JRadioButton)allRadioButton.nextElement(); if(temp.isSelected()) { JOptionPane.showMessageDialog(null,"You select : "+temp.getText()); } } } } 

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 y en avoir qu’un ou aucun.

Ajoutez les boutons radio à un groupe de boutons puis:

buttonGroup.getSelection (). getActionCommand

 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(Ssortingng text) { super(text); setModel(new RadioButtonModel()); } public RadioButton(Icon icon, boolean selected) { super(icon, selected); setModel(new RadioButtonModel()); } public RadioButton(Ssortingng text, boolean selected) { super(text, selected); setModel(new RadioButtonModel()); } public RadioButton(Ssortingng text, Icon icon) { super(text, icon); setModel(new RadioButtonModel()); } public RadioButton(Ssortingng text, Icon icon, boolean selected) { super(text, icon, selected); setModel(new RadioButtonModel()); } public static void main(Ssortingng[] 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()); } } 

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

 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(Ssortingng[] args) { new MyJRadioButton(); //calling constructor } @Override public void actionPerformed(ActionEvent e) { System.out.println(((JRadioButton) e.getSource()).getActionCommand()); } 

}

 jRadioOne = new javax.swing.JRadioButton(); jRadioTwo = new javax.swing.JRadioButton(); jRadioThree = new javax.swing.JRadioButton(); 

… puis pour chaque bouton:

 buttonGroup1.add(jRadioOne); jRadioOne.setText("One"); jRadioOne.setActionCommand(ONE); jRadioOne.addActionListener(radioButtonActionListener); 

…auditeur

 ActionListener radioButtonActionListener = new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonActionPerformed(evt); } }; 

… faire tout ce dont vous avez besoin en réponse à un événement

 protected void radioButtonActionPerformed(ActionEvent evt) { System.out.println(evt.getActionCommand()); }