Как узнать, какой JRadioButton выбран из ButtonGroup - PullRequest
67 голосов
/ 14 октября 2008

У меня есть приложение Swing, которое включает в себя переключатели на форме. У меня есть ButtonGroup, однако, глядя на доступные методы, я не могу получить название выбранного JRadioButton. Вот что я могу сказать до сих пор:

  • Из ButtonGroup я могу выполнить getSelection(), чтобы вернуть ButtonModel. Оттуда я могу выполнить getActionCommand, но это не всегда работает. Я пробовал разные тесты и получил непредсказуемые результаты.

  • Также из ButtonGroup я могу получить Перечисление от getElements(). Тем не менее, тогда мне придется пройтись по каждой кнопке, чтобы проверить, не выбрана ли она.

Есть ли более простой способ узнать, какая кнопка была выбрана? Я программирую это в Java 1.3.1 и Swing.

Ответы [ 12 ]

71 голосов
/ 05 ноября 2012

Я получил похожую проблему и решил с помощью этого:

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

Возвращает текст выбранной кнопки.

39 голосов
/ 14 октября 2008

Я бы просто перебрал ваш JRadioButtons и позвонил бы isSelected(). Если вы действительно хотите перейти от ButtonGroup, вы можете добраться только до моделей. Вы можете сопоставить модели с кнопками, но если у вас есть доступ к кнопкам, почему бы не использовать их напрямую?

26 голосов
/ 11 августа 2014

Вы должны добавить setActionCommand к JRadioButton, а затем просто сделать:

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());
4 голосов
/ 14 июня 2016

Вы можете поставить и actionCommand для каждой радиокнопки (строки).

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

Предполагая, что они уже находятся в ButtonGroup (в данном случае state_group), вы можете получить выбранный переключатель следующим образом:

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

Надеюсь, это поможет

4 голосов
/ 14 октября 2008

Я предлагаю перейти прямо к модельному подходу в Swing. После того, как вы поместили компонент в диспетчер панелей и макетов, даже не беспокойтесь о сохранении конкретной ссылки на него.

Если вам действительно нужен виджет, то вы можете проверить каждый с помощью isSelected или сохранить Map<ButtonModel,JRadioButton>.

2 голосов
/ 20 января 2013

Следующий код показывает, какой JRadiobutton выбран из Buttongroup по нажатию кнопки.
Это делается путем циклического перебора всех JRadioButton в определенной группе кнопок.

 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());  
           }  
        }            
     }
  }
0 голосов
/ 24 марта 2015
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 голосов
/ 11 августа 2014

Используйте метод isSelected(). Он скажет вам состояние вашего радио кнопки. Используя его в сочетании с циклом (скажем, для цикла), вы можете найти, какой из них был выбран.

0 голосов
/ 14 мая 2014
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 голосов
/ 28 ноября 2013

Добавьте радиокнопки в группу кнопок, затем:

buttonGroup.getSelection (). GetActionCommand

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...