Как узнать, какой JRadioButton выбран из ButtonGroup?

StackOverflow https://stackoverflow.com/questions/201287

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

У меня возникла аналогичная проблема, и я решил ее следующим образом:

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

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

Вы должны добавить 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());

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

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

Вы можете поместить команду actionCommand к каждому переключателю (строке).

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

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

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

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

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

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

Вы можете использовать getSelectedObjects() из ItemSelectable (суперинтерфейс ButtonModel), который возвращает список выбранных элементов.В случае группы переключателей она может быть только одна или не включаться вообще.

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

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

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

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

}

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

...затем для каждой кнопки:

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

...слушатель

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

... делайте все, что вам нужно, в ответ на событие

protected void radioButtonActionPerformed(ActionEvent evt) {            
       System.out.println(evt.getActionCommand());
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top